{"_id":"@atomist/sdm-pack-analysis","_rev":"217-e367e358a913f8a48c07fb84e2e43c69","name":"@atomist/sdm-pack-analysis","dist-tags":{"branch-master":"2.0.0-master.20210108051840","latest":"1.1.2","branch-add-tags-to-analysis":"0.1.0-add-tags-to-analysis.20190417103400","next":"2.0.0-master.20210108051840"},"versions":{"0.1.0-master.20190130020059":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190130020059","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"gitHead":"1e7a8fb3881b133c25d34389feda42ae4886fda2","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190130020059","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-t81uwjvtGqK4PemgGCfVNknQrsEM00QWin1s72ASQUQLrqhfDrBDpdW/HrXQoG68FiMs6b/lTVB1xoySC3qEmg==","shasum":"e3f56bd85cb1c8a99c84cec4510cef78d1e9c518","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190130020059.tgz","fileCount":64,"unpackedSize":617366,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUQW4CRA9TVsSAnZWagAAvoIP/RbecVHSVai4zOuCBXQl\npK1OT7Ve3A44O3TGxk6lg0jJdwLVfjpJ4eQjTp35xaIrGahc4rf9ZLeHW8I3\n9pawEjiawvq/5eirkVqxAycOU+lDWyloaRivEjqX//aFzWlUAwwpyyme8plx\ntGLPU7YSYrYBFytS3rkTNYOatTD65FW34ULlCYHG7cfQG6MngcC5N+n4h7Ln\nrBN0qtObXVzxQJy8TcREE28KsPV5zBh3JHNgMQpf2mDiI5dbJblyeM+YXFmC\noDRmyqG+LsjPqmAartedrN6TrbE6pEdp9wyR2Pcv3RFy6iqDmzy4taKWEnpJ\nTfIq2moVbi/O6KYbdlSkKuMntOHpkjsgiaL3Ox+TrlX2kyTiOyKjg8m6gFvB\nqCsBnR6oD7WQ353SraBGvm5HkK5CemTSLgkwhdbxdw9V/1tpa2m95cswO/jC\nhiazvVPm17eRvIfQUOKVHmBC3TLDkOtXjjnX7v5wCKyPTMKY810YZALIm9x5\nTd57SOJFjBPrzVnbCGrIc+PJ6ZVPZ52z6wsWIeet3u2gQW22EpefKdpPnZKi\n//jhMZJkkITbEdf/nZfQBKLW3TuIRvszijbAiNI0NfneWM4Dkt2VzJnuy/PF\nmiMRvrxkcS2il2kCfYlVHuriVvIgz+qZ/O+iMuQRUO41vgGb9PWPW6k3dL6K\nRItw\r\n=nlhP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDVyxYYWpduGUjto4mVzhs0xbt/As2lLRUKdEPpYPGctAiEAgg2CWeYVHEC301dusTJlQojeSEYwNLSZK7Xcs366PW4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190130020059_1548813751489_0.9970952262496116"},"_hasShrinkwrap":false},"0.1.0-master.20190130215550":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190130215550","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"24a26fefea0482ee14f911d2b9195f3fbb166ed1","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190130215550","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-cHFnXyO0YK7IGpDE2RDu3PASbXDw+ClMReFEljzH+wy028jGOj2Sd3Zq6oy73C6VddRXxHrVeHzQXFBGEdABag==","shasum":"986628032176a986dcfe3071800e8f41beab4d7b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190130215550.tgz","fileCount":64,"unpackedSize":617553,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUh3SCRA9TVsSAnZWagAA46kP/0vzxHSUqrWjQqtKsYxk\nb9UbAzP3UrlHpijFCRAr32qJevpmPoZ3R/p9tRJ1pyozABanixP0vRXg35m/\nrEEJfE3UIak6RaxVbAW26JBQLd0+I5EZpowqKDWnPx4s/AqbbEC0XfTQrppB\nFxHqltf9AkT0X/7aKYRcDdRx414XspwZ4rh+weUOdzYjgh1WlG9nH5slPc4g\n1lrxJJrblwtxlWshfPqCOSsXxsfW9OIqHpN1WkBo/mgWm2cjf8buZjAeguwO\n57PJ5/ZH/SRLRE0FZb/lbfAq3Pu44WcXgLRKoDAPxKxiO3c/ohZKQdn2JorD\nQnMt3UL1YOpcrsCX6HjaH8zzgvf2b+KEF2wU5zI7QgQ9nlVDR3FlwiM1+OnO\ngoKPQBtVuQYOBKqCGNX0n4Fbs/1ez9psLKN4ZGcXk47+HWH6aR47+uu5s8x+\n3V0l74tRH3y1k1hlLnJHfcBt8b9RQ4x7IB5qFUUeWIDzWewxvLjElxbvGSgS\nyPgFojHArvYRBpSt7zIVjQUfrYrSrrLivV/DRFPhsZx517cQTUeJmYH5flhp\n5Mn3X7TVLjSGYn9/HGlC0fMD55HUujZjkAUaCxyqU0DVW+OD87b0CKtD1Yhk\nxHwPilTAm8wHrG6hq/+/LmHDsOIuBZtjYh4bOMReaQL1CFYrW+nH78m8LrKG\nCvis\r\n=Lruj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBoYpwQN054PqlXeePBnUDyfKDIU1k6v771L+1XRn3pIAiEAz8r/TQc0srfLTPW4Z3CUJARy1QX5zgm14T2EXjVgHPo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190130215550_1548885457728_0.29429975476588766"},"_hasShrinkwrap":false},"0.1.0-master.20190130235752":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190130235752","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0a8457469c64ee7d52adb642f8ebe60a53003ff7","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190130235752","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-60LM2KK2NingyqDeTWnL6woSzKFvPf+5a0DnBrktVcNKkC4cgKTeIW5D4FSQZO7g7yHQZ/lpO+Z/yc9R+yRF9A==","shasum":"78d34cc2c2d5f222ef0eccb1c857ed1d3053d811","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190130235752.tgz","fileCount":67,"unpackedSize":631190,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUjqHCRA9TVsSAnZWagAAIOAP/31KT+0SHwIncNuT+4Gx\nHU7Lpfc1MLBHewOjnYhu4MVX+otAhaqqq1MEck2A2hnlc5peBuILLNlzOw77\nGuYT3GwoXt94EvetUMAs70tYEKe5fd6b3MVHiJ1qGWRWlqwK3gO7qXq/7t57\nVOCwqp8eF8RjoL3uGC+vK5dcKIg1MnzhAD0l6s+2DtJUKAIHJ8siC9zwgWsQ\nXRoYww4gnHU1PRxwTQzv1+YmI0KXlAhUsRncayGmxRWAY4c2taIIv06xQX0P\nQ2MRBWH4bJgP1tsOeEX9iEhBRmuXI9X4OM8fU1bBO/V/+lH3Qlbf354+viHL\nJzPnOiA/NAFC4a4+m7gDtHuee+Xfq1mAHQghWk5QpHi2OUFoS753RLKR95cR\nFzQw91vpQL1+5MhL2jsQdB/9130S/3jzrpN0BoJyrlCuAuMElyv0XwJ12oFs\nom0gi4kcg2KEWZak26GtZInrTs05TEYbRdmMSA1CNWGlkizNvmd7D/9mWRzj\nUbQ89AVI8nhE7kSE+jXWHvR2P6bJ2nNFJqcucmSMga4UeVzFuZXzZM7L9Kc1\nVl9E6P6kZz2uvNA7dJtI5AaUy2lFv0lJ96VJc792ONdK9xGNgCQrDIbYUm0x\nw2XNzLGuYw+CcqtUG3P3mwN0pWhernR6ZImySspBTlmMoSrZJKmR3OZqzIgL\n7Vt3\r\n=WEe0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxXC4vOUjk4I1cOKviJ0LGmi3OdAy8CqCoe7KGWj0AGwIgOEDDl5dR/js/soz5Y3xgju6ltbXzR7GeY2Mmh0UF554="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190130235752_1548892806727_0.8658883831761923"},"_hasShrinkwrap":false},"0.1.0-master.20190131024130":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190131024130","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c24af6cb063bae6190733709c3d40241403d2f2b","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190131024130","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-GRU26Ii0v6pkB5wjyj/apx3waA1cQTBk4FLCYgaOi707HskPmB1op+Hz7uENSW2kLoQz/3GVFgXqIltK4GrmDA==","shasum":"98c49741fd765538d7073de43d55c50c8ff045b9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190131024130.tgz","fileCount":67,"unpackedSize":631544,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUmDLCRA9TVsSAnZWagAAYdEP/0fWP29HKDiOkdPiNQLE\nDwtKkDyGAtOjLuf2KDpsB4C3t0urHycxJpvyW0J//J3T+yUsaei8O4yrG30w\nf6mLC+SG/4Xe9Y2L4urevntJER0Y9PnKDuapRfSJakBUxWNHzhXdaUz6jqPz\nBZ6Fv8kamvVGA02Rr9I3pA6nUV9EOxkA7HmAm2+fez9EUfzExZCiaanyAh1z\nwSEL8f/+9dkNI3TBxfMb4beEr6IEUPlLiwVdVtkv1lzypvhP6WQzN9hSjcAz\nadM0q95W2kdy+oaJhQmABecyQdRzEBuHQmcN2eiZMLHC2EnysYY1ttEo7WIV\nzOCRkttCpRg7x/4sCjQ2ajwqX3XuOzce+z+rJBBW481xw3bdsTaBKhC8vwN6\negi3IsW1EH0nbC7J62esH7MUKq4WiGmb5Yoh7nV3LH4QLprFj2kkqRjaWGFR\nf958zfVD1Wl/rjVVLqlBY4QeV9HpRG7nlfAlXnvs/e5pnQdYDhpgun+dOMk5\nUjesLXzXHO2SU6yUkn4QJDExJ7JkCVUTxTWHPS/2bQTI3M3zvMiiJUqDI8SU\nKU5QhmMnr9ol6/5Blf01Rd8nwlACqrx+3AnBENMX0NeHa55IrJtRRGTJgCfQ\nIS6RXv11cdxlE9wI++hee8pHKLAOZ2UbyDKUxx4MjqPGIF/oAWXXskNPzQh+\npK8K\r\n=HM1m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDgKNccJzDyyxQuFzsYXOJpzwWmrFIRCYV0vyEbF8x/6AiEA2G0WN9aMOwjHdEEW85cW2zQsr02TNh1tFmB8vutvir8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190131024130_1548902602571_0.8613848773329704"},"_hasShrinkwrap":false},"0.1.0-master.20190131030116":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190131030116","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"dca03383ce760d3871c08322111ecd7a226fed67","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190131030116","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-sArnzcfUxGACa2MiH82qetFU7UijrPEUiXl3QEuW2D4FCoVw91fRdhquMEnYII/4Zw9e8Lj4CAyS9VpfENNU6A==","shasum":"b29d0e631a04514c910f80663a7e82c7d0876cc1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190131030116.tgz","fileCount":67,"unpackedSize":632152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUmVaCRA9TVsSAnZWagAA3PcP/0pOuDtdoftwmKHrOX2b\nmTSTxvjmOQQdJ5dnscK4tgV/0YMEjzut3vLSWbOQ9r96KY7fi6wku5JuHAaX\nUMGeW9UhTDJwpG08xLFWVpC6F5UACMu0dasxFxhV+x9nkc+THbSwbyhckitE\n0WPurcPUnHZHrC9FkFtgL4ILoGidnFaQnbUWbsG0kRnSoWKUw/b8YlvTGZ5f\nmCMiSkpYlGKllvrisSYXdQbrUBFrcPe2dkDNLNmRHze246tDMP86RkekgX0t\nGdlgmgnjLbRdSucNq2Dl0gQah4w2oUj1eCc/6gQlHDQpD2AvtKvEzhv34XxM\nED2LqoPFN5vdplzpjclnIaD37MXbuW5dJrckJTlYDabFWuO+czLJS1kP/wZ4\nC7TMaGWtLyF93ZpjUaDPH8wNwcXrcDRUYCU19onzmr1DDa7mxqtmZdkQowui\n/5Btlx0IqTVFXQSq5THcnnCThkEM0sLnI8quRVBda7SqOnEuTiv3XsNK2VS2\n5V1gKpSCSC1bQ/sK1VQXl7pb0SLrFsSSPT3nRo7on5DVYGVnUo+JXlVv487T\nI7Ks9DuWfgav0WGsj5sOkbNgYww69DxIkZf6CcufQsmPGon87jIgq53X4OYq\n8OfGUIPfQE6ZBUHZb1iKmc1H1Bo1UYBRooATbniuEwvskc/TJlg7ARMHqVkt\nq5yc\r\n=zNWJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIENgzx9ETiJnhyOZgLBx8+MkF+87sjF28GzW4BcrZIhvAiAdyRqxoM6sDxTEEe16OElvnxWPNKY3yTXP3A3kmRv7kw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190131030116_1548903770087_0.21457000436366136"},"_hasShrinkwrap":false},"0.1.0-master.20190131041240":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190131041240","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d49966d4a3c0af71715fdbd816bbd92de7739bb2","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190131041240","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-OSJ1jUg3cslOr/ilIXuhSFybl9tsY0HnasUVZ96ZaYsNBAcw626iiieY4/pC4zxCwMdNptU7XRT8rAYF29LJLg==","shasum":"a86c878c9ebf7791770e658c1e38f64c1ca1f84b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190131041240.tgz","fileCount":67,"unpackedSize":632137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcUnYtCRA9TVsSAnZWagAAvZoP/2sE/yEDFpSlGVQYLxNY\noKUYiUMGDM9bHf4cazCBiYP7wrHKipA6bG2VXsRwrM70Ny2SHKhxTe59hOAJ\n2lg4BIbsJJh8TdpkHyZUqEyjXv5wbYABCukH19UzaDI+isPsC5Hc07S7Mxnq\nKdYQbG8YL7OWSq44OtASi8gPruu4dmRMAB7Y9fLZNQZXM733yS5BoWe0MJZp\nysHTaUjSUY3ERV62PAI4JyGS3YL1BGZG9Kd6YwvglfMaVzNwNrfYV3YCZ4JQ\nfPT2GDUrEFG08mmcVX2OYlS0wpT+npgpV68tEs8bova7B+al/8fCe90ZyikX\n6GQFM8v6lLIMUbGhI327NC8T19K/YqD8HCfs/nKoPdeBmxQMK80QWV0XgIec\nObuSZZXEGfrQo8eRj/sbpZsOrzEqRcA4fzliA+7U5FImtZJS/viFVjx7MsIl\nnapkic5TTRDP66sx2x/JMKLiCWZJszb+s/Z9acP7VYsYrczlOy70hJxRkXOS\nKiJcKn/jVc3BCFtzxK8KSETmMiiLHPgNdDzcP389EXt6SYWr3h25jSbcDq9Y\n9OO3m/pedZUuOKUbb3+gUmxSqDUQpofYPjT1tPVLlMPCacDh6+SRqSRJcLnA\ntbqQgjsu5FOroFvp1oAIY69LgltPjUWU8oH4dWV3Kylam1wiAieqSjNJGmpd\nX6ZL\r\n=5KYC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8mpwP5ohKI/m0MPE+GSxjpFcVEcU2eTB1ImqXjAKdtAIgauCrx2W+RrXG7d5lNrFUEqaiu9o3BkEic4ppTSWtUSg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190131041240_1548908076449_0.6824202553522158"},"_hasShrinkwrap":false},"0.1.0-master.20190131213928":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190131213928","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3dc0131bcfddee748f7952923aebe48a51c7c79a","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190131213928","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-nT0Q2iRUR6qzyaCkwmoPqfZpvuh4YrNrU/5OyRSMkVKrSVJXWObC4+Wg0Gv7AzKPw6dcyoqkz1Yif/T7lxiRNg==","shasum":"4f46dfa44e7707b38fa3bd35b4888ab45979643e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190131213928.tgz","fileCount":67,"unpackedSize":632402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcU2tzCRA9TVsSAnZWagAAZpUP/3NzxSppZ4t1CkA8ammn\nNihGLfTAwUZ8hBOyuaa0Xbx07R+ARMlzp0F1emBuo5Fh2qaqjklGDLH7HEdt\n6si2jsKc6ZWzSG9dVqnWiCBpeG7YuIg9XMF4J4hQU99SuMdf8vtqjTa1NH5S\nYrPu4Qw9EigIrb7HP2mmnqkvkDOckLYraKYH2bcdaeT6avYA9UmATr4XdBiW\n4SEmf9Bv38y7nhnMJypoTAd+Un3PgIr6SW/Z4MegNF+QKTJdzf30pp4aSGQz\nwTDrFa5IZ34k3Mb/FVhAoXWPXBISP0J09FZDQjh2/vQxDa5/26h9zopjj2gD\n8Evg2cMi7+JabuiBz59qZqLA2zrjjpNtFS6ZnRCaUqnIyLxRwEcNoSNAWQvc\n+GBgAUcRONlNHxOoICQs5FULUQp06HDlEBIY1x/kgImTSQZlGvUc78R/Jfim\nCbVbQSJPLTlE02H2SdwgeLN50wnV6x5LUDbMjreRuabCtLunkjRX+NwWr+4z\nNCrOh2LWdk9DHnZ33sFz5Oj9H2GRoAHJMnb7/nOsnTwwkkcZXcUm5dfz9xda\niwof1XiMRw9IzIoC/FPbtFN6hITHibz24E0gTp1umcAN6dyKtYWGwqjTPwks\nVOnv1BHIHn+rJqbsme6wzZmEEHJeT/eje068hdvZkKu262d5IFAlj5sRuJdO\nAa8Z\r\n=zj5i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBvMQI2O/MhjW6+eAtncMV0Jf2pznjazl5rHVYEWgAUmAiEAyfP8+LKsAmcDx66cD/BmAPAd/OVkNlBgKrjfjSjy4U4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190131213928_1548970866580_0.03205589020103128"},"_hasShrinkwrap":false},"0.1.0-master.20190201182348":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190201182348","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9f8f9fa255fc1c451522345e9e3b224467ce9755","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190201182348","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-4wEx7HjslN+AE1fbtoOGOUKFz371va31daKB2ZS3gMrczh3IuDc/j4Kq3jK8q2B3AEfrYwVimIHw8/ggWi6GIg==","shasum":"6672fde1bdcbb3fc26598350b8315959dd3dc487","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190201182348.tgz","fileCount":67,"unpackedSize":632500,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVI8cCRA9TVsSAnZWagAA5OoP/02QA+1mH51vkG0+erdT\nUgUASHfhuJdzcMd4hhnmd7tJVxot3AIkBEJ/GKEGCpJo+1p+BpIxJkwOa7CJ\n9E8dKIjMIJJMt4BG5apFqXhw5yWpGHhSynw0pIjz54FMCW8MiDVy8Jz9H4du\nMM5733qhtaV7leWqHn/+Op8fr/Bz8rhWWnb17DLBr3VvbFjL278hCsDVJOCw\nH1U7E2wehosb5R5aBGghaqAWWsDHDytvIjKXa0us95V/YjWQDqd7eHst7atZ\nGE5BsMxTTFMwl1RUa2ZgK9f/pSZp8pAkjfyEMugaI3c/BsQHVdSFPiveTc39\nPl1NqZJHMX3RTk6QodZw+WsGuBr+5zodZUxFAmOvrKSRDi2Hj33zOtJT0UTR\naWRrKkAWCtdP5yjWkxu2PdWlhNDvLwqUISXjw1dEf7VRKsektRNM2TyOYe+k\niePIXetn7Fdp/cb6rkCaSJkhUlXmOjg5Kw4xCP/TEqM6Yr4gmub+XvbFO+FJ\nGsi9yEuZT//h7UDVoQcMqDCMpclunHdcEIovkQZ6XUzQRs4knLSzqfYkniCr\n02XtwZOlyLyqowb0D+41GHa/hq85PLdeClPxFFpqRZSLFZJhbM8QPa28xSu3\nMTZaXvpvrIgxmCBqETTc5FEEJop5EZ3ASY5lk59fYufep6OQbQmgyu9DPfGd\nMICI\r\n=5yc7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDDniqAPfAaLpuHoKcq9irF7BF7hEnXyeioLxoG5DAetAIgO9OVgE8L9kaLO7UxClnvsvYyaUTbBkk5TxP8wW1Vxxw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190201182348_1549045531504_0.9843181393965645"},"_hasShrinkwrap":false},"0.1.0-master.20190201201636":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190201201636","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"82c40151f454ab36f3af24c9a43e5d6d14d483b0","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190201201636","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-Ajc6eYz16O/TfMyEYTEfTIqxjZyCnCejoyCluUURxMkzSzxARFm4lrLYDwzZ3FEx2pgy3bgRN7v9yzqqbrY9tw==","shasum":"940731a513d039355aa1f2415f06169c9d1ca04d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190201201636.tgz","fileCount":67,"unpackedSize":632396,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVKl/CRA9TVsSAnZWagAAjusP/0EmZAcn739Aut/f8j6/\nh4twPX5ukZdIZKS4Yh2pkdMfW1IwMNYMfXEP6M+JO3t21n54G3BY5J9iwCTy\nf2xtTFAgCplgqLgSzzti/B1NT1ukwo8Vj6umCQNfVTgRw4STbpkAO29+wG0D\nDkx5aMu9r9UscJH7u++ODSfao/V/r11BrfLldtMSNBRc4g+lGNt7uhaa9YXp\nD4fswru3uxtYqFaqFWzdFxowxHvKAH+j7xnwF/6Yu2G0fDBPb9GyIihNampW\n0HYu6qTcrsP/i53HHtA1B0xE4QSGXzEV0zR4h5fGEl2R1cdHrkHwvUY9MjdW\n+nrW55pZ+athF4++th+jUBlbYP/uIZSkNS3PEIVX+KvF2ZCnEjcbsG/9hVCu\nVe+l/46lKuk5hoF0ENR8b7dmK2QRt6zYW+3EyoyF4wOewpmnSRoAFdebEmG5\nNH/FCAme6/dm+5PITR4sxJdiiYd+WCJTUPuQSYvxOySms256rHJtCkRRyJGt\nmeHvkv03CbUw17g4URPx6bey/9GbR4PeqOOJWeKV/FSySCp4OlUG/53KW7Dd\nVQHQh/s0toq9fNxkeIoU3q/rPZiwLLIb6L0TOWh/N3MukIsJlQIC5eAsUyP7\nfvA+5OdDENoukQ2zK5925imVY8gHaMTvJb1JSVIuDur8PwfXLvJUT5wG+sw9\nKbcL\r\n=Hd+M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDgUDS3ucL0UHw0J0L2CozxbDqwq2R3yDWEdQ44fi9gfAiB+RDehWaIDBBGF1pQj/PYf3gTGUH3yZ1LLvmkfuuNHJQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190201201636_1549052286977_0.16287138044087812"},"_hasShrinkwrap":false},"0.1.0-master.20190201204938":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190201204938","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"befbc9994c42e97f9ba00b6c722766cae15c017f","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190201204938","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-HX12caflnV6zu6eYf4DFMLruXJ0Ftd9j9mQgRhug2ygz5tRfuMniIZRav8mNHDsWGNTn08adOh5GNwWnpNg5/g==","shasum":"3d1e10d82992e89226eb269238e39ab5c843948d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190201204938.tgz","fileCount":67,"unpackedSize":632397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVLFUCRA9TVsSAnZWagAAj/0P/0icnLqn9pko6ARp7/vy\ngRNs+2szUjS62pM4jZgdSLMVbI4KFgVsel/6ri9cUJx3NTi0qJEaPwzlwCbm\nhYAMyr9kT7tjaOCiIyobIG2+5HTJ3CfqqMX0kUdi+RqJhr4kZKVbISlUifmH\nXiK0ZrXn/DheukHQbv0JrP2spdVLBbI6UhI5txb93IOjFjVSXrEyl1waA6Ot\nJT6/lQ9Etn5tnfEbOV068T0jYrPV3BhH8PkE1v0UYEyPBijuL1hToDK32rpv\nQc3vOuqBdezIhVZjHUOev4Brh8Aya4bbgzMLEcRNeMb21RlW34L01f7VTCiP\nWI+HNDXGGddxzf0CQ70i7IfG5iaOnHOApqjxZwi9Oo8gcWU1CD+nwd9Zk/Du\nimGFRuj5ZxcK/T4/sb46YfaEqTnLN53XPyN2cyIiMBI9UfuLBPtilMlDzAzY\nIXB8n4plnZfVpRravBXKPCZ0KFba8U2GhuCpU9l6VaD25ZAGa3C5230qei6c\nlI5RDEsITmZpTxsO6WDrbw26QuQlroy/trFjtkgOZ1zK7OXLmoJskXxnHSN6\n7KnlCOqVXWBd36caaPIS/xE7Pr0GTSAl5ToPokWssBQdzk6pin8lIgkd6cZm\n/BMdOJwQhiGSQhusZZbtjeBkoIac55iVuFh89bEqx02jtGztopscbsDwHJo3\no3Yk\r\n=qCrX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWTwcXZDus2PWy7bP6W3VfBaTkiLX2WEoPpzQ8CQqXpQIhAPediH3XaUISo71vR5DcF0c9ThV6Aafzisk2qPs5Ga0+"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190201204938_1549054292427_0.9637338361504986"},"_hasShrinkwrap":false},"0.1.0-master.20190201205939":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190201205939","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9f2b3b64415ce265a226dd3f25c207c89a4fbc69","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190201205939","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-vJBXU7W20rI9MrXcV4mjdbjrX7jAaYD7ECKUEJYPltz6VxNyRyaI4lR/nnZ1z0WSE1+WV+NBK0/gz82zuHU/jQ==","shasum":"9bef344be94ce35985c9b5a5f25637d149e4883b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190201205939.tgz","fileCount":67,"unpackedSize":633078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVLOzCRA9TVsSAnZWagAAAfoP/2ITIZaviYdR47sKqt/0\nt8R5JkHrwI4OvbjQZ1dGxfBufoFD4O0l4gZd9PGlS7dm20W/dXQckY9LgmOz\nOoDmTTW67pkgkHgGy97JuJihN1nG85mxvGG2mxjDo4QBeCTHwIH0MFG9UtOw\nSbucjEzjJ3d/7oQWjHVY3M4MlN8MF+mTT+FELo3zVEBRs1nLyoVkjnrh/VqO\n/ElYlSVmQMBqo0x91WjUpkROVfJZcH4Lk9t5I8fdbmMeqfk8N0kEUcvjPkCv\nY2Q6XmzYklaFdvZ6yBPOAeMAzyoinuyEij7tRQ2U4iTFJmSOnTPwvczqHvAL\n0gDY8I8onzT/Yy20+LcKwjEzxjJaPFHazfchfJIc3OYaCrpARRAKitrRPo8J\n53neTJZETft4hkVtMlUuF38Uhq7SYktiQLJXriRs49+cKuJT86vNzDUuhTe2\ncEcJcjF4bRRkJVgWQoFFB2kIIhfohA33j29gxOuyJmQLnr6u322hWkpLIqRx\nSxuTjVKEDlZ5MpUIh54DN34A2SECciUufdDF451SIb9wc37wzfPtDkKf6ULN\nwsBaXiUtfNzCV2TM4y5WoFXckZF6rI/FtISaD1HbjQRhMuJe9mOSQOltpf00\nund+R616aORaz5isF9cH2Om6IKFj3al2Ks3y1zDK6RE1gG0sAtScg/m9a5y8\nzeoI\r\n=CygP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEl1U/zkuPB7r6HYIhId7UkH2MoKG8uITHivswj711lDAiAjpOyLoLATZQj5HmSIKIsVC2ykxJV/K6pBMh7MLXKfXQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190201205939_1549054898470_0.74200640825279"},"_hasShrinkwrap":false},"0.1.0-master.20190201211749":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190201211749","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e1b3d558a3ba8e13ed8f89320cb1a727d22fc482","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190201211749","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-gx1Ij5riZvDBigynoeyAwcqplm5KykrLukEIm139ucJOU1VVlY4xePXXMKzhDSmsqkw2mpzsYoP1OILzI+5o0A==","shasum":"81e2f5dc7d8d6214de7d576d11f4b3d61712a3d2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190201211749.tgz","fileCount":67,"unpackedSize":633211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVLfZCRA9TVsSAnZWagAAgcIQAIvAlyvFtcBIl/Bo/YHW\nR/2f4k68/cgCE0PZPLfZVRaosDopb8gxKhQLFaOVIVZtzQh5NfjjaJMwpADO\nRgpcugEjVuSfwF+O+XJR3UkPvOv/elg/3YLjWebsA/DK6HbR10mwUYiDqVvo\nWfcE8koPnVFLEwo2vegftfzzvKMg6KdSJRbHsLppIPMJnXGRiTT5RUH0r2ZB\ncsIG0qiraYonUgtWaFa1WVhnXRl605thdf3kYdgXXY5iGoO2zyuLbgF4pvFA\nZZNDX+9KHTHldUj1V4V8JpLxbkVzw7QtNNaOOUaIf9fcPKcgvGuvNDdcReeR\nNwQMejFFobG8YCSWNaXsApjDqQCg0OLZeCYoHhtYNp8H7Nvdlhmn2jYVL9u1\nNIVZ3Z3DHfbgYFDRxa4Ucx1vWq7GTIxV2LPHqrjlf67gWfg11A+mpRRpbwTe\nbOOZIMLNtU9CXhkNm2AD0uU1naO2K9nQc8PWlrKzxWTx46czPwJ6EBH/kfhZ\nJcYpJwZg9cK9EsKWgMOlaN2ClhKXvjgnnG790uBJ8UDSwmUv1kvcMFUle6Jf\nWpARbGyazAj4WI15iNr8+zK21jeHVAV/GP6XYpAMgRNT6ykbC2zgD6YtRSI5\n5hYSlN+ZNZ74Hl4mIME8VA6+7aaYvXzPPS36Ft5VZE71qBmyZ66v1v8UEX+j\n3etq\r\n=WhnC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHNBeJZEnsZ6GUE/temI+ISRKlUIw9VOiZf6GrRA9LrZAiANqinjl36jrdqNy/rn21gQD2b9PwvGKUobx9bfe7TDug=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190201211749_1549055957959_0.49110748950760086"},"_hasShrinkwrap":false},"0.1.0-master.20190201232558":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190201232558","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7c12e78f12024e1fd40e662a95f36a7a8460a78b","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190201232558","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-FphFX6/HgJJES/f9kyryJlNGH2FMefG8/nTsSj/0qgSLsCc4xNHLrNdzGcdXRrfSFRmYHD7HBnSQw1qRBiWCAg==","shasum":"0b0c736b1caf669101edbcac40fd38db56823c6c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190201232558.tgz","fileCount":67,"unpackedSize":634539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVNXuCRA9TVsSAnZWagAASPEP/jCHHBZtK/0dzM2Dbv+K\npfQr0KFbOO6lTrYUNuIkKQziDJaTNA9T18r+jp7xDABgt18kc6NgZvek2wbz\nYfdEiThCsOD0cj6JAJMhJunwWr04k51Im4KpvTdlqEBnw0WyDXFsahRZs5II\nq8csBGMiH4nakJECvvhhrvwAmKROdEbcOj0xchJjBILQJvpzTCfYoyLkkyKc\n77biRvHn3I4wY9un8Y5M9lzbDgr9ex+a4n+yZFT+uVND9WtUBWxUfpcAfGBB\nXT/hXTqDWFO3XdsM/TmwQEmV6IQaSWmTux1h9qItlz2ZjneJcBRyU7yDiad+\n9Otw+aZWhmr2JXqkfCwxo6Uewm7ZGYNAGvqbLmGhchu1fTYQ/gOBsO2CvG9y\nWAgJjVAWBbNkQh5gTkUhbM/NA/YycbqRS2yzfjJLRcCLDNY+vtidSdl2ZbJM\nSczV4THGzPs4Lm5I+TBOkTtbza2PMw1mTP/D0RswzzUlc1sYVipcN/4GZ0eY\nab58aE4C19dhADqGwln2HBLJ+xU0FQLxJ4tOmq8RiIDUl3iRMCjFoWKvy7hq\n0haIgcHPv5KwocHgbaGbTSgVivK9f8/Z3LmEG+HseGMNn67FZjEbhkeH3zZn\nSbwkEao7/Wzx/EYoMBWXTRlK6A5OX5GH0GHXOp1ZXWgJSN6OStHCgbvGp08Q\niqZ0\r\n=qZxY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGzd4SfLJlVIwbgYw/FzBOdTbwmjtprplXQQ6hQH8p2TAiB3T4OpQH/k9DgmRBJm+3E52CYjgUZMdUF435ZsVAGKKg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190201232558_1549063661830_0.6238992697481058"},"_hasShrinkwrap":false},"0.1.0-master.20190204181500":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190204181500","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"1.3.0-master.20190127064847","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"dfdebb40c5e16d3315d9eba9a6353daae827fd5a","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190204181500","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-ROckIrT55rqftJsGpTAARHxClV+wIrnYjZzSjQsB/DN3+vqhr09I8S+8MOh7MCCHjJchiYKlnJx5dYYyHdknwA==","shasum":"b2ad2baac3a6ee0c5088265a1d692ad42e86d7a3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190204181500.tgz","fileCount":67,"unpackedSize":634690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWIF/CRA9TVsSAnZWagAAinQP/2W1/ZVRPsMEn0emv6CS\n3bBchgvLgbzMc8ACq9T43ZygnyaZJRdKMAOOg8XeKHnpUi0YgMASvqeiGsfV\nLhyHKAeOqdzYjUcx0CHQuDbvc9JICDMNf93dia4TXWv9Bz0dhgPrZKi2/IBC\n4eDPO6sa6BwxIp775a9ACRiWYqc6NO2yvDdi1fom6fe0NDzoZEv1M0XbuL+2\ntJXc+GPo6FngxykDjV47TUTiKhn11CYB8gzeUCXzFqYVkVd5UJJI+apbnxGR\n1+/ob0rzIpPdgEbnosPD4NDh5lWNgZaJVwZ8MTXtyvLOZLFXiHrPUNUjUPAQ\nlwPml0pnh/TodbA7/OlWyiu7eSjvfW1m/vX0qUqi2WDpg/mY5ljI5o8Ls9Jq\ntZm2FSWmTw04fqaYjt8vL0jGA50Ba73aaDep27IMeUe5hN3+lW2fPsEf4OoO\n4k3Pc9pyS9F/xvFw5jbdXR6orKGX3IiqsfyVdoUYoXrqV6n/NZZc8+NysB2E\ngUg2YE+jZABtCH2zYD36MJr6q0vDpQyfermUh6FA+YzeSJjpACOkIlbYJKBm\n9A7rIeoFuZaM1qdtY2f7RnOp0VmtJRxhaKvhSSQ5G8JkrOCD9aOr/IbbTNMn\n/kO9rm0AzMh5+k4M4pihh6sGC+JnkYVyHW63PKET1IyphWnVTR/nb9OWjmKC\nLHGJ\r\n=k6X0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFzhfXUDXd5n67naGxl+p5qyKlKrNZfvE5W1R0ffLOK1AiEAiUShBXhOc6rXo0qjYWaBd96vU4Px21LXY2W2ytKbd2w="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190204181500_1549304190607_0.642552258835329"},"_hasShrinkwrap":false},"0.1.0-master.20190204233823":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190204233823","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f06fbf9724e9528d3516a72c200b515374e9a7ce","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190204233823","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-4UrgMBnqECSnk9mLGPGzqWnCTS9Ru9e6KUbhA0Dg4Cm/xxiKCgEBTvMXa9ACzlTpReXwtfgEGq7TjGGjE+m81w==","shasum":"6964bab428cf577380d7b224944787eda1770755","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190204233823.tgz","fileCount":70,"unpackedSize":641658,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWM1PCRA9TVsSAnZWagAABaUQAJPCfm/OD/5PtnKkLV6l\nSz5IJObfsPw7bIT5ANi4+CQr7g4na7viqIcOxNI56eq/26qCxclFfnis/ehn\nqNAZ7fuhUBWz7540LXLdmVF2at1/6Q/YCM2FfMQWVZurTA166SCsOyVl2JFO\nkgQgfYrxc56Dp++yVLPdpeEZsCpWXdUefTnkQRUh8PLVGuYZdaIMhhsJj1S6\n8xl6LXaauEj5N1tUQFXIUsAM4Wjt79Z7McqNBB2F7TDioe94mLKQP8OzKYaZ\nHGrTsCCyYpj4WgoegwSsX/saqwWB98keigOmfFI+YSIr12RmUxivzDauCcnC\nAN9FdMN7sUVz8kmXXNdCtniyYk/tWs4MvuVgEKf9fncp4PPhOkwSAP4dfELo\nQTBjHts8o7utTf6ey/p83ElUXH+1Mz/lRs5MBbey3dRrArzm/Z2R/V9kRqfJ\nq5IjApTUHlDwQBL3L2pCqnW3xg5IJRr7ZI4IEA1h/ElkHtg2oHWiuuvUBksx\nsjZr+419qemcuffxeFdMEhij1G3yhvlHVMNsypgZO996Gmpaa1wMutk/JJ6t\ns7Hoc1cnb/9OEmSyU82cgCuTlYYYqzUwy4c4aDx5cOB/xLkuiwuMg8Vm3uJL\njCqVnw/l7tnKqZK0/e+AadiJT9DpTTUK9VlVp30uOHhN6ngDg8al5+uFdO8d\n84Fb\r\n=7Lgu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGGFpEgzAS5pFEWDz4ShBqrTKurrN78VT2P9yx2tbynQIhAMojQDWZoGhSPe5yC82tNaE2P3twFPp4ob+OyHltsPf7"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190204233823_1549323599116_0.043759429572753916"},"_hasShrinkwrap":false},"0.1.0-master.20190205011008":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190205011008","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ef7f04f707e459329455e42f4e8c3db032ec142b","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190205011008","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-eI9Y5snDz5/xX1KmmylekuynzGs6Q2qCKXVjb3svidNv+YvOM+/9FoYBZeEg/dGHfgMX6c1XetYzENk1BTZ0cQ==","shasum":"7ec5f319c45653cb4fc0beaba5ea59deafa84350","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190205011008.tgz","fileCount":70,"unpackedSize":641828,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWOLSCRA9TVsSAnZWagAAY6AP/0iKUP4imRvgxelLtKk1\nsW221hPjl5i6ic44JhNj5M0TuKETYBNRsgW0x5URLB2WqCxn123wIp9h3c7/\n1tbWDLn9f39MJ/ZCtv4g3UOOB9PI4k4YM1wDGrH+cr/0QeTCGVK6z8NWRlJE\nqux+VZ3/0luzlgqoKtVLMQDDMGptWxIZyPStcb/KmdHE0ckyeMKZ9Sioq5ki\nbxgPde6/TBlcqdavIu6N/XGkHws6mfs0Z0eUHAFp+dqgTeugJG2hfn1zbvaS\nU20QXRa4eXK5QYwU2ShS2sALq+s3L/HxSi+51En84Wshw9svRgNRW4kvv6lv\nhiQP9ocWPk6pEAugV6LHjR8F1kShGYMPmDMEtCPnEqYUrFQxRjDBD/G0xfjE\nlmz4GQeElShfTzYb38w5ZTB9f/FeDDaq9A5powaCIAQBH5Gf4BgFNJ3iW5c/\n19pzDI9iwl2QbEcsaYbdhtRqK5EZtoOqkLZKYuIRjzfWMkQtLkhm2fsseCde\n4hIClTf5tz4XOz1SF/R43h6tPjGRaT7EZKmgkPMX8wpKpeKkggrliI6878Ow\n2GxaXu1E99wM+iu2eTvpYkYvyayCzQ1/vcwUW6kOnQ8mS9O63Vzflfzmedsj\npl1Gf66zhYuTm8QFbIKXycHnp0wI8D4pdQU3xYjzJs5h+xEzPzZQDVSIMmir\nVEh1\r\n=z7gv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCy2FwoNgd7dy/i+iTEVRdc+qPJA0tcxE0Klo1yeJFTvwIhAO1cjBXuJmptU7s0flFBo7AB7diJBOx761ygDFUxRQiG"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190205011008_1549329105700_0.9203861975597447"},"_hasShrinkwrap":false},"0.1.0-master.20190205094459":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190205094459","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f4a2add62a50c6ee1767380c8ad4bd8caacc0c89","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190205094459","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-ytyjzKMf2SEWHb2N3lHgz9GkFQRrJfNS2u3XFi3Uyh83W03f25Jpqha5UQXjb83hXf17KW/II3ggBm/kFX8UGg==","shasum":"313391f01957d4ba854d1480f80f683a8387c844","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190205094459.tgz","fileCount":70,"unpackedSize":641880,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWVt7CRA9TVsSAnZWagAAxH8P/ifSYrqVu310oiCqQrgU\nsWh3MqMnTZNiau/l63HWZHOxHJ0n8S8P8OxnoCxerjAuv5d+xw5tl1m87fEg\n8BsJDZwzf5yLuRFO1xODkUGG2ry5b8j1UsaFKdzeIg3OyOEo3cD6zRTM8lek\ntXlJX9i4YAfzVvH9DnllLJS5hp9KJoCGPJjoZ+LOFIw4tFqXSXQHhwc9l4/m\n8kZGFnFeZd3OGJIOshSQ+Lpz9HnIzjVHdeXFCB3vXR5l5xiXpnKwi24NX6ih\nkJ/d7RuORK4pXNBjfSzME7Lw4XvW5MDuWL1OK9eiZXvveoszxz4mV60qi2WX\n5n7L/8p2WvBWdDHb7VJt0e1X5Z+I/4gtlCPdEFrWyTyH8xYZVqX6MCr9wJyK\nSL76T4EeKgtUuK0Oro2WoOG98rr7zbiv8tQelgKkJ9geqUrPs1mJSSUmh1NJ\nMEqThgodXxYypGAsDu0hsQrj0qk7HPBN3NBu+2QjfVo4nkecDy4Krcc5OSAM\nX0XcwNcxAuu7G8CXd8PayVvRfdn9IoA8LL+mQWyQML615JpA2zx9dMGg358b\nIb/tHBFfI5uRPzyJEQ5buM2MPVRwmR/aRJekQg77DrBy9z+0QQ3wzdc8ZHk3\n6TkSmMLJjdqx7Q5CliO/XR1JnJeItgr8v2BeR2DG1/owR30OA6u25Zcldcjz\n9us/\r\n=n5DY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDctKLlIq9nGKY66p/mrNVSgkUCHdtpjsGh8+shVrG+LAIgUVcOzk+pH82LwPhImvm3KuQRq+W9Hi4A0W4q9wv02EM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190205094459_1549359994782_0.6986515648071012"},"_hasShrinkwrap":false},"0.1.0-master.20190205100015":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190205100015","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"86b31c4b1302432f197e9b5d87385b1ee127e01b","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190205100015","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-nEtQPkQUtt/ZgPHLq00wmf2GOEL/vG6iqc5Zr4T0LenHTiWEkW0Na6OODvs2jbJM+U6CfpI2a951hohl+dCTqA==","shasum":"e6ae2dbef4913e984aa084d41c49d9f36e1c4de9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190205100015.tgz","fileCount":70,"unpackedSize":642972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWV8NCRA9TVsSAnZWagAA4zMP/3OzCZ5mdNqddhdxrzZm\ni+o3JGVK+Al47wwFVBK/fnrmDNV/2lJnWi4KxMotQAh9fH93i9j7J/BlINGB\nKXYcSlP+rGwiHIN3fhD38C8TIa0bvAKWSwhZzxZMED/1p3CEWbHTNmCtwUwe\n8LsljQPTxZNNpe6/V6nPKPIWEecy33i9NLEX14e48IxY0bPus/T+O5ZN3hCm\nHRUGhbfZHPKiyPNaQibq6ZRJ3Ni4QDRBZlgzASrJS53Mgcuj/+JrIJew1GnK\nWm2E5aCsm9+8lGv1z5y/B4phxHM+4FEwRRwUBMLiZcmFUM2o/AOrHy6rlsJ3\nJ/37NVvJBnymDbQzN2h+DJeewka7aAFJxveMdy+TYqconaXOcjdfumlABj3M\nAmwZ8APWEaok8R/vtonYgX607q1ArLFH4KtBjMwI2+mdIqPpS8G/0jnZSnX3\nJGW6Cbw8FxPxX9OotqvdUkF6NeyGo9Z1lez3Ag2wbx3VzvYoOreYBLEHQnuX\nqTCE0GI6Y15E28glyJ309qeZaKUthkNBp4pvt/wDHBzuGYdke7YvcLTM9cQA\n7KIwARFvn3M9lFTNWsEm44TWEcIrNzkCd+ixsAyJJ65P0CXUHDMLs36FiFQN\nRz2xZuzicUpesfCbGBkD9WJHopOpdgsxcyVm9SxE3eWlRfUHVKhsKq5OC5rD\nUN4m\r\n=AHnh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTRHjRIOf2lgSF5WAu3RPlBNSQApXd/K3Scl+ccw6CEAIgLrnPcvbEceDSPUbnwucH0+Ti8S1iQPlA3t9BXTXfyww="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190205100015_1549360908556_0.2252942874828201"},"_hasShrinkwrap":false},"0.1.0-master.20190205100640":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190205100640","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0cc999e21e77f88e1aea4c001ef8a3bfd49b3d8c","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190205100640","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-+TsvfCsh+qmkvpPTRhcbzNmlfycdd449C9aQsOlNb1NzEulqCxuTRelKkQlpOxxjE9PpjRBinmuGQ6JZ3qnDDQ==","shasum":"388316933e816c76b192da55466a0e24244f3621","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190205100640.tgz","fileCount":70,"unpackedSize":642964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWWCJCRA9TVsSAnZWagAAsI0P/2MQdMnamk009/IA9YyH\nOemroVMZoLfV9674Dhmpj4JOhRYYnhBIwqG5+g2HI2ST0D6tOFWvPTqvhTa+\nVWeV5RIDiGG9dtUjAQJqYSIMrOLrsp5tToefv/nsHc9wJleHVCVOcUhbdHKz\nTgnRRBlTE5W1zl2C0W6zW4rxWj26aolNsEYjHj/Kw14xIb+ICMXBC7adQF0Z\nmNOa3ESF5tmEkhk0/OneKjG3N/YADvxcdSIRkvbB5HOLLdwAa+C/KpwUjQ7k\n1NZdTlBhInZarZZ5xJvikUQAxYrMHUWVIB7CWpkNA2LRXNfjVXm+xLD2MDqz\nbZRHILXDlO4fiqbIsJxtVPOQKdx5WOvfORYR0Pnkzvj4RHCAatMpVoe1mP/b\nMa/LAnLuSx0H4R9RNAWKL7slYadQIcSn8G962ZkQt1HoCvX0Ak/7h7q/vP0Z\nnqbQgpYH4fsUuJ2mCcZQcKrpnLL7aewJUcsUtW4JO5RsgPgGAvRZ789IcrON\npXpSSKest316OdFpauQDg8YyzDjz+c5FfkHiZE1FIsTB4BDdcV6muqQnmI6K\nIk4NuAgk/RY2+mcU86Hpw+YF67Yn7r8dck9Mkren8/TzwvMgpy8RdmfERIws\naVRaT1s5PBTlWM6QcZ81R+9XpAA5LwlBDsibLab8Qeoll8TpGO8es3FEt9X2\nFBXm\r\n=zMkL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/GRqZcHZ43nfc2pJEkEDuc3DtkiqaU0B1qguRR2IuswIgMxj/FjAJ0UDuyhzw/VSwgd/dENhRyVMQBKW/CFsNXyI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190205100640_1549361288649_0.16140454813435534"},"_hasShrinkwrap":false},"0.1.0-master.20190205123237":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190205123237","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a160bc385552903d31c37623939d7ff079e0947d","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190205123237","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-42zYnciM4DzCCmyaZTaxx9I4xRGTUN4KZ50TkcqwNa96MEadvN2fkYG6GyegoqsT5+9iwHdSbDi6gvaQ3kazBA==","shasum":"0f80aa6a30a6f41c269a8fb33090d060a25ea1e1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190205123237.tgz","fileCount":70,"unpackedSize":642965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWYLDCRA9TVsSAnZWagAAMQEP/3w9AwYnhZdY4v6Mi6WV\nne2S1Qld6yiocBaqH4c2PvtmVlM4rQmWTEXOVTC6BMceFsgx0HskfDJsRC6I\nkNF8d+kbMk7CoxC1RX9wL2CxAi69srZlRJSBxnWClFc80se1xIpsNVx4M2ba\nLEcTdrCdoToshQBdwcP6UYQckVYgSFMYc/8nvYiZKkGx6ma+CfdEwuQToDDj\nOtKjPF/YqUbASbxmFzXeMJvKKPiYl9CYozp/eZCcNVptJo3aJXI7GDO4AyGn\nXkxsukxeAtLhAEIzmPQ3guGaBfzTkrTUxzCNdYz0vlcDaJpA1/1JJwDr6I3O\nkfofUaOzpGia4h+u//yJoN3Z9wXGACM2Yfl11UhkOjtdyT3QjobM52/hxbUp\ndaDlHyXvk6bMnaaMLiTN+tJbks5hZBVePb5JwBzLtke9H56sF5odpss4So7H\nPZEV/3dNg1wa95UudUo5MxM9eNyuU/sGe1Nn/NGETH6745dzZ5erFCkXV43/\ni4zwlZF8u8sMLoVER/OxhgWjM/47qPckYlP82ktNh+4p11FGUCezHRi4fe+m\nvMfaqU78kC1XW9fkDE7liy5vAQfI8U60iVG456PrEL0N1Nk6RyNpamlG0zDS\nqasBxUqrZbtkgCi6vK8Ef6Z89BoRuY5WzfzS3pWS1+Q5mAQflJAuozKyKgLm\n1gHH\r\n=DHx5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWH7Txea6gRG4LP7p0In3NZSmQlYDj4Ra4p83t+gZRWAiEA2IokNcgHQ4RKRsb3m/Hi0h/iJzSMcMyaPNzoEg8Ikw4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190205123237_1549370051238_0.20269966071108292"},"_hasShrinkwrap":false},"0.1.0-master.20190205190621":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190205190621","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8d9f60bdec016e2a85f805bf99a6e22a9a840958","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190205190621","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-dmTrDwwzWoKhDomONilBs3bLnHPZrthNPh9ajy9I5EZA56a3jit4ZlV0NWmP+EBCgrpbACiVHffIozQS+eTQ/g==","shasum":"90f9edaaf209779500af40c0ff3586114e600e1f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190205190621.tgz","fileCount":70,"unpackedSize":642993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWd8mCRA9TVsSAnZWagAAUCwP/0HK7lH+f/QXt4R3+sS6\nqhtzJrAXwxTIuVNgoSYaoi4sZOx43qnU19y/s1glWxcxMOEpuxotkLkf2nMx\n1XNMf7+irqDa5KXieqQxTpVAVn/oJ4NsGhw9HrEgBzPXxYPjXnFRYRTg/0LA\n+pTXsy5zO3S3OfUddzRTxnxyiyXoeWrU7B8LjyL1aLxih617od7UW268BBrz\npVaeV12Q9iwaybx6mtKeJY8EW7NmPhruZikNDFrIhcKPHT4zuUy8t0PRqf8i\n2Jcl70amgnoHek0zcpuCj34RxeUXJHj9NCp0DkwgqcHpTUvnrTmdBVsNEUw3\nR19RvSSXSVCPv5f/9KzRGwn5362N9WTN33uOEG7HPk0Y8PCuPUl113rpndOi\npLQZJOs0TtVj4+5bsJW+jhXwJPae1/VEuXfa4aomMIRa+YRuMNzq6Dj3QvV8\ny7SjIQHmOiQUjAUc37gp1R4uz7Gytuy2Gm3Oc6Yp+80y+Y6pk6aOrcsIhmbo\nU10WWuUYZ2n06Z7f3zmeRwyUiP3nwvnx4eesLrUmV0KIUH/k6dq/hREXac7P\npKVsZAkWXSIDfpArkJdTcxdPryd1k8clXvL5gernCQJeS02JCNZVc4PqwoG5\nfxlfczzW9PnHsbuzO225tBNRhUGYpCXed1mkmgsj8IRz6PglvKsSuY8hkG6B\nHaIs\r\n=3yap\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAwa+cjDWQQ6d3U+oVAiKWJo20H84nJvcx3yZ2FG+O3MAiEA7NryagCsm2pgzUzAYNNNLXMJZb+eE7O/7gy4hNQaiqQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190205190621_1549393701439_0.6339358432544155"},"_hasShrinkwrap":false},"0.1.0-master.20190206085551":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190206085551","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5fee3658d89d2118b2f56267bd5f24bc1d8b1b64","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190206085551","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-pOMlM0D164eg7DseAg/XmsYpnZAWvtEHKMJ31EMwpC/4sFxqEc1xrOjanNbZK9ukR+cLH7/cQ1rhs7YCQZGTHg==","shasum":"5ed29899e6e984b7f7676b4bcef2005cbdc60ead","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190206085551.tgz","fileCount":70,"unpackedSize":643355,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcWqF9CRA9TVsSAnZWagAAmQgP/3+Tf6URMM2ouWm5dgmI\n8uWyNKUln9yHk1AN/1IwgOLe3E08JY6Hc8rZRPPKr2Z018FHuc3GJJahrlxQ\nkWcJm/BjIttm5FjUQv1oP1vYHHNJRs+8FISnMTiBYtUYzq+mNe+uRfhpdyq1\nf50Tm3NOqr2yx1lJql3DHvXjsndsMlp/LPIzhksYqFBhP4xS8wTzHf56VolB\nAhTRpGYqYrUeM1WMtYKhrRaIK521rmMCpdUQYJLsmBisy+UK2vnD6i3Db1gq\nrkna28Jt0hYeRKcgMgjp/T+PN8VyNiWyHMY2kiJX5WakgXYjJKelwjVSGJtq\nsG7Oh0HtTiAD3iX+9edVc3rhV4aiaAwxRfx6UYRdjnkUp+yBHNaA1YGE3Q08\nrm814MKBKQGEh5DTCdF5oaO0EPzngRQ5ASMq334tofngVHJGN0/BC03EsKl5\nrEs738k28M9chGlJCK5zBg6lzmjhMTv//aVFm5F4pKU9g1CozUTVs0zJKxBa\n+9axI/yPXxSbTLfVb1feo9U42vjyUt9ELBrzazXfOponTM+6Z4jirpbD/CxT\nFymqcDj0stTN4an1RPSdlD+AFQdlOuVgdxRQ39b3tPyEN7DGP7tCkP1ubdUG\nkBfri5UsvO4uVNX+qoF7xCx+aDHoNZsf6rqySTxPyt/kMXkmBZYQVtptkcnm\nLG/5\r\n=gTuQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3l2As9AHwqASS8mv4iFLysrdFjRIY7UaVOWnrlRbQkAiB6zLvwzLmsV04feSCijQj8h6/i9CoSXpesqU+xmpiX/Q=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190206085551_1549443452024_0.23670895086234345"},"_hasShrinkwrap":false},"0.1.0-master.20190207014324":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190207014324","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"cdd770ab86102ef0e98e1694d69dbe13daa6c941","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190207014324","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-cbeHlQrPbxL4MOt43S69oH0NP/2vkAiIjmRP2GoxH768bF8naVo2nDYKPtF3reA4v4hwlJnYF8Ss2K5ipZLTTQ==","shasum":"10741281e575ea1bc6f42de23386d39da0b192a8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190207014324.tgz","fileCount":70,"unpackedSize":643354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcW42lCRA9TVsSAnZWagAAdhYP/RW6cQnb/yu6fLO7+LkU\n+nyIGtUC0UtqmmZp+pv3ie5ENnsp6zrMpTsPXjwGo1Fu+G1V7iE2NA8fjJjN\nNTAeZSzu3AkUqITBAR/B4ZboIasG7kuGWKmwE1LutIcl/7YNZzZTgbhI/bSW\nF/R7iRbDUJps+9x0CbpKP6VzbOEGyUHqUU3QrEyasQxVu6/qMoj3KDSJisBS\nVBLYNSiFXozJlQm4gc20XwddJbv6kJIXPy/ziYjFr58piy188k1DdtmH0F39\nHnnR92P3uqAdK2YMCUX96lYGMgEYgp8x6h3UVMqlvt66GTv+SO2cEzqY8p8G\nE5I1zdw0kV1/9Lq+DtecVGCYQKZXtrXrqfJsfXLGSdS8XPpjxOhsYw8t02/2\njAJKrfcc/r/rRos1XSWzGbJUKboAXjNwOe1DY680PzygogHf7899Yg9qZLVe\nrDIpmbvE0oOy8SrE/r7qAjTviBUVdotLp7ZUMb2xrbKRk60+WlNhm6CZSwJt\n7BZMRfoKPFM5QeF14pXxhqgt/u0qNcOCU5Xy9c/xz6RhJzbV143+KOTXPv/4\nquVZDSB33uWxRYFGTLjz/1QdrU/6ltcywhLBoO0HvlqFUHsLWt243CzVF3hW\nnjm/zY4w1/TI441+hJsq5uYMqccSt5MdiRDo4bpzkedeMgY/mZEbgu9tmfwM\nQfu1\r\n=WIxl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH8VdL7TTH0NZqc3pdxOvcNqQH/2+Nm8c7XFoyKDGgmOAiBm2NgtZHLz2MrTebDUxwUucH8JG6CV8aUOwBX1I6wMVA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190207014324_1549503907570_0.2961445356972898"},"_hasShrinkwrap":false},"0.1.0-master.20190207084127":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190207084127","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4353cfaceade1d668736fb7ba3633fb5c729ee8f","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190207084127","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-DYhz0UxX5RW0G1Ia9O+9fMxz9xrUe/nphB+Q+Nch1C+lNoMOXWVtIxx2vg2qXVMh/YEvRJpvZt3QeZUpSHabQw==","shasum":"653920415c57a038dfce4fa8c1327ee19914a8ba","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190207084127.tgz","fileCount":70,"unpackedSize":644480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcW++cCRA9TVsSAnZWagAAQpEP/jHZYhuZRs59AqrPEweS\n0xhPU1JUv7/b6CD0VeXOX7ZCgzndXaVYC9k+gijSYY7+ERHkgPh2knIwjqJQ\n8f7pBFeWFMwaBsUAIRObdrkVkMbBYoCEfLLyG8Uie9Ks4T/licf3qDlQzJHD\nENsxvkffQWJFAwF5UMTB0jN6Nct0gJS+WHzHzPJOC6gTK2S81R894ZbGTsQx\nyjgiM9cSq1dbYN4UxEHVUrbQmUztc+yQJuSTMPOVNFmCYN4D7PkYvYQhu7J3\nKErNcJZalmm13oJZssDtq0dfV5BISlk/tcDn+IYdJQJH9dO+m28rCwUvxmXL\nAhnZBqVwJCoNxSn1pH/N/V4PvtLidhTaTUzBckKPxmRwWcaWhC+YOjgg8p8g\ncJ6tzMfJPxFWCxg6A2B26PPnoW4FKqp7hMwSxmO/91WdKQQq1JUxVUbsdlQg\nxEqlWboYuP9J4cO6YGM4Eod4BbQmAGge1dj0ugCpG+LK4Nbg8LRwCltG2ZSX\nUURipso0Zqj4bJYrZxwtm7PrxyMyfI7KIq3wi7SPkygPJVwEsrm/yxfixrVZ\nXiCut4mY3TN+mYO+bRPU/vFCI2ri26zwWPOQ4r0EYNFfBWJerAbEpbB4CSX4\nuN98B/f9JX9gtOfNmAeTeTxlpyII4FvOG9JkbnzSEULld0vcH1n5saQA8TkA\n4TJT\r\n=IAWP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDg8S58zx65UZ5TAHe0v4x4ZojZN96s+LaMbdv2iwTksgIhAMzVgm0p/1SPdzUUa+sBB3y90VVVjcE155ObISqxnoAU"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190207084127_1549528988216_0.5440267303597051"},"_hasShrinkwrap":false},"0.1.0-master.20190207084511":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190207084511","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f6e5817cc2fa9a12e13a513f661568aa8de6c8e5","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190207084511","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-r7fxv8/evhebhjbzveYJd/b5wyaooiTt3MG6UWebewWYJyKauGwut1Wqo2mokibKBpLrKeQOliegbFgVyU9Oow==","shasum":"3e7b3de8ce8c77c0d89fa49fb60ef132124d0452","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190207084511.tgz","fileCount":70,"unpackedSize":644489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcW/B+CRA9TVsSAnZWagAAjFQP/iRhdqw45bRmAuJK3WPv\ntQQyhDBwamSdxcLYOVB0BM4KzyIarU4cs9zRGlVGjmp09iI5WRoN7V/DdEci\nG7De43DKqH/ns2HyRLxRdFADN6/mlCQ+v3kzhkoa6xLqLK1cAehw85Il2b+Y\ne9xuQ26O0jk3tXvD6dhyuB2SK4PU3CeiY+vumUdlZ9z2aCZPW8xWb2m/qs8s\nBvukmmyMZd1J/92Cwj8eFJV9KgRr1ol/YFelubMehoDYvToJOzDTb7TcaJVE\nuDxOAyxVShFVU/aphGd21vvw8oYktSjAZHgMql5dzQhEAL5lSER2K/J8QOYr\nvBfYFP353H2NakwgrOJ+d2qIurK/VHJBdhAg/aIinxz4xqQjEqg/h7L0B5iO\nT38iXBSaDhm7Q6Cod2YBKVH6RT7HZxCndC5zvkVIvGUApbN4dVebqyMEEJQh\nBjfybe1/ZKhAri9m6zPH/xWYnX94d3GQ0UugusWVsBLTzZeHiGRubbQE9PFM\n0shLgw9IXguELMPAJmaQK+7I7HdDzHvhSILs4TgcbtUCHZRj0o2uwc6+L8lX\nj/Y3U/KxoUrGEbi5VVCk7JTNNVItyzNzGWFW9SQIDNyjtCPjYFEqozkMVKFh\n/eVtLW5KuMI8Bfo2ZF9dZDJ+W3dYfiWxZcKpA+BdwKBlyrqFduqHDeGh9PUU\ngthQ\r\n=6NQT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNjltHbznlFg7eJo5b+VNZr1nKYXOo5kBCj0hlM0bMrAIgW/kUHoHhBCUzqN4NinfNPz8rsh53ZO5lNLEDglk/lNg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190207084511_1549529213838_0.5624699247662874"},"_hasShrinkwrap":false},"0.1.0-master.20190207190714":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190207190714","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\n*tba*\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9cbd44077704967ceb49598c5915884b1f5cc19a","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190207190714","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-xgbB6vAyA//bftYhB8KUjXv2JtiLZWc28xMFykJWJedCtPdvF7yoBZu34IGBCEArsHh7zJt4PI21HCH6EE8hNA==","shasum":"6191888eebe64a8b2b2a9cb4c718b3bf677cc423","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190207190714.tgz","fileCount":67,"unpackedSize":642713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXIJ9CRA9TVsSAnZWagAAhrwP/A3dEq9c0FE3fATV9i9k\n9/cVetTg6ybqI0gwwpzHNpldydkxFJhnzY5qjaAAINEMom6olG8W7dUljWtL\n4ZWxGLN1id6aIf30gwabR4f6bJJFbZcQY47vhMftkwqYJKMFKCqF/llAdVgJ\nv/1PA/D8YrGEMf4VtX9MunnBkobAN9f8f7sm0raan/CDxEG7dkOzXWtumhBk\nAbVuFYbDY6JE0MF71YbheHW7MNo5gw5W2maLGxzq1u3NWni4+KL9D3crqavS\nNQlOG4bdFhUei3moRV2UQZVcKozZLP6T+2g+t3cDkacGAFtcNnDv/4D2IkDQ\nKi9U3x1RkBCYGu7asxMIvu3FrkOUmKRRt4iYUwvXdjqJYJ9Qe+oAlSGOg8xj\nq5NciztWsAME0fP/QmJjdUHu0CGmgiOZP3JSG6RgV8+27n+d3LmMqQJBf+0Z\njbONYnEUP2Ygw8SD2ic97okfmvfjB5j/2SgFNxMnM2rUTDzjDVgCVEWf8oWe\n4SEeweawE8j0YloN+1kbA0tZAlOMaDAEat1DN8CAmo8QwVMx9ejmQxaj6Tsy\nOG24O+XVa1bj7L7RA46RxnDUcGZ2xS3n9y8GBbcXudYf/VzCAG8FUaujqAwV\nmiyoWC44wRYqUNtf3fcMVKhub3EJ7f/gUeIiG0cXxQ7cEg8+KafWKDPY0hob\n0VOf\r\n=Vz+W\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDsZqlpelpx00LXvTb5IjrHcMra7UpSPIfBjM8iDPu/KwIhAIskKjI/d1mTOy5U1RQRJ9adnSMgNFBKYIKFMhGzTOiU"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190207190714_1549566589127_0.5791826585218489"},"_hasShrinkwrap":false},"0.1.0-master.20190207200733":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190207200733","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f6c19d9938b28cddcf413f35534c03fa9afc4d46","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190207200733","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-YcmfIoYs4r/mrX+X1win/8kxdrD+3bbarO4mbPxPS4WWIJwXGIx22wtFqbmof7BgaViEBuwIIu0IREriwkqg0A==","shasum":"173bd7d781cba7d72aff159a81f5bc2a0c4e78f3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190207200733.tgz","fileCount":73,"unpackedSize":648503,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXJCLCRA9TVsSAnZWagAAy48P/RH+Cw7r5ncLZU6cLoI4\ndc4l2GWBhNK98bn/n7i4GkTiDVJLNCFtq604Zn//Qv3HYiEffq8AUZFUt4hn\n2l8rolNwoW5ebxqdOFAM3c21u6yubNW63dxrqlNVq9XLvT7hKaWRfAAFEACv\n9vh5yCDx8eAPFqZYfgDKf101/yFNd3dDbmrgMQUznT2gk9rB2Bdyujs+ox5D\n7RLuhSHhFJ5qx1sCtQGcO8XQJORMM4D9kKDJzqfLLNVY7NfQyFQP67h8ceXD\nnhg/YL7Dr3UmOUHO5xxxvt1hAn37OU1avFUQ1zCLySYZVynbf5XmWmbB10bs\nI3qMX14oF4KlziB4a+kUk2gClfK/y/iAC2wPeXvm0/h07jBqDSRtBj506p92\nMpp9zkxOhnS1xArI7XV2JEKhSpW3uXL0xkFsuxxzmiqLs/d5u2UiXwHGJoyS\nRAohUqCVIN7ZyswDYamefsuNDHjFC2Z5q7uoj9CpUXs5cGOWnfIS/xgoot2Z\n+G2O9MIB+o393ID9ELJA6eAvkfnhBsC6ZLHbb7GgpbjB2jRCs+ik7atlEuTk\naFnLChS+Gos9IfD/NB2MB2aw5JPBZPbGGpnSNNV3Iyy9XaNLhfVOpdOtNid6\nFa8tynYTruUKySym7nAUF7ClG03bTjaOi/YNkdUyQ7A7JJFQ49ij7b4VcDJ7\ngxQh\r\n=hreq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGyzjTtamuFcVH8NJE5ci1fJgMIfU89mHpI+st7ZDgHbAiABtH4YljqJWn73qmFnvhCLs6jHWPfYecxu2iFiGDljjQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190207200733_1549570186326_0.19853786314547017"},"_hasShrinkwrap":false},"0.1.0-master.20190207224912":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190207224912","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1add0b847c4b7e1f8346961b1823c1daecf1c0c2","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190207224912","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-WM3MtmirPNh+iHtJKjffXWEAEyWIC7XA86gl0mgK3EEoOGcyVK/rWCircS5VIlJbiC9yNX2n5gsrE0Vg7X+pPQ==","shasum":"bac3394f1264c3241d03713f493e58c314d68e29","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190207224912.tgz","fileCount":73,"unpackedSize":648529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXLZcCRA9TVsSAnZWagAAvxgP/je4qOo9AnyoooHS7YTD\nf6EFUq19V3k0CC2ehnRyxHSXJrLoDkbkxGg4+0zNWxnQaiNuEpMp2e66Gn/g\ndXH7VWVAlTK+b3ZTYM9W2zL13j+31x2lgXjETmw5iSXT3ja89lkcOtYpitsZ\nsVz8fm/UZHv84kEPV7GAdcIvBf5AdCB2WqbZQeHE9cWDe1I8Y3sWhR4g0kNH\n+CotDitb1ZzHyz01qYj6u2oZv6DNZ3pK8x49v4goVLiMj0FHb4YYmhsC02VA\nbsT3HK+PZVqYrOp4Liknq6usi0616nL2Bsh4MQIml83L1d2R1YQu6A60K8l2\n7qxtaaQ9GOerlM9oPKO6DX5YRElQF+alVgoGL/pQIUVAc8llblkxcfHWHAZ6\nuD43wlgyZcRE0hwng5BW9d4dd4brLzCA8Clw0wVBo36fPd+0/CE7IEj/7woa\n8u526LR72fvfWvgnTBO+TRyKeuA3CNuzb0OGAYex9xk9Bn8b6sMqrCdY33B0\nUodfGJQsLPu7UgUksexmDtSSIC57YGFjkFTsMTyiXPBouaClobanV/D18QtG\njy0b/ITgtpmHjuBNdj6XcBYoweXZw7haa4PcLJPoy5drno/N7GDMH9dsKrJV\nTEmvgdS1u/+1ucQ1Tl9IKN8ZAnDo2QW+WhdT3lIUs5xt5rNLIa6cwZt0ncYt\nLCPy\r\n=skZZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCf4kU7KDogRAyQOh84LwrKN6G/UbpxsmrrGN7ojVkP8QIhANixPZA2tFhuySdmw7UHueJL0oUAgmWYh+6LgfObHe2s"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190207224912_1549579868320_0.6656137190195328"},"_hasShrinkwrap":false},"0.1.0-master.20190207230901":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190207230901","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b30a184feced52719051b7d730d0c37c3312588b","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190207230901","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-ItQyOyaF0MpNqSsT/kGUB8I2/wtqR4a4BF0dldAqyQhgVilkk6n5XW4dG0DLuggfTLf14Fi2rpPhSaFjRTcW2g==","shasum":"87d100c7d2e43bff5216d9b9fe26b3c636128d93","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190207230901.tgz","fileCount":73,"unpackedSize":648615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXLsiCRA9TVsSAnZWagAA2d8P/1xapZOlXdCr+Q099w4H\nhMDiQg6qJyBW6QwGDjHg28hffVkM83tI8iFRHhDtVJ2mj7/ykrkqqQxTAqDG\nNwSc80Bcd4IZyeefJ3G+TrWjuuJYFhUx5JPTLjemmuRN/XJ7WZaNn+A64wK2\n69DosIhUDzwXtKWX13RJ9HvxAFRwbaXVh1/c6UfyOwL89L6AD5+gpQaUIFC/\nBvKmsWiR0uWBPcEMpOJ9tg2oYHWnc8vqfngaqvr5iEbKflBdwapY0zR5JPE4\n2T4qzTOMx2SCxUcN6G8+CV4na2IJDIB8eFMUjr7QOH+XfHGLqd2bMHbFCFuV\no3JyB1ik8R+4FsCKD7svWEDrVEPDZnFzdulGG3lVfdBB+dcvq5TAOVFRGPcx\n3bLk+P7afw4wbQnTeaS1GrnFFDoqR52PLL73BHS9/HEzscFGJU3pxH4/Bo0s\nUxftX7A9n7giTfzEJaGFSEmjsgyG4P4vC2Bo3tGetEq+xCopVDLA+acgNVu7\nUmeyTlu7NSxGNT2T18tlR9PwXiDuXgA09+uBBIg4D5wOJe3K37x2nK/kB6Y7\nU+l25j8ilGo01IvGccZBe4Pc9jaCRcBQDNmCrVQYEeCzN9ptZ48GTsRl0svv\nq76G91JH8cOQzPLZig/z/Qvsh9L8+FTDnGT+IwkrnchoVrcGw/6O3wlNWFnI\nR0/y\r\n=By0j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFKfFjULMH1h7fhxC1pan2GJwbr0/Cjv8gdN2Px4026wIgBnpXtoz2cBWzh9pZbDf7UV8/rpsi+pBSa7W12KRBH7k="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190207230901_1549581090082_0.9359723004625922"},"_hasShrinkwrap":false},"0.1.0-master.20190208085239":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190208085239","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"40b5706f5c526eef6332caa75f44229970414889","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190208085239","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-5uTMn3yt+tLzb3W7koI7y9Q9yygVefPAkxkDpjr22gc3Ksu7IZ2lK6BtsboiC2YYfNIuruK1re+6hCi2slAHsQ==","shasum":"b13755edf689aa6c3a2335cda0d92ccaea572fba","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190208085239.tgz","fileCount":73,"unpackedSize":650814,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXURgCRA9TVsSAnZWagAAh7EP+gKR5+SzI27qNK11zg3i\nI5Q1OIYmq6K2nrJA/i6nqpN0UI5FfVZW4DwMv4Bp+jzqTBsNB20MChmJJ/Mj\n3QLCitUjpy9Ltn4zkRqnhUOAV/Jf1d/L62dxy4xbVAqhZZANH5omkKY46mYl\ng+dmucSaGZt5fswiK00sbQIYt4BRe1vVkZ2ueLjDXdv97lsTkrg3NapBZNlH\nf/5NzpNWvfeEdgpWBiWmDluTKDcI9FZsvV9xn2uUnnJD2NnWrrRqlXeBbseu\nImOc0db3dZHMBanfAlaB7+tuZy46Nexv+b1w+0DhuX/HSubVUFmXWqnXrglN\nu2AtHRj8qTfe5mK2JdWhqyaiVYztmJ51viVDnxW+kq3nkKKxWtQnZD6QfRbs\nbZKolwHoMtepfbsOdHNK0d+nIHUkyMHv+XfHs1CMqiGBOSzN4F8VB97UqVRM\nWmIFd+lJPWpc4tSshDRmBpwUgxYfA013tDjxVmiwd7ZzmjVg6f7VjlnzeXQN\n+HiExTncg1nkcFeyhKjH0yCZ/5NlgE/bHUV5MPfjCFvKhPiplheiplKs3d1f\nC1ExfJUBBoetAJTXh1IOGauvyCKtHKWGoowLDoNGU4PCXXIkm47tbfbWrlFU\npSESBv0ltMSHdeVDPo4Q7WZNCbMUgSqONrgUlqzIElLxt6x7MGn/5eqT4Vwy\nxTkA\r\n=EvXI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHT5GLeZ1yIm3p9bOfALYjpJjZwj/W8qEltl8Jsxd8kXAiBFjCTnh2wYOxNUed+jgE7mXg5nlyEOQrOE9yjiNRmSww=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190208085239_1549616223866_0.02469183326021307"},"_hasShrinkwrap":false},"0.1.0-master.20190208102333":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190208102333","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1ff8aa2dcad4feb091898f8268386d604697d5da","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190208102333","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-LHf4txaIelLzrI8Zi55itnZTUowqy+2ZNfcZO9wmoeEfcwv0yssbBl1Xn0aNGFV4ofiZMfxB49H2oniDeE0zVQ==","shasum":"10134891075d4805cdbb5c5d020c76b23312a887","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190208102333.tgz","fileCount":73,"unpackedSize":650813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXVkVCRA9TVsSAnZWagAArVYP/ify32cjG0vKeHYKHyJh\nnxuXbho2fkLDRXzRuJ1Li9n6nnA+UjAhGMKXu2yau0lCPv7tFMDLW1tJAwli\ne9zh7kiscx4xT06oSMCEhXyAZuNX1GWzDcYtibAS3WVp26sqW+XKh2Z1L9vt\nos46Uuu29jrHDKjMUahcUfJSNWZ3gjnaFplfCvD3VjSaTrnkickAfRCuIcXw\nSqv9DFkEaqYUEQLS+foiJwA9L6o/OzG8hXNi87/Zq3zpQ4dxwwMEuo4zZl/1\nhrWO6LQjnW8nb/hEjXOFs5qupSivGTaZSyCm61rnJ9z6l/DnsOyQhYNxI5Zt\n0GNLQdaFR9OV2+yyciYw6fZGnV9uRvMO887A8i6s6Xhd4VlPApyum30qqJ8R\nGBjhh1ebJ9kxMeUcV8pTMt53zF4Iz7+2WlKgnIK+dPiqSWU1Y0qHClTjvRiE\nEb6DvkDXd4BbjYfVJ/YEsstGpcCb/p8rp5B4jZTYBe8MVX02krxJ3AM8+ALE\nSCrUk83l8Zgrkct+nLikTweesvQwPnvb/QRjVczHMktNl4mCwyN93QfLFIPr\nXJe/WMQMbvA7/VEhAdL5NI1EQL0Qj0buwOolFwRkyA2S0vwutcmBDCeMEVey\nkBh3sXhnix9PJexoaWajpvRbfSIuQzpF+7kGBPdksgYHKWbKzQDJG1YUS5vk\nEeg9\r\n=5LPj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCw1Q3g3M+ofhur2AhgMLsw/byoF+WHWuYQqQwRNYAUdgIgFdNM4Rl8HoxoJl7hEBTA7eBRQFRWe7r9alaNVXyls1s="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190208102333_1549621524968_0.39970631162923076"},"_hasShrinkwrap":false},"0.1.0-master.20190212070704":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190212070704","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a06c47cbcd9ddf7d0e498635b8b116873d1abb9b","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190212070704","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-r4SanX5Euw3K2pBepFsgdYU6q3Dn3YW2QPn5MqhngsW8QlNhkjIcPsvsj+tPecoDLEnJVDwpmd6P4KyE9TqJnw==","shasum":"d219f3ae059cb4241544e178850ba1fdbfecc8ca","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190212070704.tgz","fileCount":73,"unpackedSize":650930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYnEGCRA9TVsSAnZWagAAeusP/0PhRwQP5sOUZWmcx2sA\nlZH3Qt6CzBWZv03wwv8o5cdxwJ5Z8i3qi1bsUotiELOr86waf0ACxLErGKLj\neg+Di2Zp3O4G29l3INf6vmiJDmXAbSg7DsEuQ2ObUFAg7H53YbazSzDoG7bT\neoNIFM9JP5Z6VaNIW1xpq/WWmZ/c7vhTX7BVWiSwSpr2QTys386KodcoEagm\nczPwUc3XUegeb9Ml/XT83+GYTXYEotyL8k4EMTpfTo+8+CL2WlkTDLHtYByQ\n2YqEKwqpW0Qp2N/rYN6/6oX59U3umejUM/T+5uM6V2m5jcJghmvQQr/nyRpO\nOMztkBBbiKvDlU3bc3C1ItsxCqWIKgwVpGdS6r976k021Fk0Qj3lIsKJIuUR\nvAXQ5oQVM6h/M40Vvt5NKoZQnzgzgNk1DjFLLVfEcZMmmpJ8mz6Zr+ofBEcJ\nu9ZdhrJ8Jo5IViKa4XFMLf1cdfU6VT30rP5Ksq/7gA5DxJK3/Sbg+lH3zPTG\nl6qKDKD/R8tV0YpxPgMCsNP9E7baEeKINSUndkrVSm1UB2J+KWPoM4eFT113\nohcGzcjWeFvHFmgzUNoF6uY2bc+BeDLZlLICBU/H3hoY9WaL0irWvFlo0/HF\n9p7OZ8OaAe2eNLHHaXoPuIsCyzl0/kzOh/cHLJ1MJZIYqWS4epXVr0ZZB7MI\nVYJM\r\n=yvX4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4piy0TIcRyjtvnpUxkm8qK/JEdSWCBV10hHosLoC58QIgUw7H1qO0/dOLy9xojJkj+3QGdQnix8itH06OFfvfi3Y="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190212070704_1549955333894_0.19848101393885997"},"_hasShrinkwrap":false},"0.1.0-master.20190212075004":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190212075004","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c538d2b5763ede49bca054bceb7e9fe15152b721","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190212075004","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-SKfvcJlWX7NbpSZ8odsZJhO9+zbwl6RdBUL1Ljp/kCEoTzHIG7DYMXOUA2kvq7J3/YwbNZf4U0vqgvaocGKVSA==","shasum":"a74ae49822f14394c824ead6af8c555c1085f254","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190212075004.tgz","fileCount":73,"unpackedSize":652602,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYntuCRA9TVsSAnZWagAAqiEP/RtB1R0ghjDdOxEk7YXv\nx1MTmC4o1mYJo4BOi2t1EOxZiCQBp8CEvV433chXvUUggr2pVFJWj63cRstK\n8VOa3nUq0I7wBOO9PjrgUkvFBPfgkZu2wSLOFGmrMlvf5X59bFWuVF6yYKCY\nGymoLCuU7GI0JKOW9T9XTiN+Mwueo2gtdWPG0DOuTQ8EVqgsGBbev3NoLMLG\nnapOYY8hKvjvA2/weadYSn0yMSGeaNpV7MTTsrH+2GGjsdW/PZnVw6q4IkK4\nU/BwAQwjTjv7ZaSZlwdjHnw/bEfHjJ/QFNxLhvQjuKDxbGZlTBUUKObjaNFO\nta5iK43OoJx4ilwd6hmBJzq+qNGHmV1FKO71fcx2cIF9wk8ha9h8XuY0uJzd\nWvH2Wbu3pPbiSCIRX3tsrhFW6XwRgkaKPb++1cdt9qkSZuGTPgqJuktp5ONz\n31WmWqqNeQs59SXg6ujYjBVAulvthTgFIaWbqQBQWWB8Z1oYypfdXep0Jvx+\nzPpMsyJRch9lIIuUgB+++Nc1lnfQKyWDixz5X8cO2Bw81di0kdc1J/72zxNc\nZIJ26b9GTGin4R+YOyjhor6nWpOgpHzpRBT9Zkr3UxihMw/Fop5pbUDQe+/9\nVA4NhtClmQ5/2ITQWRvTXy1+KDZ4oicklArztcQSY6o4WTkLBj0+sYI3UP+p\n361P\r\n=ylIb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDh53ouo1Wb+Ofdz1Z9M3oQ4KfIKQGikLqu6w1vAr1ZLAiANA+/abEW0u04wZFkf4kXCqTPzvjZu31mh1nHLCgW8ZQ=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190212075004_1549957997847_0.10956937292844682"},"_hasShrinkwrap":false},"0.1.0-master.20190213021934":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190213021934","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3f69d2e4f72e025e87e83e2d544e6227bfca2496","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190213021934","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-n0gDtOHR0u0UDO4RSEN5iwWZvdycSkDxGRhacA84rHu/BDLzwehWLla6Q9kIalU445GKTuzk85a1kMvubhvBCg==","shasum":"eff31ab3c6cd8da7768eb3f71dd7192ed06886b1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190213021934.tgz","fileCount":73,"unpackedSize":652788,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcY38uCRA9TVsSAnZWagAA8KoP+wd0z7x8YiGCkqWhCAIY\nJD5Gb3JGdgIKbMs5Wij5TDQthJE6kFtbjIIYwRe7lischgmqWN1a25xViEnw\n6O/GmNgL4aqLpSRGEx18owVpUsu7zmTnr9o23XhZu3uz/26vTvS9BDIx5pI8\nUDxG+qc5SjwiCnyGYVeUuTYD4Ul6YfXfW732fi7jIK9SW6LHPRC0nNIn9Yie\n3uMaS37XrQ+pOIl2j8HyYkCYoeTe57BvFi1xzWWZkjm6wXe5SgTnFOAVJEFe\ntSKqaX1D9DlR9hTP8Qh7hWyf8p6o3cgDAJZWOO1vaFgXboHBX7/CA9+8NKRR\nibzc81iXtHMBVg8XaEGSYhevIH4+94Xf5ibO9cxIM8TnrZ61FzrMpfqwhqXJ\n3TwnCckat3zaIKZqdF2dVHSDnOQJqmnRIiUjcHsmDdbqHY7+8vrwn6W09Y2L\n5ZpgcZoUE+EvUVSxrbM/kxkytPBS6/3fhMeFbIljMdpNu0OhDfAKC9Nn6lw7\n3IHAJA6tOUec/lUu7chhfpj+N6OS13hTcB5ad/Xk9ryawQgn1VJoZKkHJ7jx\nsXD1lCdAy9R1sTVrl1wcOXCg16kuhdZHA3UgOT2bjlDYosUvV0B8I9qvtbiJ\ng9S5eobpET38s8HsmtUyougVofL87Yy39EpEfQS5D4fe1Z5qTj7ypus2+yyg\nzd2e\r\n=NvC+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBqpfm+5gUgJwint0x3h+xgZEAwlj8LoFi7eZMAAGt6XAiEAiP8ZEPAZ2YGOvw2SeZW9upXz/G2+riMXL9i3H5yqh0A="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190213021934_1550024494169_0.09033894302201384"},"_hasShrinkwrap":false},"0.1.0-master.20190213031218":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190213031218","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0b7cb369d2fcb718bb2be32e1b80fc4b9a19b9d1","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190213031218","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-wqss9a68+R0AQpUfxzQ3lTZWipXgR8mEc5dO74dbimGW/ivmS2B9O8MFSCPMhldvA1Mq20INrPHw29ktudqV2g==","shasum":"425dbe6e4e96f2747a5ed2341dd5dc84b6521ffe","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190213031218.tgz","fileCount":73,"unpackedSize":652159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcY4uBCRA9TVsSAnZWagAAVEkP/0vM5G5NVCgJcQOHgvAx\naCxbdqxeD59OSKv8saLKObeHontGQFOKeouDtGX1cnMnJFfMMqbm61xrgLlX\nzMfLDdR/ebRinzKRle8wYupLqWtxka4zzVxJgmKOaKCebf0sDhUfHKOAzvjG\n6ux0p6J+rQNkQJCMk3fOfA5QRRmg9Qh6YIAwHm5JDGotF40DSEtMkh3v6h/k\nYxV2TK17wfl9jv9HGlROmnEbEqEQPoJ+/N/qjo0n6i16FK1YZ0/wIIcBpkJh\nEwPtqC2nbk2pSoz+qFprSEGNtPgwalo2RQWTmtWROR7s/52VL7W6TKtMD/Dm\nBn9PQ5n678AyJ1x6lHXhwBJMHhi28US0fiidmsosWWGBzvB+sHFXFGMO1fSR\n+WBWZdJSlQBgwpGGBeQnzgaiWoS7mw3Kw87dU7FohgXZ66iRRfBTN3niRGQi\nYZMfQA66ktrUL59Y9joEqOukLsgTYUu2EN1OIyCMpnM0kCpCesKiiI+Vm+sN\nj00Gk4dIHFqrQz5Sd/kR9L0pL4RiXxhCZRovluImy5U40jmNYAs8Z+iDo7dF\nrBDvcixqvq9qXNt02H5bGp1CMQFx5z0yoSnS9GOTcGz3rhP7D/NO1rK6j9bS\nJyiCHGPqrRlNPYSx1OF/Sk1hXJoyhXrdb6e9i5TmQKk852JbVPyVmmI4Yq1M\n9sOD\r\n=lBfd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDS8TqiQZLZ1y/ttOXE2qxfbPrguioCKJbehjymBNtUCQIgcu8oODNiLgnriN9Q7AmQ9tB32wohCi6a/y7LvRZnrUo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190213031218_1550027648980_0.4079206727359619"},"_hasShrinkwrap":false},"0.1.0-master.20190213034037":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190213034037","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"68204fb32d17f142bcbb2dd33d51111ff85b6c77","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190213034037","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-AqPbRK7UZAfPbKoANl0bknZxtVEasNWH5g4IZtLSWFaDKTf0WPIJlw8VeceudT6TUb/X7xLLhUqYw5G6lx4cwQ==","shasum":"56294a4c5211bd9147a4c4212f4da4b8dcfbaea0","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190213034037.tgz","fileCount":73,"unpackedSize":652128,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcY5ItCRA9TVsSAnZWagAAAykP/1RvlO0cr9u0VM6fx3A9\n+6zsdujyRX/rTsJDXbx+uQhLToaSEK5ukIDZX+qzZj7Thm+bX/xvwIS73nCF\neaMakKxuxKTIhaIjcPORgdojjkltZkgOmdvO4g8EiE/ZFhWabMPUZSPaNjbb\nX1iGwDOZ5TOmcxm6+UT2j5T4ef5UNAbrScJJOTy4RqWZKKATjI1sfsrtDgjD\nN4z7Qmk11Ac38uITW3+v1GEPfz7DJuD4eB3gJ/F2NghPvqpDsyAz+b6Rh9EL\npOU3xUk89muNjFtGAqkzM27fBnPFtkmK+jrDxkCJpUmIY5Yds/vjvw5QY9k8\nmHUKH5pZTPPttYBiSWcmIR94T1WEHznv3NB2Mmgf/kUIQDLGVcGwxPh8VKw2\nu5ej5spcJ+paPtcz0VcnXMhU8tAuOiRzFOBdxZMAI54fm70/YUiPvVkKVFuO\nNaNAgRIumtVlqquQzzwRpsZSs39klLZ2pVUZCw+XiiOW9h0QHobUWbFjfHXX\n1UKTqpqf5xcYadfon2HOKQENpc3+A8ULHOiCDqcsiaJ5u1/4v1ca54Mn3IWx\nmN/1QOwaBhKKaVREvoCbiCBWTgXV9gJj9OzNbBANamZQ6yB0RgUiz2sihUyV\nbQandiXw1AP9xvmmG9poKCb/LXGk6EXGUUqm9rmhJiUK1B+Nk/aF9z+7jjIj\n4Y0y\r\n=xk0Z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTWVR/VEzl6JURf2lGAhOMP0/qGKmX9vH1TulNhGkdVAIhAJqOmbNUd9SBAU3Yln0ui2rwQ/sDCBF+6VL3Mg49N++o"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190213034037_1550029357109_0.3048909721698396"},"_hasShrinkwrap":false},"0.1.0-master.20190213071419":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190213071419","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4af5e88414310abf85c56806449e278b39bd3beb","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190213071419","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-s95pG5+BMNxtavGkGTrjwyfGel3I/ok+HeHnWdDkqH+2eIzPt9jNmLX3JvuhoPjARcJSR8MJOb7RV8Tc2OgWNw==","shasum":"bd8f732c02de3bd434cc3063e9644449201984bd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190213071419.tgz","fileCount":73,"unpackedSize":653244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcY8QtCRA9TVsSAnZWagAAcFoP/AlLFdu2uIUL9LfCShu7\nyuR5Y7DXR1PnkQ5yYtJ9Rz8g+hyU5Cm4sPdOxVQMTXuZsED39RMjlWM2CfYh\n5B6Hp6/smYrM/EP0YOtvJGUk5TmWMtnSRTZTuDJ1Zv5T31d4T4nbM1661ydw\nnhqQ5NGFGG/m+ppgRRx+FP4i9kELwSn8bwIPI+B1cwQ1C+fEav1mxR8iQpzD\n7sm7ZEDaxsAaftRNINNVPJ/4fCGOlfNLd8ZH8PtJuIiizq3D9xDaBWd9XUJE\n/ABdv99BEqM4575IlFPXAWwHA9uFYtQ0BRLxxtkZgyiv3XVKJ0DMb1O/TI0E\nTo6yPiXi3RvpqDgFcik7aoYqllkT8WSlkwBaSap4LWu9lBamH5zfqRUIV2sw\ntbBgTr6PyXpfvUMCMUPodiOctvzKuFNUq9MfmokLPRcX36Of8S5jy4WZvLDL\nwPRPnZP7kmUVvbfzIFSOvmVeI6ZU3AM4DbbQhLxV/BGPWyNwSe6fuiLFVd8s\nuhCJUCUIZABN3+fhdghAHvQWaKy8YJQHfpFeNiU55OrG3VlAGjqcbFfjP9wF\nHGRMAf+8BvsAHN3SApsDYN+Na6BxduGiwLT3YitEIH7ncyx8voSDeoTaHCig\nQLwq0TZJbYsKfrb5B/391fvmev+kyuTRR0GbbJySwgEW10sLUllnuAyvg1E3\nCz/1\r\n=VWot\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICjS3vbW8UBWbiPeePdM6+e/c6KIVqSriBF92BLzSxmHAiEA4lRbIgPDwZwNcY4nx8Sgs+yU6MkvExu8gWF43FJUWMo="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190213071419_1550042156761_0.8808249726339112"},"_hasShrinkwrap":false},"0.1.0-master.20190228033035":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190228033035","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a7fea06977de10d6d6b330f16a8caec0c049021f","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190228033035","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-04C90Cz83Q+o/daZ8gem4cC5ubmi9h0TXVZ+sYbkRBJwCsK/IaxPzz2hDczlP9Pvc45wTASEm+hjUXr/GqWbGQ==","shasum":"4ff5492bb94b3f00a46ad5f7de076af79b3bd55e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190228033035.tgz","fileCount":73,"unpackedSize":654395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcd1ZgCRA9TVsSAnZWagAAjvAP/1Rgiu3kdeYqLefC9P6w\nxl9tjNLGZyi1tJi3fVWXk+7SbkRPeaUPsrCi6G6GTYv6GSsUqVEamnkzHfwz\n23DOeYaKjAt6NUet2sMqX0pvhyngN0FdvzlmlXKtQZX85gGBkt5ba2AntvpK\nUJ7hi8mCTlltwpycgLxpFQ793nT+YqUXATzdG5X0lPy124U20DvnmJmlQ2Gi\nG6GdYY6b2kDhE67qqwh0KQwcnO417hTdbOdQWDWVBpPrELh4FVbY7NCie/Do\njDftScOnPGOHUGg5GaCk7isuyllScDKmakkc7W6k8fB7gI8DGROJIU9xwi7g\nZmXZEQ/AECiHyqMN6mtdayxv8XDznqrhD/oE4zBnDMzFfoJjOzGp9LcS8Ixk\nribh/fGxxxKviU9gIc3GowqbyslfJGbgeOBkvfo5zpGhvd4OeE0FsUlEc2Vy\nvFwMcHhMgSQVrXScVfqj4F8C44Bct+w3A8hxVT+iAGWVwlpKNJ5YgRjz2cKI\nB3YieVGDblrpryCQkdM1mhPaXMoVDXV3cXQTo4dFvm5ymwIu+AwXxpVvEQxC\ntQfiQnM4OcRmi+XVKWExxjTQlpo0nDbKaK9W6y6MTaRyNCnNLsVBvVuyQWSi\nb199b3lBwQ79gZbnx/mcgeSFBDrKRyBzKyZFBaBt3h4ryLKSuGhqKl120uqv\nSkRw\r\n=Mfzs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNfNPsbM1Br+NNZI1a972rP6Z7O48LZaFQ9pOvuv77AQIhAJHpTfhzuwJUWCb5iQa0co8pW7ipjKeVbqAW+ocDdweX"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190228033035_1551324767989_0.43624569234567145"},"_hasShrinkwrap":false},"0.1.0-master.20190303102547":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190303102547","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"634bea6d27f6d2a6264d60f2dd2278bce8efac67","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190303102547","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-nhOh4tXUUt0jWJAQAaHalzGXrWTQq30au5fRbu25LQhF4/Px64JRszIWJQEfZVFzYvuFvGFkWbKdSiYokTEY8w==","shasum":"a3a1d1f2de2ea6690eb77e0958247afa8c2e8bf1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190303102547.tgz","fileCount":73,"unpackedSize":655739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJce6xOCRA9TVsSAnZWagAAHIwP/iIKfVpcwysqMN4gT6Nn\nhK8WuW2RNVz/H02dScWTbDgDOTdWti4f0s/C2JNs76Lr0MD8MxZElqdtqd3R\nKcfh8/Vod+CgK0NIyue8fHIaiVJOQ541deb7UZ540chZzpqnuTMXjQrOxtg9\nip0biLpOnNOR7vAHPm2KmDfDM0DtavA1rTL3lZPRAKz5f4YfBy7lbUXAzLSU\nMhBUQ7iPoD5bgz88hm1ev90JGXkD+LQ4eq14slBOJNSf2nRfgsLanG5Gc0PU\nyEXv+T0fYQ6TYiP+LR+0or9lsGozZIre7fRZDsLwVw8ijoo/Pei71jHLAfA9\n/jRSKzbdNmSUQlqevBay9jMRyvSaV7q0VJpRsu+0G4orSWh8j2wCsCZ9+Ios\nQn1bilQaQqMyZK9hRV2hvgg+Nc9pq3/if65rw4ztZ2feL6i1vZZS8knU4wi3\nRca6+2dulEqgMVOYM8GzfbYv9VOKrcqPcoc7uP5vGag9xI0S2PzkIaIgHbwz\nsRS34cE3vSKbFpWOxm7yF3KuW5hdgmAsjbyx89FV+jHXgXKRZwyJG8fP0CaD\n+nuJJ+PMdEd9cgSQSxJuJBqYuQA3aQ5ZHRIwRYyeaYR0mQQ26R69B5F+fXXt\np6sC6rDkxwop6hoCp9Gz0JaZWrjAlSdRqkqrkdHWmn6UwYjlmMw+VugQaYug\nvUmi\r\n=2Spt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICWWWAp3nm9BF4itJ4BWs5CfxyLp8nNAcXeVfIuDNyqxAiA0MpWNTRw7vuinGy3rwSwXE/le18/khBxR6hKKjq6o7w=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190303102547_1551608909937_0.9636311739245982"},"_hasShrinkwrap":false},"0.1.0-master.20190303112340":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190303112340","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c2e5834c67442b0abe6bbc2e3f754da258e6ff06","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190303112340","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-HP16S7c4qn6Gzib83bz67DIpbO63CIwZEn5J96jlYt2xeYvdwOu+oO3CY8/e+yE0XeUIB42V0CwHKMOVM5SKOQ==","shasum":"fbb162922dc3bb8feaee75f017f6c00baec54adb","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190303112340.tgz","fileCount":73,"unpackedSize":655828,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJce7naCRA9TVsSAnZWagAANtUP/1cyF62PuMRYot2bs7HI\nSwUlX0PR6+N3jNnpQtPaDjG0WENFNInDONc3VLd+qhROhnYB+G23GsjyU+Nj\nf059kVsx1Trs+A6OapCeascg5gE2QyFokgVKLii7gRBn0cZq214WS6lSWvit\na4KdC5KamKvvIHtTmeka/A5Fygm+SYxBWGVIPqf2CRFQ6cg5qhUe7w6UGz0F\n3CeRsMlVQmc5EDyBizFkxZfm9v4DHGkGdTF/FNE7JrsEJVn+2hApFx9fXUzr\nT/0K9FgrSD3uDYL/XRy/UrmkcVZXcY+qpRWJsl8BD1uPSLXeI6bp6Cj6lwSo\nFzL+2TDjGDlxXnaw2za7rzXjnNNJ+u2KJCfc9K777GWbk6uAwZ2hNcjHg15E\nKHBowsy6ZqIR0FHr23C5Y/2WhSPGXrH0MBum3SETIdtjGxWkrG7NK47g/z0M\nyZhxHyWuXSSoyDRUJOOEDkdl9DctihAdz8fMHGmiBYHYQUKA06meE0EeM+T8\n+4hh9JWJjXaPfnJOPH5LnvGU+LnUAzNVwGdLnTja0zjX+l/68LBCRw2Pn/lU\n0JvDzr1eMDSwOmbk7f+h8XeY69KrT02qlAG0TaXNWSKmic2rDeMJ9YGod/SH\n41nLI3GgRzCbfbn3tHNHdtsTLRSiRoUMLDndxtziw/m2JceARaNhd4zTCyl/\nSvSB\r\n=aHLR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHom72LaEdj6GX0yuNTxyAKilGf1FU501TVmM5quRL6GAiB5BPiGOnKn5bUybPuKbWFQMtPiAN7Gr81jNvPumf673A=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190303112340_1551612377449_0.5021849202336024"},"_hasShrinkwrap":false},"0.1.0-master.20190307072613":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190307072613","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e3c216c69347f3d97685d3ce9548b5faba9d5b64","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190307072613","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-ii7EqUIfU7oF8CIkBYZzZTtF8B5L6RrAQJfRU1+07HHvJ2NNnjNLKaX+p5PWDQ87JRP14BD6YAbL1jf0SwNTDg==","shasum":"2d8e6eef76b7455b4310a8b1db6e26fc1be80c5c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190307072613.tgz","fileCount":73,"unpackedSize":655892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgMgPCRA9TVsSAnZWagAAM/YP/jllR0zcvP+l8hjquiQU\nU+LGbhfxWug3SXnYiJQ/JLFhH0gDJxcUvpRvKkt8niojrKym5TR/YSESaiwN\niCPSvvTw1xRA8G6FdZucocU9/K5j9EG97pIvrl7QHma3PLYaU7VxU4KECYxo\nZ7VVVrGxm4r2UaqHZ9GQdvuDQhBfzyGxDerFNr8DIhGHFT+7w+vT2f8svUrs\n6GjkCJ01WmdJm3iErG1QBSb8ddoOFcX3sjhXhDcPxvWr7BkH61ncLce7y4mt\nLydF4Zm5viRK6uyNUq23Bep5R6Kq9z+62hbC8uJ0uYgu+IPzG7BS6dC0I7Rj\n0iaGiwJhkWSXYLwcRq8IRvZP1u4h/+0UEzlSUa6oZjkr7eCsEWm+NJU7UvZy\nej05NjrjUbNrXDxV0W4C09qCVqp0BUv9rpAM5WsNJ0IzXkuaeIklqOIN9NFl\niHIz/2VKkDOS8XYSF6DbXW4z6e5KVCgNuGdbYj89rm5dBrlaXMxIC26Docad\nwEcnsgEI2nIGn0IOqW7AUIQUp1tbQ+XDg+6oV8YR4AkvuNq9uhvWvfttbh93\nS4h1QpFSapy6kCY8t2gJrHXAv2AUB01Y5FWwXmzuHYjoRoAhCdKzKxg+tdEJ\nhlPfC5YSnYT16gvf2jU9oU6+nug33CGBLfr+u/xe4DcqbH/KoPyIxo/Vcb00\nNz6/\r\n=rxBC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBZT7yS6dnbRUY3JqmnRXNSEK0LDtC3Os1E0r4Bl2xo0AiEA1HkMC6Jg0DXYi68e7yKQMrcGqONLVp2ZgGcBqFHMBYA="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190307072613_1551943695108_0.4199340693071083"},"_hasShrinkwrap":false},"0.1.0-phase-listener.20190307074932":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-phase-listener.20190307074932","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8a45eb7adbc5336dae93e34c211c57065d171eca","_id":"@atomist/sdm-pack-analysis@0.1.0-phase-listener.20190307074932","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-QfEyErRmrgzKDT60EZOe1qkD6+hNRz6F4PXWXr7ZV3k3sfdlBR7KVu8nZxYTthi3PPrINg9QVIdt7QBj3BBorw==","shasum":"c6cd5b4cedeb1cd6ee0866ec0f71b00ca32daf0b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-phase-listener.20190307074932.tgz","fileCount":73,"unpackedSize":657132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgM2HCRA9TVsSAnZWagAA4S4P/3nVXD/J6HSKZrg0YT7S\n0ht9+rvYwodHqszmB9wXKb/8LvFbkjnmiu0lkAvNwSRm32M6fZQgohf4Sc3a\np7qEHYm/fRoc3Pz5jJ0ZPPG7oxVfMjuYdeJZvSzAyWZOndW3E12fo9hPGerx\ntxAtL7h7DWMeHRxBQzEIyz/anWCE2v2Ymo3/DF4SiGLIKKpwl+t8PRvRT37u\nAoVVnwVBNgEeo3Vu0iVAWp6BOJTQkBVOl9hl+jrlU0tB/a6eFIS27lEH4xKS\n2bafIwTFCjlVdXAXtUVRjs+JIT3lGl3/2OC9RuN8VKHI/cq4lP1Tftj7ltIV\nUanzN7D+1fzwJXml9U+abvtadf50t3ZA7TaqccPj8CZjur+KqIK8CAprCPYW\n72lGe2NE39u9bMTPthDf1hJEE56vakCRR+k+RBHe4HiWo9UodZYOEYUd+bnJ\nGwOPm6kzR8dS8i+1mO4xfxEv1kSjY3YVOj4UU3H6QOuVtRMG2VAM7z7yuyDc\nrrmqxNTf7hKlEA+JKD7qd4HMM9Cc035XjC8MLRad/t7vo+C0eGIvZuRE3kZ9\nyw21b1172bAcNrB1dO6IqGH3dg/BiYJe8QN95I0o4L9bBS8qAkljFIeLa92i\no/ISKWQ8KDSvIL8zb+8i8jfsDDkvY42AhjUXsq4Zz4QT2khW+SXVAhyK8HyJ\nlIFX\r\n=fH4q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDIxfMMZOtUGxjDrjR7Mx+BuTIvP6QAKzf/nc4qoj2E+AiANZ+qt7uHSlfd4xLZdNhRbWLYIlrCFBqfj1yGwWN3lLA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-phase-listener.20190307074932_1551945094715_0.7456493682636511"},"_hasShrinkwrap":false},"0.1.0-master.20190308084751":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190308084751","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"aa10aef02f2bb857c3377e7b1404dde476273530","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190308084751","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-OlaUgcScVpm8NJ3h6HzYz//b2saSUqXTYYM00ZxgjtkHgHhEdasjnR78FvNEoxEbsUADfX8JHdufl2mTEkj2Yg==","shasum":"39b245849814abcf310e213fff811c095886b0c3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190308084751.tgz","fileCount":73,"unpackedSize":657221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgiy2CRA9TVsSAnZWagAA3E4QAI99sP6u/dYBHDOAksmc\nDlN0LkBj248fDl1brkT3cqkjsvva9ePng1yvwYoUWtgbWqjSjwCE2dmXHbp8\nSu9288kh+BlZEc/cr2BuPMmQnuTg3nUsAE9NMr53gx4a9CFyfkSPCWqHfyYE\njyliTYUlTziE9gD+P7vHc7bhNt9prD4h8+jFJba53R3C5mVW4eGhkzxF3nWw\nLs04KcwsTUvQbzhGq1pn53zLoYWRfOsB4Asd7heeyGUX1L4isdCa18D9VXkq\nLyasbTiP5zto6cRBYrEvDp9BcVG9aZL7qaMDGo7F1/Zf2w+4F+xCIS0+aJ4T\nqlX1Wa/0rjFHGABTLaYDnZvuzmteh4tWsTV6zzq0HaXkFXGG0STVgYedIzj+\nlPQu+XevC052hz5JKFOKoLpIEWbttc+5K3LI620/0Lm4g5vfIHM63p9HWrUf\nXVh+aQ2dTMcHe98KTOTUx+Z0KtV9Y/AVFpnHnHjjJ3rkndd+lxshxzdctE59\nGdIxA2cLV//moIyHX6DOs/slL+kEO6AxfPU0iCrvQ2YnnaBLHg2C2W7DwXFi\nfIdWvPRxoyIhTIL18FGveuT5IiFgkjL3HnxcQ+zGPLjarsWut7o1ZYVHwT7V\nWfpV9HFVXxX5RRL7fcKJKL5ZApszLLQzsuQ32mpcxGT42Ef9nAfcl5cAycof\nbuUM\r\n=XKkW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9hM6LPXWU5bAjKaclFqaTDrt6RQquPQn7bOGZiA9kWgIgRmYEXI0EBxcz87faNaoOVcvFSMOqabAsSPCHH9zOWGw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190308084751_1552034997207_0.5019072904786179"},"_hasShrinkwrap":false},"0.1.0-atomist-update-latest-20190320191205.20190320191334":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-atomist-update-latest-20190320191205.20190320191334","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f1b68b8a46ad5a66ad3f28f16db8ba5a6b9a58ce","_id":"@atomist/sdm-pack-analysis@0.1.0-atomist-update-latest-20190320191205.20190320191334","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-X0KNVYQTucZnferR1syMamvysh8fL1jujBn4Sg/96bvv+i9C9zQHvXk5CigH5sDFcrnIDYRuxMOQVcMMWaShgA==","shasum":"ac3be6c95f7a76abd8cc4618c56b672342873a58","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-atomist-update-latest-20190320191205.20190320191334.tgz","fileCount":70,"unpackedSize":271835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckpFDCRA9TVsSAnZWagAAy9MP/RmLZ/GPHb2nMxKl+nuR\nRT20eWXAT0y0QQVEAaCh4XWNDNkxvP2qeFUxbrpqpOQt2cWlEiy9FvijZztD\noaP3srzGNSr4okpfYICypJlD4L6mUfJK8CYaK8dlmobXN62FkCbRUb8q6cNo\nLDjwq/jqtWduVNxuZDEudAD8pjRqxH6rNst3lrhpCCjKAVMHDegbzgU6mMZP\nIwtdp911QT0+Ru0T7xpIF4KNHlhswF9EmOIgUjpuTHhNVlgbFqNWuoDzC1X1\nVONWs3usf8GLeAob6AmrGlxS6JpiDxotSPuTnyinlCDqdh5dkmwv4A64UuaV\nI+SYtazeEQymu0ja299pNwwKGDIvp3TAQbIcciB+9RHIAUFVZBxuHxCr7eyv\ndqZBJ1ruRV4SJ7YLhPdg5rdxvHk1WqcqwE54QZPLFixsu2CDqVvCJ21kgw8l\niRUexWs0hhCzkFHWUVlwhPxh15iQ2LYSsOz10yKnMNKPeA3vssUVU7UHu4Tg\nWrVyzj+OjsvB8VagQW0iThJMDJfUXDWeDBqXuGjHnILX68r6HHAjNyaJA8UZ\nLiZidOtgJ+I5NlITv0KvzaepzdqGkuzrPWoTYU9OvnjVwvg4vWe6QTxp8B/a\n0x8APUrgYDIL2uy4xZ5vG3cHYJuDEDRJX6RoQ9+1I1Mwg9gpAb8lO0Vchc5s\nGkpQ\r\n=k+oF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkGfbHe/G0yQ9E+UNioxW84d63uroW0SbQQkhueds7rgIgESYUApqmuZX1OB2FYI/NysP2cgJFI9Ozw0ZibLx4IEE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-atomist-update-latest-20190320191205.20190320191334_1553109314234_0.7554991040425496"},"_hasShrinkwrap":false},"0.1.0-master.20190320191842":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190320191842","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0f2e02302b9ea433c4ff0fba89011adb2c78fe85","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190320191842","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-UHLP/7JR8ziGRO2BH5+XHVG0n9iJ3qW+nz130ZyQWIWoUlY6uYSbsHgK/ppQBx7tjaekT8kiqKskew/6rD/Brw==","shasum":"dd1e0bf5c14b4d133f9bcf115ef888fb15f4b81f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190320191842.tgz","fileCount":70,"unpackedSize":287109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckpKJCRA9TVsSAnZWagAAEHUP/j+9012UBXb9hVPV9zjH\nnsgkWqqUbkq0Sd8qKC09tXRfTV5BGYYlhG30qfwpbT3y2tM83ajb77mOt32S\nuW8rAHPz8LXtsuBcNSUy3vwF+7Jnh1/xh94DwRND0xTrSp2DNb3qiJJfKArd\njE5TSpoUsgjDFMLOzGZKxj9m5ayA1ouwoHwrjR5HLTjjaf80TKHA6RNfoUaP\nS1Ahr0JTOOmKP3i4xfiy/PHvgZb1pxQOPIcHlvYZnwPDtCaq0Mj/Pa2oerv3\n6q6XyVdGa61ZvZCHChzh43nIFDwoOscEzYJTxWDATEMhQbl29C5BaOruPwuI\n5b1M6Y1OqonEaPzVW/bABB2+4k/q0tFS7W6xK/JSD+Bl6Rzy6uA4XaxyXeKq\nGSnGT7knqnX3merbWcbuVxc2YugeWaQT0AjY+9fsNX+IxmKJL8AnG8iKFHj0\nPSLEqe+G6FPLQKUlfOVvQYUJFV6t7Pi2/peQY29mB49QCj3dI+EbsCo9Hw7O\np2R19y0jSxsQj9xyjwpLdj2UVlHxHBSv5qfUISMvUnoYG39rs6Tw2ezrWQo6\nkjGKEJkC8f8s/XSFOqIJoYAi55H721veQbmMJ6IyRYncssFBohkVewHdRiEx\nKuwf1MOnoRIC+79UhRfTuj6RgssHjPYX4xNeg0TeW7U6bEDFlJJ816+OFhWG\nBZvE\r\n=7pGF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQDLclNSdLmjF3JG1inHH9giNNkzpKFzON9GpF1x8vaQIhAJ4/6W0wudXHaouzagIyV0DUcK9ibvbz9B5j6E1tWehl"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190320191842_1553109640478_0.3668209777736726"},"_hasShrinkwrap":false},"0.1.0-master.20190320195035":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-master.20190320195035","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a60911c767b6fd823cd81bf2e3c984391c61ffd4","_id":"@atomist/sdm-pack-analysis@0.1.0-master.20190320195035","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-bnizbR7GasL0TVGjaTyEMQTiCqDnexoTtHXrMXxuOMbvo+FxGs2EGkqQnGLK7wW3Jv7yIixtiD1fetHZfVan6A==","shasum":"9fa97c08193aac2152c5748430d7db1e73d29085","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-master.20190320195035.tgz","fileCount":70,"unpackedSize":287127,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckpn3CRA9TVsSAnZWagAAE40P/RM8I+Dtm/4yFz8zkjzg\ncAOzQP50LxJpQTbcXwhpBOD4LDOXEjBU5nXPHh4kQhAgJb6C9+lg/va//k6V\nvJRmaT/P4AgY2bL8N1lK2yLvXeJ3AUwz9LTgqZ2mqJ3VlqydDW2tkP8SQ2vk\nOcwIR14Q/uCOfMZVcySPzIEXl6UqeunZo4Ta9KyfoJMn4F3WQ0A/MLdOaiJB\nsCRJgFZRDRhEzKoGGIA4Fmt/CwM2v66tEJ/hfZMorHulN2qYYwSbcnZwh4dO\n48w4dN1Og8Cqwncx7M+Foe7jIcN8pOj3xUyNpTgRvkoeuJMWShqfR3XURqv6\nSikfQIUlau1Utgo0aJDT/YqQKJQNwRJ2XwxkUdmu0OLnJAX/lzdQ/wTzn9rG\nVuZ2FnvCstodNUg97LZcmw40EFoKnGNidZggpBBGVdnjj26o2k8axkOdmjpy\nmZy4CiOEo2DD2H/pNRAAv0SbCg9Rf8G9d5islNRsnqoi0OWz48Hnc287tZVJ\n1yfHElREl6Fp2p0kjHpHhvsswj1fPAhgby96YwC1LI5caudASad0i3HpQn0h\naG/IInnHyvTxtIVi/HtgVdhWC0iLS/PMP6EqqI9czrexVMJsDsWkfoqVLYUq\n2s0CRNwEdmukiqdO3mEZX47I6/T+6Ff5KDvSV6BBlDgPOV0oIpt7VC4R+GIS\n+WSx\r\n=Yf4M\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1v40I9p9DWPMXKkRir0Jrhf8z4F2LY7qVcn2iY6lfEgIhAKMUf6JOR1Yh1xiGpUCaIuhC02qpPCWEQ1Ag6Si0QK6e"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-master.20190320195035_1553111543321_0.8560923194189061"},"_hasShrinkwrap":false},"0.1.0":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"gitHead":"08b11c6d6727d966dc1e8ec60fbb9cceff2cdc19","_id":"@atomist/sdm-pack-analysis@0.1.0","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"atomist","email":"npm@atomist.com"},"dist":{"integrity":"sha512-P/vZoDUExeYGLKOLgvaz+7OYoAzjDcg5qK6Ubc0NrRnWPg+g3roqjdqtec2IO7nJMElGvxKlO1iRl3Z2v4eavA==","shasum":"378f97f2bcfd1aa2dd20a437b8d0ddb1a1e736c7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0.tgz","fileCount":70,"unpackedSize":287105,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJckpvxCRA9TVsSAnZWagAAssgP/RwBtc35WplBo6U+latc\n1T6PgvUlf6Q4LX10Ygzqlu0Q7bAzDLNQ6wISKwCRcaQjM0xBv5+EwtXmtm9Q\nM7PJ8tOg+0AlHurwTfQJqoTOf+C3KhJA2auw8sExqQ0VBWGTkE4SI3Cyuopw\nYqGiYJ6EO/ZD0zENXt/MfRN+pAncryyKtLOTJ1z1XjoaHnVRwUnH6ru0UsmJ\nWpat/WuwYm3SPSAS+HN8C+XN+9QCWPwqNCsSj4ddGhzEe98hEeqbkC3klZF9\nMq8ky4Ctj9t0aHs2fJtbxZFDVb2wipWVQViY+TyQBv6OgtD/Ub1Ad6Aer4jJ\nSkAe7/FvLbL1KQgHaH6HvsJ9Juv0zb96CnjyhmPNTp5R/WFEEKKRsvoVt9yX\nTeidQYkki0so6FzJQb6HlWBvN9l0JRkoRa+F+gbVtF/d1U58vilB+98gqL1y\nX0FjGaoUku3d5Di77k/+ajJvGLipdTZs5i2KeGo1zuIAEwG/ZQ6bqyI4DIcQ\ncgQckbshlEz7yUXN0/y7o174LVayTQb6kfhgm01oEbaObQI9XMf1Lead+eAk\npVeknXI/ke5SP8SiwbE93OLnkdSGUaGkdeue4hKUuYY2gieEg4/x8zbqH3MW\nWk/yLsZ03mt/aaJOH9/mltbasdVtc8pX+J6C+g5CO/7jy9b11JcGJ+yYGnne\nu3IR\r\n=AM6x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBYPglvYzG06mfxg1YEAb9Teav5EEY6Z4xxkeMs/hxbOAiBLXhsGoG0FphlNk/sizO2pRdNiH7wsPuFgoi/dQfs5Qg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0_1553112048854_0.9609039309192033"},"_hasShrinkwrap":false},"0.1.1-foreach-test.20190329091516":{"name":"@atomist/sdm-pack-analysis","version":"0.1.1-foreach-test.20190329091516","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7d66fc5c6d0c37739f4e1149a654e9dc12de0a54","_id":"@atomist/sdm-pack-analysis@0.1.1-foreach-test.20190329091516","_nodeVersion":"11.12.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-u/RyBuHfFSRa3bN/LSO9+CiptUe6kzFfpFRaDwx9cUkewlwnoWOtT4JBsogUNMe+MOCWUG7WrQ6b6Ue/UZWPnw==","shasum":"c85919b8281bc1931ca3b79d871b43de16de6cf3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.1-foreach-test.20190329091516.tgz","fileCount":70,"unpackedSize":287452,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcneK/CRA9TVsSAnZWagAAQkAP/1BXIprsyTUxZWUxtXam\n86m6qTj+SoXscX/oMmLUi4WYbni6/CUfX730+GN4jk9z1SYT+jqWwkBtyhOu\nWnXtA5GB2rR3F023PElJwBvfMFobJ4iqj9zGGtgMGxGB0gMMaxU98Rme/udF\n/qxg90WgNGmzlYakrGl8ZlD/vLgO40dJTNjB4dkU/y1zPJoSattnkbZU5041\nTelguMqwRdeMx3Ze7kxkvTMVQxqqoPJZbS2epiedPvPT34JRsRq//gb5V6zH\ncLtNYuvS7D/Ly4CgXCiIxzvzauPZgoCE+nN34sr8ne6OPsr8atL6t2N2eLsB\nlu92FqhJVm0sV0KF1JkKxqiVmKpcSFev6JPdhD8/qyPSnj7qznV3PzBLlfkm\n637IfseCWYnFmnw9w4wGCodxO/knH5Sq1SoPJ5r6wReOAT2zdnwQXez63E4u\n5NJ7pTCvq8wxzDGTW6ItRHxnlW8LicRpHCGvpnGZTPQTVrYbHuv4VwseRAcw\nF+YGKsV/NuCJhzy6GaFCc32RlRqZ8JMBuIDd3yFu7F+NpRb5FycVCTbzbzXD\nmTims5ZbF61Nzlz39bF0UIYx1TwfhuA+KQDUpkPpV4+NBu2Pzct/8ntqqXAp\ntPkSDNebejiRQvRjntLjUXAwGe8TgJIlTdy+PrAlrAarM/ThH3EKg1SMUWID\nUn9r\r\n=FKoU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCN123nYVJ/Jpsl6I8Nj/nqUf67iEWrqh8aUUqf+RcZ6wIgfOPmj8bvP8PhWvkLwgkvHMqmroHv9XAkwHihydt2FY8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.1-foreach-test.20190329091516_1553851070837_0.45474300390734657"},"_hasShrinkwrap":false},"0.1.1-foreach-test.20190329092349":{"name":"@atomist/sdm-pack-analysis","version":"0.1.1-foreach-test.20190329092349","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"22103bb4286c21aa07146a7fc78e79a4e7fc15ea","_id":"@atomist/sdm-pack-analysis@0.1.1-foreach-test.20190329092349","_nodeVersion":"11.12.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-7BsWFV2ZchEYNlJSw2FVDpuf7pytwHpp3uxT1G299PruvAF65tXjRm1SvAxCf8RZDrVlg2m58fpcu6E1NQTIKA==","shasum":"3e0bb0752624397433ba1b14445313cac65c7f80","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.1-foreach-test.20190329092349.tgz","fileCount":70,"unpackedSize":287596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcneSGCRA9TVsSAnZWagAAj0cP/i+JqyhX5gIKH8h5Fku9\nxNAx35nJut47mwStxrOOWhW83rPgTFeWzUBfLBHUuNlzKUk6zk5MwP1My9rq\nQGwegd13mcXg5vhoJbJiwOtlnAWzzGhpToBIo45ZoBLUukXgVSCctvfVDLb0\nFSYpp5Ovf+S0cMY+Gx78pM5F8D5IuCRRW3+80tn5foZRpY3gs9mrmHLIwm+a\nU4QGvlbhOe9c81B4n1vzZpMe4zI2pR2sbuNcg1Qwuz5s3yVQBailVb4OgKiV\nDj9i6Rqp+cZvGdJU1d08bgvUq+7AJm6vv3ZifTC1H6qwcBE7OTbflvNjIZRs\nxmfB7JpXBcSIy3KWOrPZAGhxxIjgkxoDEhMRqBjA9xK1l6DF/eur6sH1j0uL\nQcFSy/HUQpj4qlSBGgpduowsQadEdmk0ENqGJuudmmiMCHhxZLcfEU959jiV\nQAaXLnFV4xYUkqCTCec3jYKUw9pkqyAN9eS3RAzoSjZnGLLuqd6XSwSmWzfG\nR9JWV+UpUVSSXDlb8OyDuC23iIsQ6Me7wYu7OANhd4Tcvf06Fi5jZ0KkIfUh\nMtS7phCLClgLVbGLmYLwGfMN4ofd1m8aDnZqLWbtcqMsEfh3DWusdVj4cEwe\nG69bnODEy7rHZ7Z9p2irrav5E+NjibboFY9O7j093am5jG+xveRD4P4eJuTZ\nV96i\r\n=vhNd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVb5VR3oJYGUzxF0kQOPVMxFqYH7p3Tx1xA91TN5lkjgIhAIV8pH9m1Pl713Y9QGsW1nxFMRAw+bJMei1pxJrndPvz"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.1-foreach-test.20190329092349_1553851526162_0.41592669818159633"},"_hasShrinkwrap":false},"0.1.1-master.20190329223911":{"name":"@atomist/sdm-pack-analysis","version":"0.1.1-master.20190329223911","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8a51ce9c54b0a2233187681a8dd64c4f24738205","_id":"@atomist/sdm-pack-analysis@0.1.1-master.20190329223911","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-NhAe+kM7pz4giESGkpcisViZSerZn8K6hcngH8JOisNmDgFVT+P4vVvbnd3GDawgeNcSpX7VSqXl/8qyYt0img==","shasum":"df353e0fc72274ed997d1d1a8a9fab4fed3d1c6e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.1-master.20190329223911.tgz","fileCount":70,"unpackedSize":287590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnp8BCRA9TVsSAnZWagAAhFEP/2u1hKHopYocP9vQXpog\no1pPMDcPKcXuutF1s81tWGeHKVCIlmybO0qSaz8LnzQ2zX30JUlvXzzNnFH3\nOrpoZLXd6A+iaWN5eMCKUnUGP5+cteAlouVVM+DnY7UxxB+iRLGoqqD+6RrY\nyYZv7RQOCSLlcKkp7vEVbeguhrbi+JG/onchj0Ymmv2VRaSg1QQL1UPWvr0S\nBtpC13RUAEquyiizu23lwp1zEHXAz1DdC//wZks0AUFirL3zHOeelED37yqu\nYPxHeuHABUt507Qm1un+OVgyEO06FBwyla6hgsAdz/KI9K74Vcy15ubpNjYL\n0j0MlTPG8MlUxAcnjcGNTFyIuJZazXSaTcU5qZJ7X++tudPs11LbbdqBndHO\nZU2lRyxkkPYOg+YMYNUkWZwDkS+L03voOIcog/TM0Mbha/ypJMpnHZiEtlj+\nD9TdDA7/YAUuT21dvLduTGdD/5PfvfKV2wu2U6lfAiEetr5T2E8R6G23YU3H\nC0MZZK29/uxCwvmM/pZjyjVlAJmvbisM14SmSdvUz73u1OLcG4cdkoeaR9P5\nlS66Rvp89zMN7uVTOjY43R0qY7KJWSaJ9o1UJL4sF6pXPpFkuYVkxK4x12fM\nO3EAmIUkRslSTpRLLZTyIlH4+OMEk1phxUvnsLyKuKXV4iFmM7WcT7vvjH3o\nNix3\r\n=SW/v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC9JFtXlzW9qk9ne9aiDboMQLwjtaYpfVUCnuMZ1IV60AiEAn/9HIJx4YjIj1HFYJlHuNV5QIEbBHJrY0NLHKJvWEeQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.1-master.20190329223911_1553899265028_0.8286823880542422"},"_hasShrinkwrap":false},"1.0.0-master.20190330063812":{"name":"@atomist/sdm-pack-analysis","version":"1.0.0-master.20190330063812","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a156c3aba98eb3d7d6e002899e9d2d437dc4d272","_id":"@atomist/sdm-pack-analysis@1.0.0-master.20190330063812","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-OOyo3TrF0wA3vxsJN+Nzl+BKfjKpiNpAbUnitMibuJcQgSUbp0rQnZtzMkAnsJxZ1xlkxCyjC272d+64W+MV8g==","shasum":"fbec9d41e9fa1095a75f59285957acbb6b88d13b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.0-master.20190330063812.tgz","fileCount":70,"unpackedSize":287590,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnw9ACRA9TVsSAnZWagAAsTkQAIeQqVgisiwMDtPvbtq7\n6Jo4i7ZNkU+IQ6MB5nd3M/CPKYaiLvXL8sPKvr+C2h3kS7ThXyX85kIcA8ut\nlNthNQA7rG+zB8Jb/gmA7/4r4kQSXqO3+e77pOhDl8jwlmjVqh28ZPltMKjo\npusCwraKjIUZe59YSQS/eTFavBAA6y2gWQEmr4FPD0NXb49fNTJLoHgtjZwK\nKeDIna5pPN4wBD3ZLEa4DtW3C5dD/3aoUEMM2vLubLdNpUddClWg3ExD0TFv\nhrQOPAPmNzZs56hwUPIBx0Xs9FkRQ2C8T0kt4ov19bD7Rb47WlGvKHhSFPvN\nV4+sOhG6xgF+ZJ80Vs1K9tUBjjXY2tYYEmmXF1ADcy3oddl8QGp3+1NqYa/X\nrLwVsuOLIHcZW6vX5kvA4AWBP7hHmHpBap+To2hOp98CzsY5nKd05nFkQpdq\nYZyii9DhS5y32ZwRipYxYWPeh/XnC/qln43mqaiorGcrilhk1QRP9fNTbK4B\nzBzwOw7Pn5yL/DN8SENqa5UVKK2L6dS7OgpebdMtukXAf/OBZocFQvXNzoPS\nANGlB9jQlhUhG641f1c90ajmuPteoXTbljZxlIOCQdVcNafUEMVusDis/dQj\n/ySfgnwlUO3SjCADpV4wqUycVdMoPBBoTo6731vw+7qMadaOG1BCJwP1OHXi\nG4u8\r\n=vWqg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTBVAdLkcK+QrlNsdP1dsXCFL1LTZ4lIat2K1fF5ty2QIhAKU9WJXayzorHLbskeZAtaIfTFKybsQIPRhP98/JvFvO"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.0-master.20190330063812_1553927999498_0.8107293135287696"},"_hasShrinkwrap":false},"1.0.0":{"name":"@atomist/sdm-pack-analysis","version":"1.0.0","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"gitHead":"e3b9a5a2c4b518757cc1409fca38b6db72c382c9","_id":"@atomist/sdm-pack-analysis@1.0.0","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-hKi1BvU8Wie8ZU/10YLMQB2gHpUABCP3arKd68BSLHOxflsSeNjmf9sBgCHIc79Z7he7p1na0FGr2dCbleusRw==","shasum":"99464e5466780ba75211cb5a2f99af33b40cae64","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.0.tgz","fileCount":70,"unpackedSize":287568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnw+dCRA9TVsSAnZWagAAECMP/iF1uYmMP+SlOuayuVHf\nAx3KJxNKiqHXln2asph/+KEn4LmPdXQhgprI5r74JUUDiVN4S0WNVojoRE0e\ntFJJIEUhEJ6xnYRovHt3Urv31nE8xQ6NN0UyL1mz9m6JyibAcYqMWR0eBSxV\nkUH7i1gW9rMYzh4Hskgb0eral55mObg/Y+m12uU/H28G2748zHensLdqzD7V\n64uv5S7HkabB1lHyncGYQts3yZnJOTrnTbCwsp7KpNXqEbwu3ZrUp8deGwdw\nHWjgnzpI/xSi7fGM7dHlBbAlbxppoXqdiuCFyfpB7W78JFWApIll8sS/rvfV\n0vPigwADkEA5Xcsewdn84cFFSS2kqxSGxThjebBTbgYXNL/67KtNr1ip6H9P\nPzWNheiw+PmpumlPu7LuhIHasxSDBIoxnhbw+HMT43u4hg8DwDSvaKv2NSMh\nmiwKCGedzgNa2yeaRN0OGld+QzeJJkWTbg5tdFEuDHO11NjQJ9xopZma5904\nImT7tNZY3sVWSpDdr9DC35aabz+ZzNYFYQwNsBFjRBNeeTgb9pMU+Kz1V8uC\nmTFwfpvd7LV1oYOop7AVd5PkTk8xOw6oIap9TCZXsMN/QCSgeq3vWVCGg2Gs\n6ly9HCPJQn7SBSb+7r7aKQ6LSoNVt9ZL57hYkVWlwgnkhTKcT/uBtgjaQO/5\nGSWQ\r\n=soeo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCFRD4cZL58BKcqUO7e9NU0Zs0zyOAfmKhnxRlbkUKKAIhALCiudpVNaNGJO3aRhEamvirTZ5crHP2nXcjOm7ueSgi"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.0_1553928092830_0.3424826979058284"},"_hasShrinkwrap":false},"1.0.1-master.20190402092909":{"name":"@atomist/sdm-pack-analysis","version":"1.0.1-master.20190402092909","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"295f5794995745f73ff2a1ff24504ac42f3268d4","_id":"@atomist/sdm-pack-analysis@1.0.1-master.20190402092909","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Q1E+1b9I5JNqSMytyMB7yhy+zIaEfj/dd786pw2EU0noV8RUFHy3EdYA8I6acZKfceiIHID4EDujQkMXvbTRgw==","shasum":"20d4aeffa2f1bb1379831bb47ff5e46362658e12","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.1-master.20190402092909.tgz","fileCount":70,"unpackedSize":287761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcoyu5CRA9TVsSAnZWagAA0Q0P/ibmDAvHIDvzH7ZVkpvM\nAIieQz8n/UTtFhVdoGF3CthHLaTHBXTt6Qi0wLetOLhv2Kripn72ZMqXthej\n/BaV9TlxMwWRSbBXoRMsa/y25eeWsbCxjDNVMntzhRpKRj6AkyowqCBo2wl2\nmYwco5aV4XI91HSWoNlLOflS8li2Dk3HEPtgOdWpEHBsS1o39tzM8EQRPWpe\nrGdsVpGshpyk8l1cFlp6k7IIkE9YG8M08xMBZTaxE13Itvk+jXCb44rPuAYf\nbjuwLBAiOWJxKBO8biv9XhfWIfowQ0R9FVGbeTKKREgPtCx5YqpICr0Rr1Cj\nDudQt/BeNsdDDH0lJStkScuVIv1LYxweaPKCidWcG3JxQX+VUXFs5/lryw7Q\nht9KZtj9cUFlnnE2LCcPvj5HzLps7OyM/SHyUEnzLlcy/cj6JyCxbA+rH9ra\nAA1oQBhQSKld+3lZThjqpw8NGtbYkEGnsuEeKLWEbfSlowcUxwBJjfV1dkQ8\nKoLg/kLanoL6qKZHKsPn4M52drewbLALTYocyjbRKf4r76I8pm6+1gULSkoR\noqik6AiUQObuxDZjI8XbEsoH8zMTN54IUS1A2/vUY813EDRTor3KBe7UyZxJ\no7TvrOI1KEeKtWiDm+Fm+QsJQZbmHDQ1RB8xVq4MwduUpBiq9X3ODMvxnwin\nq56v\r\n=n51y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCVJpHqfPBCT1+hueII1KZ7GGZPBuhxrILW3m91UPmMpwIhALadIWGdvj1h8t3BgQn5C9DJdZQDYFb55mAPOqu9Mw01"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.1-master.20190402092909_1554197432694_0.5135907706962859"},"_hasShrinkwrap":false},"1.0.1-master.20190403062532":{"name":"@atomist/sdm-pack-analysis","version":"1.0.1-master.20190403062532","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d70bb2f2aa1b14176646d54f512cb83f30a253f7","_id":"@atomist/sdm-pack-analysis@1.0.1-master.20190403062532","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-gsUB1k/MLKynNeSzn+ABG1YD8dXQCkj6ax+pPuMcgl+YQY8NUn+16YjEfcY690W+bdxHmkorbqy1MFVg5CaaiA==","shasum":"a9101da70dbc694028cf7ff1a68da8d5946f77fd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.1-master.20190403062532.tgz","fileCount":70,"unpackedSize":287761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpFIkCRA9TVsSAnZWagAA/fcP/jzdiBynyO1luv8YH96W\nDCczwr8o1fbCdQZiiNe+jLwLiWXBtf3+IjDjVgYOCCjUvcHOBlVJ5XmsQAmv\nZfvJOs1K/8hoALwKO0UyrEkcn2rEjGBKz5mAFCtJ/3mJsAyT0sovU06Do//q\naES1CgNFpV/CsdNdyKbz7xXnpN4qxwSINhoye050p0GmkuP/2q1ODcA/L3Xf\nMyzO0JpmhvwevxiWZ6Y9W1KgDzwnWbIcyec4NQJMancHxTtg37N7DvxvaeRK\nlNMTy35eeqA5w/9ZoUG++jf0wP+VmITnm9JZo/s63Lgrg9ODb+O+joIv68uX\nZ1V8wU1sPozYQLAnJF4wB+aRy8GPj2Hr3uCbWpdQIHQUanbuWjwzqzlvvLDp\nePHUQnp7iYOkYj6dCkV937wyGx627eH7w9wSDF2X9K1jujO4A43vGLb8yU1Y\n49FFvbl4sabhDdnRyZS7FV6U8aHxmvdLGqXOzt+FceISJ3RVjyjxGowvpb9z\nd9mSrDT5LMKh5oxvbe5tbJyfrsB5P/2ZQA4WN4GRf567wIFXDMWZtIXr9hv9\nrr5S4oBtIl9epz0JJKG6WQJEYZRYRj1DWmN04tkwbVNTMiTA6HQPjgiIz1vf\nGiAKc8FUFkz9RgGiUoGBzAMVtVdiIakpPH+aqH5eLShnX76xAoGNvaVOBvbf\nGxon\r\n=whiv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFOSS9qklzxJExhuAavSZWQeq4YSZYgdiXqWslkQ6cEeAiArSTG5RndVyyaorllkBGP37VWrm6ZDLOhy0+PGphjxHg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.1-master.20190403062532_1554272803179_0.6155711417262322"},"_hasShrinkwrap":false},"1.0.1-master.20190403064342":{"name":"@atomist/sdm-pack-analysis","version":"1.0.1-master.20190403064342","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a34542c6abddc8ce321855b86b240a29d50492db","_id":"@atomist/sdm-pack-analysis@1.0.1-master.20190403064342","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-9FO1pkqtupPv9XoloFvlDDw+WuR6Y1KmCow/k0eHM+uOL8xvSl5zCBuP+Qr6r1BIu+Y6PVHq/UygoEB00i/pZA==","shasum":"00f94c210d7c865a8e6c6c1fe6107326e15cfa70","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.1-master.20190403064342.tgz","fileCount":70,"unpackedSize":287438,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpFZ0CRA9TVsSAnZWagAA9UoP/0GATIJYVt7m28+WXgGQ\nfRwmwaysGfjuGRsHv/l39O9kY9jFmcdORSY9wj4gkX4+dE/T1JS8WwhlNDwP\n3xYUrRx9VjoIjzWqXF67ZhdKnkMxXlPQ7HkcoCuw/QumWRzfb6feJ130g6e/\nQupaGHKiTIBQ7fw/MNhYzkTWUnxCgeeQhYwxf/sdd4IabOY/0sujNnpCgwLj\n/lmFk80gfAenyDVPIFxgxs/WQlN6QsMpkeh7GlN8BZ4UKN+dG8eUhtOjxJoX\nbWUDo2nAVK9uQiSfeTIn5ljGHcFJh2BOkSkoZGxI5k+r9xAji7psQhSEn00T\nT0b1ihAkLecWt8XuBZt9WSXXamlMm8a6B0uIwq6ct3xDS6Zk+HagZPiKsHr3\ny42V31R0F0mWsdX1T6eYA7wWi2Tr+vMlhh3L+Hu+q2sKsE5Gb9qn5Os2KdCH\nkJ6Ia5sPQDj00GSa/FFBQwfMDtTLQuhLe5RctfGGISS6x6lLUxTIySwWDuFI\nhI140ve/HoxDh8NOCQOtaGFPFIw7oOIsFFbCmTqTxzMuy+bCC4WnwDVK7Rw5\nRXwCAN4vCdy+uQkpWZ5dcbHVw8vBk8+NmCgWq2Y4ZWTtmf6I1PyhQNXz6E63\niOgiU1pI91WjrRiEwWuptA6ASMByD0r9Y/RrWUH5FD2itnANvT/8TnJHWc4G\nEbkZ\r\n=sXhj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBZH2CvchhJ8HxzJdNn/Nj+p3fgLY9mNSPaB7QJODpY/AiEAj5e5cjwFZBOTomlk6ctQmRzQi2T3PR5RayP6nOwJaDU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.1-master.20190403064342_1554273907625_0.14552375068968693"},"_hasShrinkwrap":false},"1.0.1-master.20190403065626":{"name":"@atomist/sdm-pack-analysis","version":"1.0.1-master.20190403065626","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"19cffdbf333c6e3edbdb609bc9635496a6bb06dc","_id":"@atomist/sdm-pack-analysis@1.0.1-master.20190403065626","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-aaDJEOIL27gccPdFu/iuyuDL8QZH1jYpgtsy/SnqCBOsFryUKEduwc/VnnJSgfYV0uykBDERNySbADYkr1RtlQ==","shasum":"64127bee260790fe195975d60c0bbe07286a52b6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.1-master.20190403065626.tgz","fileCount":70,"unpackedSize":287599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpFlqCRA9TVsSAnZWagAAsJcQAJgviULuVg39ujXDozk1\n92REsGZgbL4hnVwraUqHEs9eFomR7cawJpHbwaEU4SKakVPGHpxcwT1TPqaw\nsIL3fZxG6z38xTFWDGZ1b4gSLGZUF5QLNqrCJaiOYNukfsSVbXwWE9xHCv4q\n7WQQaZGxQDQGOLFTC+0AnluqEfwh4sK2A3FEPlyVjLafgFoYxb0dVtw2GIWU\nyaz/e/oVOAIApcxsaHjQJCDBQCWM+L7dou1Rh3TQWK3S3sqnj1p9+0NHdsOe\n9U/xaKmLAAAVu+pRD217M/udM7GtatLn2oiecsPDjJ+RJFobrcIKx1cHzwSo\ndys7r4IVyHE8yLqLeKiVoU4EhnlWc8ynqDUUboLhJ5Nf5BfmEDiJh6fKz49G\nnhNq8Cl63zwL4S49OTOLP6zJWh1PnHEoxfOW10KhrcyddnlxodpppdhUrV0o\nODz93lJYDIjKNnzCWg4vRnrpwsNDeTqFIpY5BBuLlCzno8kdrLlmYCgWXRmV\n5sTctKpqdcCscFJKo4dhNNRs1rhZsP7n9zNi+L902uQwljHN1Fxxqlm5rP3U\nSWtWWqX8whI/6t1ETl6AR6xGCuCM6cmN4idYmVE6xvjV2gXvUCKy+9b0ugjm\nhLHzk4LpNQYMkj/9ucbeMgXn8YGSwrmRkxoKvODIAT7h+Vj2HPRKXvk1WfkD\njKNn\r\n=b/kh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUyjJhPYk1VkSMIFMcB3uyn4Z6zMNNuXkfy1IMzaZmvgIgewMrsDXmWCCwPttNmflE11pDR4TMDf0r4niV78QUyog="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.1-master.20190403065626_1554274665741_0.006549668555256627"},"_hasShrinkwrap":false},"1.0.1-message-phase.20190410052935":{"name":"@atomist/sdm-pack-analysis","version":"1.0.1-message-phase.20190410052935","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1a9cbc01ab269dc19af2365a9f2efc77878ba24b","_id":"@atomist/sdm-pack-analysis@1.0.1-message-phase.20190410052935","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Tx05EpwjxG3PtVV2EdK/J9jOKPg1JDWxpGaArXClYXDXZRV4tudepqb3moC0DqSX8gvlAftmQVd0h+t4ojxHwA==","shasum":"c44e7e8f444b416294da489f4940f52f2547f2e3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.1-message-phase.20190410052935.tgz","fileCount":70,"unpackedSize":290377,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrX+WCRA9TVsSAnZWagAADpYQAJpmVaNcTzrsqOrlydmg\nrPdHrCcbOOFhw7fqb3EwFNA0Vpn8qlj9GhkIqigFsXxweA18B5lJPtne+nzW\n3BzfTGkf3k1k/RN/ItBc3dx6rGNsGRmVjTC+/yHuIoWKQpo1cDyH2OMST1Ie\nLrXbI0Cw85kn64OpuPGvy0AbKfK76xR9FXBRnixwurj13+joBw8FP2xk8zfU\nxLYGGY7SpYHVNDDeOhQ1q7kAb+wDHs8cEUInp8cj/l/95ZbO13HurrzKcmd9\ncIQ/vDHQWHn3tUK4IiQclQcdKK0f4Q6RPUKgnm6XVQ3/n8N+vxe7EmIFEmaz\nXqcxYp11vws98b99CZmkhgJVYYoCWYe4hCXCwG+HdBroDFifjDZ2vjRu+y6u\n3ivVjRXdSNnceK6OmhWIWjFOUJFUSirLRQ0/L2UExS6spOrPuvYDnKEUsYQY\nFcn2fckZEOrafSEVUKHZXyMWqdXR601XP9yoDBOPG1Po7UbPfQdYSmAz5VSE\nn0aquHx9SfshOibYlShZ0XxQ+XPHD5cuJNSVY0j2QJ4Le93y5VyH48E67Bos\n8Tme7iVcD/gFyHpCeibS/f18gVjYHqzFKh6HsZx2/Gk+t9DzKD64aPZ/cHJE\nwnXPlh2svAR0WppJZ/6BYL/cRj8txSfcTZE19jsM/rb8Hi+ypOFFK6Q/lLnT\nA0lN\r\n=FqU/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIezzCHBdlOjWxjJfc2+7XiH7QvPYin7NL4Norw0LRFgIhALyvb5XDfAllb/bqp5+80D9fZKaSqhlYKguy/0YUku0d"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.1-message-phase.20190410052935_1554874261448_0.24782686600955217"},"_hasShrinkwrap":false},"1.0.1-message-phase.20190410084206":{"name":"@atomist/sdm-pack-analysis","version":"1.0.1-message-phase.20190410084206","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ac8e86482b0ad313874736e3993ef072047041b6","_id":"@atomist/sdm-pack-analysis@1.0.1-message-phase.20190410084206","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-AsMhfoxBrnO4/GgNXNYJWZ9rsnw+tP+u7voPw8+j2vt/wJgJrZhpMybfl4Dnf2jTM8HyF3GufA2UOfyvHoyy3w==","shasum":"abe74b1b7860969b4b657000340e9714eadf52ae","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.1-message-phase.20190410084206.tgz","fileCount":73,"unpackedSize":296894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcraylCRA9TVsSAnZWagAAbj4P+wVkHcotCQg8zBzDAfrl\nwP3sie6LJzLMpQMen8mBUcTSPs7S/q0VY0FxEuJPAdM+ULEnNOTD4yAiwB8V\nj6c7CbiEU6fhDhOC364YBUY7oJHMqcoFV7u/hRufFvU29d+Xi5Cm+iUUTXi9\nTPZWExJIHZL6azzsvTT3U42+WOz+MTelWYXLVrGsqjtwB4/fUewkqeudctuz\nL5L+iel4IMjCEezXBgupCWvggGe3/69BspzQMrwZTZcJ6aQktgL5sJjskQ8F\n0YgeuCvmRPJStfNi/IBSDR2Orxb5HNI73stdxVC0/668MrX0VWmWwQC0aenW\nxuQblQAI0dAeMdverMlR3QKs80iEOqCUTYe9SfyAgWGxlYF54Z8z758iMhXZ\nBHZ3c4l39L5Hm8bbao4GtiSOaiSbqeN6fGa88dAH7UuVNgqTSlCJ6KAmDsBB\nrvxq8V82U+wiEJv+siEefLHIbArNbviS6G6jMsSnANT/YLKilU1+dn+l/9Yi\n9WyAI5uW7W+DphIf2FFrdL/FgPQEKHdVnTBLclbkbXizrqoYohjcUOcRYH5h\ncYtT5771BBYxEhy0XohFsOdbGSwegPCbP3jAjsx+RfOSbUWs5hR4vrJeFP3y\nOFWprhkzYSvBo+u8aSPPVR/xrhvaltk274Wv1JqUa2NKhfiqnfWTJFw94Kkn\ncl4l\r\n=X61F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSjCpVxcXc1Sd08k5sM/x4Lj4y14MlC6qF5ZVDqrpQuQIgWJGa5V5HFHriLu+GYlDO6+zM3JiuHdVroV8/S9R/ddQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.1-message-phase.20190410084206_1554885796516_0.2285995363147877"},"_hasShrinkwrap":false},"1.0.1-message-phase.20190410091303":{"name":"@atomist/sdm-pack-analysis","version":"1.0.1-message-phase.20190410091303","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3a31d6beae86190a35fc592ebbb3b0e18935e2f7","_id":"@atomist/sdm-pack-analysis@1.0.1-message-phase.20190410091303","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-hSsqANY9KS0wnkjlLJILFGMfAaHGATpHbCh8JI/lVv1/6qSnopSBB9p/G6f9GQ56xtWkLBIahhXG7L8XnBFFbg==","shasum":"d0cc829fb98e73fce20fd6acfa01d95dba848209","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.1-message-phase.20190410091303.tgz","fileCount":73,"unpackedSize":297901,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrbP3CRA9TVsSAnZWagAA8lIQAJijJcOTk6YwgwHpzr73\n6Dq+gQV8zN9tkMqsw4rDPeGR//9cmepuwZIpIWxzsg1DcSQ4ldQ7aT7vXutA\nDkj2Z+tLrMb0KlWE7UtbuY5KQgdhbbvz1yRsVvvfiGUjz9pNEqNbFbYyxahs\n+FlfuBhqJVQgbyGtWD4lQLr+iMH6eKw+7RYFGO9mKiMSwy28ZuiHJNXpz91c\nTcdkYaAA7wttSncj8I96QMHKT5yPpgbRK8+aiiSBOEhRJQeVckMJ+ky1B8LB\n94/mCCbpmJcxHaXBIzKOOY/bH/eIxL3N8mc/zm+kt2hRRWLxaKoXdBHEI6+z\n7f3LcubnjRrjUOCwGJjtElttsfazKWPfTaLjoGXVsFRB7qvhSAVR8TjtWboY\nXFOQiO/lsmwPm+kjDiA57zLxMLkNe80ELx9oZsZ4tm/SP6PCgP65DT3iep79\nYmYmEuGCujCzgJyQTIiS95dFvDMHbPnMpAQmRBw2m6JFN3hVxXdzcs7lkXt9\nhyXo4y+oBO3zODq2Uk9Pa+vm6ICSp1Gx2wiVYTD/HikFKhZGwXzxAHjgWQ4k\nqh5WEe2ZWsGTCpqRUlMl5m7n3UQPaEycRKCk11axTIfTuIBZ4YWcH+pihy4X\nu6cWRQ3SQHJwpETKCYJy1m4FhwwVQED03fcyiemViEMuvwzAUrH8YnrMUyi5\nZ4Fr\r\n=ImWI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICvjOuin7RColTJgEieZfqYTOqLI7DUIorG+kmFulBfAAiEAnMJBvASMSi+7tze6Cw5/T19fu1kK2f68GooYY8siStM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.1-message-phase.20190410091303_1554887670697_0.9307751966643414"},"_hasShrinkwrap":false},"1.0.1-message-phase.20190410094737":{"name":"@atomist/sdm-pack-analysis","version":"1.0.1-message-phase.20190410094737","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1238f29378b842e6f1bc71d88d17db1d2defd6d8","_id":"@atomist/sdm-pack-analysis@1.0.1-message-phase.20190410094737","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-EUqc76k/B5oPN4qWKMQUOIrwP/YdAxQv1ZKHaM0uRnZuBD+m42QDLa+FuCv2CT7EeF+GUx/nDl9LPPlJVJqTug==","shasum":"0d2ce6275772fad3ec16348c53941084d83e90a7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.1-message-phase.20190410094737.tgz","fileCount":73,"unpackedSize":298682,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrbwDCRA9TVsSAnZWagAAz/sP/05nYFZD45FwUhTT3E7C\nVa8t6ORgnqkV7FChI5MH/10FIOzWq4G26nV1JS9opil5bXRNlZSI9fqMv1Mz\nIXnXCRIVWgkVgOY4tKVyMfhvMU3BC+RdYNdHHfr3xb4cxKKIbjdD8VaO3l51\nEnq5RamrTlyJH2cHT3g6x2jsCQtgXmamyeA+O+4cCUU+CBCV/9NGXO+hhf8N\nvxpHEgeM/QP1tFfaTeTywk5m4SKAPV7WKqwXNEzXeCzKSoYLVb/7Wr06vMpX\nPX2I1ouWh8O3YqimhLvRu2ycLo9fuWduqNVS8oheG3JxZp284hgFl2tVYqB1\nJQV++nmAD6d9qs9aGMrtj27yRfjsEuSj88N7DVwZxP2/wY4TxRDDb45zeHpG\noUWROLrniiIIx/Q0oiPik1Gi3Es2ZA4tOYen+9pF9A8xuvS+QQnX29ay+DTb\nNb2xPQlIfsoY0BlCzC5BwrhzfdmzR0WnFLbWq/FNMmeCUL6zrpdZKzFgAK60\nq7Y12ZU3II9UyMmICFik/1ugQR5aGiEVqCaHopby+FvHe2ZRm3zf9GARe+bk\nlKrh0bccQOYm8FXJS2ohDl21OaaQrlILo6Zl4KbZK8+Prt6v3Mhb+tQcozWp\nl7/h+jsA+z+CVX2m5ZzCJcFL6Q/lTqj5qUGoHL6NEeyAfIrYXO3iJBS394po\nnca/\r\n=ebaY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCDdml8v89f0Y7Uu1k7pDe+viL9wFRGVX9x0kgVozUsoQIhAOoucEBfQAEt/kOA01+4PnWEEGEs0q1n0smUtC2Hg9cW"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.1-message-phase.20190410094737_1554889730341_0.33583046073987877"},"_hasShrinkwrap":false},"1.0.1-master.20190410102548":{"name":"@atomist/sdm-pack-analysis","version":"1.0.1-master.20190410102548","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"000e612c102de0bd5680319a4d7b9613d2e33811","_id":"@atomist/sdm-pack-analysis@1.0.1-master.20190410102548","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-mg6ECazKg4dVGHSyVI5TpT3Oo9wmYUtY1X8YZOpcsChEyhBdKSMBKYZ1GCJ0u03IwcIk22ufrcyI8va+47LmPQ==","shasum":"c15d6f78115cd1550ee75c0c8a13e8eb9049f0b2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.0.1-master.20190410102548.tgz","fileCount":73,"unpackedSize":298809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrcTwCRA9TVsSAnZWagAATgAQAJJsfrML0OJ7NVZZ2b4s\n575NwoeSDnZL4GZWn09uak7aohXYu+9mS8ka2Mw2PhKUahs9ch4qXG1NqQ2P\nmwDRJq3wnPbmmJuwEIH3KfqK9k8vI+aTqoI2zrWgR9AEg/XnXCkTPVjHEihX\nvXT0liRKVkU9gD/zqJfN89rhAPfh2Lt4h/5pc3W22SW15qj8yaUjL+sjZNNM\nxg4N2lRc31///uRDVOBb5S4kU60+uo12jsFs9c1Gol8aPb1Gk099h3Az6VPJ\nLibzqLPTer+3iuHdGLrWM3IoD8GO0DPDAZ3hF5Uo4SvkKJYH2K9i5axMdu5l\n5c/dsZPfZMRN8xy6NfNzTG2BYBs9kPuHskHmf9GkWn/ITItRibO/tvhvlC+l\n+sHDOiSlAtaWrVmOVBvGyGIvL27EhL/0h9OEdG+jYaohp+tg55mWAssmTHk0\nwrnBTEMjk2vIioZzegvk7JttSwjW5GO3DFHJio+s5F0d37E1IKAqrOEDCNct\nDHQK/jZmDF1SvHICnBe/hsVfjmBZ8A/q1GxIC29ayZbPuw1A3ZJJmigWtAI1\nsFczuB0o7Q9eB9BgX7sRsUo0r8byKdGc3m4Kg6ElKMykVEXCSuPWbfKWLvrw\npdshWXY+fKxxjeVHTv23w7PuukRUfK4AQzBsmbWiN6RG75NbUWqop1kBtTOL\nF/n0\r\n=fHxo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxnY+w5hVFoCIb22XVzUMEQgH86SNf5FUpXebC+LSZkAIgTUhnwmCvUtH1FOW/R7B5GTxbEgm6F5rhCVA5kusVaHI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.0.1-master.20190410102548_1554892016037_0.2537428423386272"},"_hasShrinkwrap":false},"1.1.0-master.20190410103215":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190410103215","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5bc807ef22254670d3b85eb4f292028209986ee1","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190410103215","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-F8x6KF5C6etLzCvfSLalaYk8CjvK/gxmjE6aEiQBvffBhtWnYIjjbYR+0hiMruSy4EvZvfG3knH2WwNoeNdqiw==","shasum":"d37e7c5bc8689ca58d190b3e27d9ec3dd582815b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190410103215.tgz","fileCount":73,"unpackedSize":298809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrcaGCRA9TVsSAnZWagAARYAP/0S5mg15B6V2VTiCPIqw\n6R3upQc1DlQW+pI46yphFQTbPjWRYxpbD1obvArHeB5ewzSq3hdOf55lZhpc\nf03Xi8pdrC5fbD3GhhsWcGKGAzJ4/d79TYV6z1CXl/m4/QWITX6+6AAv1Au8\n+6zv9+pIxMUcD9YKmAFpejsq6vX4O2BQzGEwL1IYR0u3H5n78yI43u5JMVwc\nE7jdZdRU9VOfBX0JHcykuX+5aUvm3BUvfazf0qDWpuT+hobG1ojDQ+TteN83\nreUpyq8imRxNgg4L2urR6AM2CP9WftO8BL0G8CrkSiM2PkDY6pLUpj9V4GSO\nGjqsgbrGe5hbTN1yviw1W6sLUfQGALdUum/LJNMmhDgy49Qf/ETFIOfsNJLR\nr5c3sYL1p+Ae6CaJTfsx55jrnvVI0YruoikH91h0Ibu4+RD4vC4pPYZuJ9A7\nQCal+A2SWexKwifq8N+4/bbHxvPTzId+DYDGOzbDTwjQa9H5INduLuQzEqpu\nmh+jDZAWeWVeyJFmbnxj++3x8GahBm7/dXNIad7M1bKWCSwTtG/bieH91Efw\nxpVrGMYFuhcI88LDMiqYOd6Hqn/EkeRUr1gSXDsT94VgnXLcOomzdoDrzsy1\nhnxPH7mY9+sbfjMxq6Eq7mkDs/67Tm6i01bKGSIijLKSiYHUZR7f43ItitPj\nfvAx\r\n=bpzd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF+/GabSPAlAx3u505h4uRRqFKVEueyOXhVor3pXHka+AiBw2r81/WcIQwERC9+eUUVueF3Oqq8AYeOlnZCpNtQ+ug=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190410103215_1554892421305_0.5916381876378667"},"_hasShrinkwrap":false},"1.1.0-classifying-scanner.20190411042120":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-classifying-scanner.20190411042120","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"22de03b1a3eb6251fe9e7683ad50c420b5b9cce5","_id":"@atomist/sdm-pack-analysis@1.1.0-classifying-scanner.20190411042120","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-meWCFJ6xY3zEeUud/I4xvfOdMcUf+VDQrLOX0hxk3rlLBlRcKYq2RRGuZ+IPJmLXu0cCPiYoVunyPlQ5spoVAg==","shasum":"2ca0d299b50a0436d69d612b6f18f243ff9a0221","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-classifying-scanner.20190411042120.tgz","fileCount":73,"unpackedSize":302002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrsE0CRA9TVsSAnZWagAA/8AP/2LV5m+dnlr6gTUbSJkx\nb7rMS34RpYpULXYjE5QOtUH0re8TlEkinIfALEj5y8tz2BFqf/iwFilD+yg5\nqibDwTqQNVq2io8+d0dUmoRAOX75sYxOq9aS+QhCGeZURiT8rqGFR2hsLbla\ndSL+x8OOSPr8DcOs48ObNiNL1R2IHLxgJe9dHr9YR/mxdByAvszi9TOrseqA\n4yzZzTV1ykKnaFqPFHv/mnHadJqtzrBeyfI6008STqEet1wg+HuKVZ/8Aq9R\nky8PwapdEwfE6ZUNQLuCBIhGpo+jsiBvQMOhM9BQScAz8CK+XDo6uJ0hlS5t\n3BFcTEsBEs0Y2s4XivNCbkpgx9mWqK4tRxaCq2cDg7JS443CYeoSi7E5OMIe\nt76XWnDIPYHOK/JdpZGUoiSX32srPTynnnZ1CkR0JKdWVtgL90sapaqak0C/\n58VVKkVf1Yz9spiVtKz1YQlYyvlmTTZpXgNbYxDtb7ugFNQv7waV8i1xRFbb\nd8zbvPs0v6RUp6PNWVtan+CjecQtWqMA4Q/UZbFDoF84v8XI6F6eUXNZqlUo\nCcDB+F6lD73gJlp29pbZyI9Vynj+L65jEliiAZahDjypJrQx009LC46FWXrJ\nMgjTx5K23F84LLaEms2mDj+H5La+JmcVhQPQboU6XMpM1TPbDlaYe0dmwjnb\nxU1A\r\n=v2St\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGKjerOA4ButJzOdttWuESx8cySneyL1cmIF7DO0MC1nAiAlAf119TIBNy+sSCBbTz7vM6qPJztFpjLxoZUaT4oKSg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-classifying-scanner.20190411042120_1554956596255_0.5535365211078445"},"_hasShrinkwrap":false},"1.1.0-classifying-scanner.20190411054052":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-classifying-scanner.20190411054052","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9dc382335e74903a81ca82ddec6c47576e037f9c","_id":"@atomist/sdm-pack-analysis@1.1.0-classifying-scanner.20190411054052","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-zgHWcSqs2pa3K14m6ycPDJY5M1Gn5GSSih9ekUz79j5ivEc9eQnRoo05PUbas57o2pRYcbDQCY6YnhJySSRnIw==","shasum":"519fbc83d2e12f29844236c84ac4e9d93d6657ba","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-classifying-scanner.20190411054052.tgz","fileCount":73,"unpackedSize":302704,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrtPoCRA9TVsSAnZWagAA/ukP/1iFFvylPWXyoh9qP5+/\n5apcqO1YpalYzRLTq8RhksbMnOWh8mBD2S1xPHhipH7yqusoSZMWOA0h6CLC\nQ+Gex2u4+WRZkd3SMN2zrQLLeb+g4dNJ3xralyxMelUbJ8ouaqCskbQXZl72\nRxPJtXIYTpZ+NumuLdJamEc+0yWWhrLd5EWd5hQMps1V3Gi8oxUrn9rqri4l\n9Eujixv+UmBLQE1vrkanHTck9291n9gZ83kuBH7+dwBg03tbSRgPw8R18Fv1\nZhvTi1gOqCHvKaScADgvMT2uHL0ilEc8sj2Fbhia4RoHjQlRE1J2oHdTmuF/\nD+1G2mdDl9y2RhMcriPXB7A2sFY1sj6Xdzxznf35rXXM3lpVdiwbohGaps0S\nccZAzssSmiKTRyPxAv3vHMeB5gKKax+wXkeTntAxVqfwhSrcrNbrL/d7NxJT\nCfhkzCsm6hAX6cF1145pMT3zFzv2IpQwYecB1Q1uY+I0L9rSEaVtVvuuwukg\nTwb94IkAMSdcsHCpuj2WgA+XOIyx8ZGnwn8ngHMfMZJ+6jw+rg1MO8uFZLdn\nhWJYfAvTcpEBIuMEThDMpfuLydxz9vEbspid+gY9435up1wqGhCH0OYdh/Iq\nNmew1iPixY/7TDpQeQ1rzAuk/5lyrhCiQGokPWxpFW8mCu3+SOcfpYYWVys6\niF+u\r\n=0yCl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFVFSYJR2UPP8fotFWuamA8rbxM84z9rwvOHZoQiDKglAiEAskemT4YnFzwlG033M4eYvKjscy61kccdtd8QlhAFY5A="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-classifying-scanner.20190411054052_1554961383271_0.2403211991062355"},"_hasShrinkwrap":false},"1.1.0-classifying-scanner.20190411062449":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-classifying-scanner.20190411062449","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f923a1440018af295ddc32e39fcf6f190c5cdbcd","_id":"@atomist/sdm-pack-analysis@1.1.0-classifying-scanner.20190411062449","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-E7PsqCs78pfXJPhZ+5ZrZeBYE4NxLxMq9MrCMh4T05am9FUTk+CU/7JPUZj5nRjxlnkmz+mypHnYHoW7kUimfg==","shasum":"30fd792dc5e784e8624d6a5d7576e4e140740fa2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-classifying-scanner.20190411062449.tgz","fileCount":73,"unpackedSize":303069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrt38CRA9TVsSAnZWagAA1ZUP/3ellchN5iqJ7v0WXnfj\ngok4fLjmr7HsmXiiwzKLN8/cPrrsQqC4dFqf1nQux2jRQDPkHz26okHWrhuk\nmjA27VQ0TiC9kMOzPos7Nq3WSYsLZz85PKqpzwiTkKVjWBepYvonTXxVD8sd\n5bj+5Chm2QIJHGZAFVc0xpRsOZiBuPex9lvKIR1NizM27rWSnobiw8h13NWZ\nCwB91BsGB7kBh9UqYZxfyVYD7FB0gYbg1Nmymv375Y8Cg6l/WDnlnb5GoncU\naxHD2YYQdLSV4PpH5dTk/zx5XrK/lYDivWYE9T0S5PrCv1YKiJmcfInMgT7N\nWEcncuku+3hLIIFUN/Voh8x+iij13ZFVm/KYxCjmdBL2SMWzydTU+ECB1+mI\nKP9URSfx+npuN/pXl2rrRKrfIobEw84Lnxi/0WzJ1jnw39VWo2AsN1ouCZrn\no5St3oNuF6Mi+PNsdCMMU16SIqX5dpNPEawUgjWDRb78wxgHUL8BpW3pfJLN\ndhy2TPHpar93bL1oBRnzajkFdTFrPzoyv1o7BFLRobuQx299HIVpY/vqSeda\n8LdN+vZe8kQEVUMan7ZKWoP7EddRLVw/bDQBWtCwj7tt1ObY4zyj3TMddzfs\nPkIzlsgHuAt7QdaY1ev6Kl7GNkOZtvNCRg2s9oYDEHS8aHjPauvPkhnk5HJk\n8l3x\r\n=t6Wj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFfTXdDc55L06ONHHBHc2JyjzJ3mFXWEbkGSXgkagEAiAiEA4n2VvfbnRZM1gHOObiVzPAvoHkgd9OHilqFHDZeAP6s="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-classifying-scanner.20190411062449_1554963963918_0.8269140454657529"},"_hasShrinkwrap":false},"1.1.0-master.20190411064556":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190411064556","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e1c288951add96eed3a542d99c4cf694ae96fb52","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190411064556","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-yNQ6Xp92/vaNI0iYsNdpMBDNHiCrmZTbhWuFYBxqtJsljG1nZYGogv0rGDKLhw2ixClcp7GKDF0WGASXEGjY+Q==","shasum":"3a140812e4182f9bfb4362c59106109d4d5881ef","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190411064556.tgz","fileCount":73,"unpackedSize":299200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcruLsCRA9TVsSAnZWagAA128P/iV3sYDIs/k0XpS2h+ge\n3WWwl/DwrSjs664XsCMeyLbLz+U2nMfzJJp7a20L1CklHWLaIg93uf5SrKeR\n5dA2jshUwLF4yORIYs0ijzwQN2MkAgJeHgbnE2vaTNqCtYMGlaG4m/MvNksD\nFA6KSgMn6UHSO4dBnJS8/aieLZc/MzLUw8LdpFhpf8bQ8hEXPDjiWiBpR5gs\n6jeUw24j+SVg/1dcXz7n1vP7n8H7LfiudgCd86g3mWd+cp5Iysw9kpwsxfy/\n2BVXyH6hHjxluH9U6VQiqJnsmZpmyuWltu0B1bkDBXVf9zISDr+FDpAgLdpr\nE87Zc0T7CtjC5O0xYLzLpeop7eqXlch06F02evLfBUof74EJkGb9bjQ5Byx2\nssetn5Ta+qzNqdGAIb9uXen/JAQmBt8zpZcK8aa/rAQ7j1TMrhNpZ1cp5IEC\nAyfOoBYBouE7J1AUyT1zHMWtMvt+bBUpuHQYL2/U45Hb7M87lC4F5JQ0QX5i\nRw86p7fy2ODwo9pBj4stLbU0ddC7YW2ps1Xq/0f2DXTgbN371zN7x35MBMn4\nF3tavKZcBDeKji07lbgCyG5CQ+xhgfh+eLlBVr32Jm3sFGnl5fxLJvbW1QZe\n5sq8yAqQ8p2VhnRgQbo2oHvCQn3YX6oKztiEGH0gxcdkpilPIQ0D2RiAepvG\nmmI8\r\n=sF0x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhSkhP6dDNmQ/S/aPknb9PZArEx1v9D3g2G5hZ+v8zjgIgQ24mTttKCrlTlB/flWOJnlWgoJPJUvJo5X/Dif+GY50="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190411064556_1554965227517_0.2309936074750396"},"_hasShrinkwrap":false},"1.1.0-classifying-scanner.20190411075107":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-classifying-scanner.20190411075107","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7ea9d47b2f653b6cb60f9f11f748987d814fb1d3","_id":"@atomist/sdm-pack-analysis@1.1.0-classifying-scanner.20190411075107","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-dUi+06A43rEQeL+Y2a27WjOD2F/ozF0ZlaU0NKNkhaFyFKYMIgDtHdHO38YMYRQdu2IeRxMknltU8amfQgzZ8Q==","shasum":"43c38cace7929d4bd346e13b71a4051254416ff5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-classifying-scanner.20190411075107.tgz","fileCount":73,"unpackedSize":303057,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrvJeCRA9TVsSAnZWagAAUhAP/jg2sSHC//WQ6C+vYqpj\nItx67J4AB+X125zgrrEjVNCwwy0psBVn1tQPhyE2Uk6+rTRRiEn2E8hfj4Y/\nSfqivGTaRj0PCVnahPfg1obWvwGugaO2Aq+ZkjVipIrKklRCptIwAK/txEj0\nv/NT9I5jWRyfVIoSuJY226rvqkhSZbypyXqgkgK7JrzWmyt8Ciak4pJOzAzQ\nUVmhB8qIPw1bIGYUlQ8032HbuRBJgA30Ne9621PPtCQJgGQB/tk3HA7fEfZ2\nlFA0NBOeOaRxyN8CLrPYK47eTSQ404WtAWFVS6GUXny5B7KYlOkosQlzg4DV\n/Niv0IKAIYOTSdHz0crdHKY8psoODUDi1c1KisE4IYRtNS5im1g+MLQNcZOZ\nXZBQmvmg6ZMFfm3V/XkTJx+HVN0jB54MbBJuPktpSUzH67KGQ/611NI10ajx\nWQPHeTC4GXwMwZpmvahdSNIU0hER26rXC9OE0lnnAUk/fdDBMICzRr4nu7MG\nxaxjNr6+a8+Vhg2OmLpvDeYw4Eh2Qbpxaa6d7bDmtoe0xwxXrncriVb/YOyt\nI7/HgkakvR90VCoLbieXrIiP5r59yz2URwEzdzmD6pou8cyMTEvSazmrvwvm\nOe8YoJpkYJYFqMzs4BwOSM8zN8pbDLPEh80GmW0ebuF/hMHsCkn67vfX7ys6\nZyAV\r\n=wnja\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/zV1OKgkjZA6LeodiS4keO+kvOJ1Wh9qE4YGpJeiVWAiA+eYnnhZcGb39uIbgfB+0kwv8h4uX5XKGsaM41yoMGtA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-classifying-scanner.20190411075107_1554969181712_0.38816947108041533"},"_hasShrinkwrap":false},"1.1.0-master.20190411080306":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190411080306","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1843c0bd489f32a1427a5a6da0d5ba43a878fbba","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190411080306","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-2Nu0T5yE2H9UjuQRus3BlOBdZdoDMZK9NZ8Gx0zB8bA7TYZVpyV0+xw60rMd85V6rmfKuicCQPn+J+GI1FIRsg==","shasum":"fb90f53f3051ebdc29bf094dd2238c5a93f4d991","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190411080306.tgz","fileCount":73,"unpackedSize":295360,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrvU8CRA9TVsSAnZWagAAqpgP/1p5gnvGSt5OlRaUIWDn\nB9R4Kp0M/fNkgK4L12g+zBZNA83HjL2TG22OOU3zAK8WLvl9K3Zey18SjkHq\nVB5BBv5dH2n4o/A/TAhbiTXfGXGcGTCdDjT7MMg7080AVmkWW8liWeiHL4Jh\n90rsx+0NNC5lLV24s589vrjvBTMUHwWtG8dx0Q8+z0gacg78aIzy0Jerf+xA\nz/9sjU159nefTYUcq0IGYyG83qGdq1NV1FIvdRtw+u4YyNCybiHj2nkqUNI6\nuAwyXMTLjwD2tzvBzmZhyjDllUY0HYtXJzAkdqUQ1NtJZSG4xlafoPRq+Iy6\nRiY7Fqg5C7gWOcEYN6t7H8nM2pqtzh7Rd68ljyna94c0bTO3LljIEE9Tz0+E\naeBd4aC/91t/Jc4ywvlreIbypaRSjXFpWTidIQ1hVPm3tSkD2alsKo9DXxgw\nlVlp7SlZHISb1fwcIr69uNtZBiHeG4TxV0MuxnL2Ow2itjSTuXX6UBZKf8fB\nAab9+LTIILoa+UxIaRi6+h9Fe7YZ7PznoFcxEOxwj5usLlSzEAxn/jCvWzua\nl2IUH1RAISk60UFBaWWqtbUUnmAfy9TxNb7/1jgBKaGrsE+jzSaddLp6xKR0\nj2nUqXeKw/IHPCQjx+RvbKUEYAvzqS7VZIIOunLbHG0dCK0Pj6LL11MLB04w\n+RlN\r\n=K5GD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBtuFCxkNqHPz6fY6/tJAhAujG/Z3VglQIyyEUHh0gWwIgerOzThgHiLyAKGNVzovvnpQZrRxR4rjvDF88E6BVbm8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190411080306_1554969916129_0.05983041661592847"},"_hasShrinkwrap":false},"1.1.0-classifying-scanner.20190411090207":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-classifying-scanner.20190411090207","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"^1.3.0","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e1aed8b39a0eac28b16add51ee963476e2789eb2","_id":"@atomist/sdm-pack-analysis@1.1.0-classifying-scanner.20190411090207","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-rp6gaox9CyJkC13Swsz0IyhJD1dN6YUjZSYi0na+Ah1Gl8RkorweWVlfxGoZO6u0V/Cl0MvVxe9PLNiHtxt/wA==","shasum":"a636c2fc28cc62c1f8b86e7b6e4ad2575558583a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-classifying-scanner.20190411090207.tgz","fileCount":73,"unpackedSize":304213,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrwLyCRA9TVsSAnZWagAAeukP/1G8BM7CjcmcBiMyH4RK\nIEcbkdDBCS0EIxoL+JesK8Z+Pwtzrw/MCJpFodxOTsn4HdESxk1gdOTZifIK\nS4h8Eh+Dy/334EfUn5Ve9Dsex4aZdhx6tAIsTqXSBktiR/q9lHB0MqQTZMoy\nzurM48SWtQnWfdg60oA7na+/QSeLdaKXqfk9amI8k3fLFAHFLxhvo3CYmjn0\n1l96Ywj8oz23wfulbuBEu7mgv4CZVp63z68pWmVJYhQepvhHyq7nFs6q98EQ\nHDgqJCSTgd5cBIMkpffVRvvbRGhMI6dkO0/yaOgEJfccXV1RK55/6QlwHDtw\nEB1NSWwEz0MenNzZjucFGI9dUj1eIQyJtebp9kZt+nezU9eS33vphEgMZxWu\nZNJ+/G4xahGJfeLE3Pbu2jLurJFkN//AxT8Lom+Fme8KJQwCPvgWa98XjpEB\ncdtEUnmYFtlCdzoOw4FOq7nMk7j472dwXRloN9Fz+4EtmQMAvyEzf9Ih+T8A\nCWBpP2OGhdU9Y1UoN2rxQeLc/WTElELc2QmwvYU5mdBSLyl2acLJrU/9WVEB\nLIxqVX8TdC/UGPfh85zVWwXRDefurG1yElBZUam4zgmIK/pKKKrynrQFhX/m\nRbaqUhsGAsSIhT9AIXyGXz0X0ztnF7KZlhLSL2zvnnUNVAG/X0C5QVw18+SX\nqAyS\r\n=UkNL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDLp3PzkJrEOdhCa5nLlVBVsr04VodkdSZeTYsk/ANIdgIhAPCaOBXxACE9uVY1PhEg4cUCqWuWCarS9NNud1tjyoH1"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-classifying-scanner.20190411090207_1554973425495_0.8614858462751269"},"_hasShrinkwrap":false},"1.1.0-master.20190411122944":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190411122944","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6281d604c9d26a56d214305a76ecc885633d85bf","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190411122944","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-xddb2JgJCUMbyzCKZyd8GJVGV0O/E7sg7x2UT5oKq1mL8RezOmB0EM/uf5jsHBJ9F/QErfRbHWPLqhnCYKtYKQ==","shasum":"68694274a280bc5d108fd7f19d553f02c575247e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190411122944.tgz","fileCount":73,"unpackedSize":296706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrzOgCRA9TVsSAnZWagAAxSAQAIwEuWOvJzgt+ZAcVVn/\nBW/vCVbFgUNbFHq6d27l2O5LKm2hZ3jIdfCjnqCCxKY+P4tH94aaUUX5hPsw\nab/25tM/53bblmPy6M4S2V8ws/hRPj8Lc0M+mUjGa6GPoZHzTKmdt98c0aNU\nUD3/utKLe0hWjIJP2xiqXiowpe3ZWwdrstv4QDWjKUTviQ4KiufGjoECm7lv\n+mdFVaukMBcmktq0SK6ZQlYVqNl9UE6a+L6AUeWaEXx2QlyM/5nRFDLRDdFx\nlWOiCdh6nUKhp1+6D2LdVhAgwnBNel4FUSHkPx2tz8af8XmdcUHsXJXFAdX1\nj6LVhr3qSsa+ZMr+1+vwk85Uq3n/RllioKGhYeB4d14OzM4c4lPRPsMOP/tw\nQi2Z0PGxIQEw57Kwood9uvxO2uKf/x27gSZNIOYowavWRAb8TpwEuMW4Fc55\ndjfnZk7RBA0VCdR+AaeuBDZCpEqXTHbWHZJZ/0QmI74xtr8PhsTdGM/thkZ9\nEbj4P+0N96WLEDgVBwRu+5eNcucGNjqQu51Xr1UjTinuc1H9lg4l1nWhZW4e\n8xMoDy1NrZWrnk53/rb2o1913Wospi8vcJm22ty5ZgEb241ZDwmLlVU92ikN\nhhSa2yba9so81v8R9Bab9eZ9VQAHDSFzAYYBtLUk+Nv63ETVT3zGfVHEDlrL\ne5dn\r\n=efIL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDEOogJGt1Ttkg2jYjGR3eoe48H/gdkY7BxeJQ/o1LjQIhANfcWHk+aujYlzHJNGSAcGqcTfeoUjM7KpD1qX607lpl"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190411122944_1554985887746_0.9124519473441199"},"_hasShrinkwrap":false},"1.1.0-master.20190411125037":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190411125037","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1a5e41e5eb0767a57a4765c0fa6113ccd36fca70","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190411125037","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-+1QAagDxYPoSCYJAaW+iJKyY0mDSPekB+5PzcM6NyjI0711/+TNoXoFup5V/NN983d437nGIbt30FkXyjOyaUw==","shasum":"2ad76b11df6a4c18caab992725b12a6abab10db7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190411125037.tgz","fileCount":73,"unpackedSize":297624,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrzhzCRA9TVsSAnZWagAAzdIQAKRjARTAbndex1zsj41C\nhShZsISKdQRA3YPV9jppoTZLqC+IjJmIzy0KuPAyb4UL4H8RF+696Fh86/vQ\nInCSCP8ANLc5ttTyo9YqjcA0+k8eifA81gBaHahezvvQdPY44jJxgp3hZruD\nioO4BmFxegaa2Vkz4IvDUTVhLQWSlbeA3En2adi8B7BFxG3ZZ5DhtdWS2Al5\nejuFYR72D7s+UKUtsT2zrO8axB3mE8nwsAve7xSoFSpKqeddJ9nb3shgx9Z6\nnMAnHJy6KUd//qH4CfthxhIhu520+q/ypU4YiFXZ19pLUPmgobdk+2CsZfiJ\n8aaRTvaAhzRe2pFzCJeLQaROoSgLOztAWpKWCIDcP6hNjk4idtz6WOduu+kH\nzh3i4uktCgApNbV/92NL1x27S+w0DlleRKPlpfa6JMdIvcNuL8z4pWuyASoJ\n6JioTLbYYWXCOvlOqjvvLq06hr1cV06YNmIl3LmZxIbdG48jOwx1QHoVyT2y\nzmBpib7Ogaaf/VKMjrZlIzQPVIOTcs5Qi0TX6G0/zwsTVBTtWSKn0IBHmEwy\nLVkBPey5caAUp0rqLJrQ2nxlFmpddjd9tqAiMSQFMN236NB2+BZJmKbFXPAW\n9yZuI2pKceMJNd6W/ls7zunwR1WRs3TFj9j6Lc7AIYoD9sjSn6C/TbJO0JUI\nbqN2\r\n=wAau\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCukG5Suyrb0x1nPHuIUt+flq9gCf823l28NyorWd67zwIgZWXoe48MMrJMGrg1OvMHsgwkl6Wbf67HLMWFbQe4LTw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190411125037_1554987122651_0.8770711014097423"},"_hasShrinkwrap":false},"1.1.0-master.20190411145147":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190411145147","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c32405a00d7947ae5f93de3c4f23f8d0b6190bf5","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190411145147","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-XOkI1x0bedd5Qx+E6/TvsnN1/dG6r9cUCzY3qs8PemLde7cMb3yPfbMGaTjzT76HS8YLWgZ/99OKJlSToLyUrw==","shasum":"711382d1712e5ecbd2e292b2b830bba60f9e3b0d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190411145147.tgz","fileCount":73,"unpackedSize":296320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcr1TiCRA9TVsSAnZWagAAPLcP/iHITKpKwLfpaOcqEiMe\nOZs+IwvAA1qKHo3LZXHNrbmFvKEKGRrdpFIgTMWbem20nYmOf+Q92KkncA5y\nfOkrNQvw9UXYnsXN3W01HbW2zFrCWM4jtvJRjgW6NVBzs01DuvPD7OPwmLcq\nGaxEw7lzsYd4oekdOImaQ2+39lM60wEPp4GzG2fFpmGK+mSgYiC3w3QkOrB5\nPURuwzN+ziyfInSV/0q51T82l+3QnV0yN4GNXeItjzd9lqgJv9h07mLevZEu\n0Lz9X6Qe8hyWlBFezURUwuIo3BFtPOKz1yIulYHJCfjGKVtD6kPoGtOYXvHi\n0Frl5YHXGbDuj6SvfevrD0pPYwiGkV9F+K1pBu+Hu37DF5MIXbRchD9zBdgP\nKelPyMhpb4sQA4N3sAHGcinFQn8SH+2R8fO1JsePzWT74qsjL41qbEPbJHD6\nyfmn2GRnwz0hyhmVAv0ZcLQ96gY8LrMUMIhjSbzaVDTgBZH+mpp2wUK4zmC6\nyUzkhS8naePeaweSIGQdh3XTjLz055PD3h18MLf0eIfVyJk/CNZRS0GHx5sZ\nLZ8uTOXRE+ow52XuXWj1HS186nLWK4NBuU5whes/qFQ6QMNk4YzUbZY2PigS\nXvB2Bopd+tPS0Sk5Rv7hm7HlGozQhAWvz1rFcP3TzxVlylBksUrjr7AEXiSn\nS5jx\r\n=65kA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0GEZlW7K6OomS3AzTCCjt5dDwRy8aIf0rsSYWeSekWQIhAO3CCaZx15AGkUgfr/+wnkGjJi6wxYB3UTqN/6ih681z"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190411145147_1554994401355_0.16823174859628565"},"_hasShrinkwrap":false},"1.1.0-classifying-scanner.20190411162303":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-classifying-scanner.20190411162303","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4cb1cdd59991a2ee9a6c914dad822d6a58fe67ef","_id":"@atomist/sdm-pack-analysis@1.1.0-classifying-scanner.20190411162303","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-NYTgqnYd+Ie3nFeIG5SNfcN+rkEIyVZtQmvPPGv+30TIShfoj9/+ZULW29IW4jeHeVxo6p498XYuYHoi/Bh+JQ==","shasum":"1fdf98320d17a9ca2885b92fa8cc37e43a666b60","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-classifying-scanner.20190411162303.tgz","fileCount":73,"unpackedSize":301724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcr2o+CRA9TVsSAnZWagAAXSAP/3y9PDA+yjKohggGmJkf\nEY0YM6d8at6QK0/G5KfdUh3Y1UbapMyZhmPpjLlD624Swhxb9OPKhIAO+VrN\nHLNa3dGxCHRkzjt3yQwaYCmwE+3XvGTcm+3vH7ipcClytRfyRA/M5U+zVFW5\nInTEnwRuvImw5MHds9zgqR/xIcgkGYpRWMRgbc4ehTjItZWMOdIlvIAm9y7n\nETB/gjd50V+zKjfw7TyoL13RmzGGlD/EtG96PwL7AjUPEA+2Rs2yRmyKOUtH\n5OqLys23TM10PiJ+w2r+ba3QTA3DyLS/472A3WdxrWISdpjC1XQmdE3iO6dA\nmG6aObbk9YUeysfLGTqfD3xKVAaWRVQ3hfVrQ8eNMi/SGSg0Obj8+O4H+jSC\nv5rcBW7eI4WsUMaYVVvhzWdElLfT/XRq8AY2FFzVUaXyq42qqSEAxEAMRO/r\nAIQFtjEdC3UJ4iifTllpW2udDshc8cexDGWwAlr1B6RLeP//p92KloRQqJ58\niCOPUTT+9TOA8vq4NZA4klVoS3e3W4ihSR83fi5PaSAsF3DbXzalk9OLSfx9\nu6dwGZBzyGqtKHFoc0FXx6MtL7vw224jDNaRvmZ9bJevKdI8da9+4dFV1tEY\nHIw1YfFG84St/8BhygpcHNLKINvENNnbHIR5vJ3ou3ShWiKHSq2DfJUnD1t1\nWqee\r\n=5FM2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICyY2UfP91I9dQFNA6UagOAB3vjHUluABsyQEBwOKYuFAiEA+DsixZfZyEX4wJlDlKFGiu0nTNu6zUOA7GYdBCbzRWs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-classifying-scanner.20190411162303_1554999869116_0.5783856301347108"},"_hasShrinkwrap":false},"1.1.0-master.20190411162648":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190411162648","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3d418c10692ab6f5307d8d4fe79e315a63743761","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190411162648","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-EcILyWbwS6NWbwW603NYeuYy9JyLghCGW69mha5Mu93IHjP5bySX3T+W7ksPGSxOvcCOAaQ58nB9gd2ZbIQ5KA==","shasum":"b625de3b83b70427b6217f23f69934d46de60709","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190411162648.tgz","fileCount":73,"unpackedSize":301812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcr2shCRA9TVsSAnZWagAA0Q8P/jgsLVDMbBqwPw5+pe2Y\nxcc2hWEDdAX5imDp/8d0vK46yKsEaivsR3RG9UxAyzRNq1GgMZZMnMqPt1ht\n3Dloa2S59w8Qo1IyGP1fRLZCjC0LLsqxxHoZAPx3iWN1ow2w52xJvRl5ZP91\nICc6gZMTgPpPGzkEtPvJ5skbtUDvsPYosN9+eYkxBRxsAfMGLqrmqHPmPYjA\nG4zrAn9aAoVoBXeElIPMYTPBtoUzUoH4qh3DLA//P2m2BY+1E4paA7uzeEcq\nHSoaks/BhyH9/3nAFztzeXVxz6CplXetvNjcTD0F5WG9WxUaKO/e+wmJxJtt\nvYgpVDoF5pHS4Q0WTh43ciM928dIJgBI0FKlZNUQqxsG7+aHF8j7DCimqM94\nyN0d9QVSyd0+ag9M8SWk8xwYCNaMT30GPYLmT5OlnxKZjjkP201mEX2Ww3n6\nNTZzDuDxI1cOcqkPOAoB9aFUTflDxfKYnBS8/zJ8qY+kCdeQzONyna1o7n2K\n0uJ36uwVXODRJDDzKF27hvq/y+d/IOxvBlxY577ZIB+AICLiOzAXluc+lMbz\n24m2F+dG1acYZey9fI4Ccr3r7JBAE4hslPgLyXAu52cwgFdz/6eWs07DAkdm\n0eGm4fAQPgjDJHJtu4Rql8vI/+MjYeTcEakjHIHstbGgCdRUuSJ0kBRbPTje\nTdZn\r\n=PcKe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZXJkTp4Q8yVtWj32vtqUbFl3T4M95DnhYOwwRlmTP7gIhAMQrd8kyYR/dGQZSuQG1thl+EWXDeXVTB8deN92nRr9y"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190411162648_1555000096652_0.8453368135650579"},"_hasShrinkwrap":false},"1.1.0-master.20190413093252":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190413093252","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"df6e72c60577c79080ac7fd8125814d38eaec8a1","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190413093252","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-6Rsk7gdci0NiZ2qk8ZSyBOsEU/f6Wq66R4/9pq/2YaQ/pnwCMfwUBLPVz9CHiN1zZ30HN0jxJPuyvD443ZBf0A==","shasum":"706f0f8140be4a3ef11f7f9d2cf88e5dfaf98694","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190413093252.tgz","fileCount":73,"unpackedSize":301917,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcsa0UCRA9TVsSAnZWagAA2bwP/RJrP0EfmUjJ9lVlt+bV\nB/OoEtQI65W+2OYqlFV7tOQvb5mwu35C8J0/knY0bcEMIql0+XfcAKUV6IgQ\nZpxcedKkYouBFeH6cst3K+XUHFEhkMdbSJgXrzg0PdJiTaaEuHh8dyQ0d0VF\nl+gKwEKOVMTSHgUoIYUNfYnvPBm9BS1Mpmgn0OH7ZT6DEf3MGWKqNz3/16bM\n56CnUBHXY1QF6kbI/o9hh+gqNu43ax97cn7a+IjljkGQe/BFdHuYe42fCAZ1\nJxSOPR9AELIHfjiAZFk5vPmZVVyiltE7X8U3WyT9HAYFzQf7nyibCFjwYIGE\nK9jkDrYHJdc47ArJWZTQoAp2SjyF1e5xc+jl+MJ1ouQuZyH1ootdftO3UpYN\nCj9vjsxT/UPZD60UND5wKauHWsN3ups0bU8wbuRZ82V/wZwfNjnupYskbEUN\nhWjG7uRfGpNqAqOWJgNRyl7eFn1JxyBM+2w7nj+JFK/+rPevWBBmprAV4qh+\nr6pgX/4z1KH5an7x/NvDGw/OOdVlmf8EooHPOQqx56YzYDyKcVe+7gnpYlKT\nZraFgw0zaEV7Lk6NEyoO5hHSqNhJB6I4+4O16Xrxck93zVwfGVyTu7uqUtfD\nKOUyS/VcmszZy0cH3sWQDumfOWdd1PsTvuNpUxbM8rnmAPQiiqy25/FH1fFR\nxr6E\r\n=qNZq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFQDvJQ2EBOW7nfPJtUkRFY8SRNRLL6Kd8aungqWs8EdAiEAtF+5itr2j0FOdVBRfhoFWuLzts8oiIOM8H045jL4tBs="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190413093252_1555148051701_0.1673439398545331"},"_hasShrinkwrap":false},"1.1.0-master.20190413125937":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190413125937","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8c42ebd0c3026170de5b86dc62210399afb6bf2e","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190413125937","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-jfeHvQCJxleM/6h2nJv4E0XgjG0o/WnVk3lfvHpwjx/wtl5tpSu9khzM9BpgQQhraRioZPXQvGYc6uoQu/ny8A==","shasum":"e78a7a095fdcb7ce333211c2c8803e3e85e7fb40","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190413125937.tgz","fileCount":73,"unpackedSize":302686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcsd2NCRA9TVsSAnZWagAAJPEP/R4Qgj6IYjYvi/9NJcXI\nEBVqEu4JTmT9kDUd7AVtCt8t2D9BFS1d6z0mIIwXNO54kCKPsWMUiVrJ+r2v\noFt0KACO7C44+HuZpLvIWGqRvxIrYiEqkdaT7hUoxvF4AbL8XBtprENB4VdN\n/7nSlJJ+D9PH2Hnvzl2I8xKaoHL/WrPoafJCKfQcacV0dWs/Y5xUuwt6d0Jg\nULRaw5L5ea3NSI2oDUd5t53dHehInI/EHfCkbCjAbFBS0RDaY6tDO25+yuq/\nMLPw9m1N2LKP4LnFDT6iJ/6Vilq6L51m3uZcp3LYqHV3ksV4IzovrrF+tLrs\nVpr5GlBrVMTd8FjopG+FvZ4tUzrpiQKnVRjfXyMLg0ofdikpaxND2EzJWed7\noHtDxRjoyo8+DuZ59+yDUzO6pQ0nmLANdbX71i7LMKSRwVSLfmmGVaOL8K6x\nBtgyemDaM00p47LP7dTnEBeshuEP/IFZk0j9Q7bg5E38gaAoVlvxj4VI3INI\nolDWVoGhtAZc3/OK3JFxMdylXRJe2tf8K3vePLj+PcE/MxMQvOApUQiVoidM\n0gBjbWQLHWF5xMS+PAW2ZvVRCCZbkW0801mwmR2pZFNMm4d+H3CW1t8Y2USK\nU2qjwOrxo43i7kmmuXhhl3+nwijy1WI/TRFTEWSD9C22D4jFmZg5/yDPJvop\nNvcb\r\n=sJ0u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwhizNfq7ghs/uHXUu3J1ToADN760XjvzWz9D4XEr8EgIgU7DCdnSM2DqtXK9LCgZYRy6zo6OAfkB0Hhh0kodzR2E="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190413125937_1555160460562_0.31898693335488604"},"_hasShrinkwrap":false},"1.1.0-master.20190414063123":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190414063123","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ac63a6930be3dd4c88232d9256622b37a612cbee","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190414063123","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-s0/zD/j5PqG+UMiouV3pbHtZpDfw6SxrisuEOExu745/l9OnvNWXI7SYN9CekHFh8VGytKn+gMfrb0IZ9AFnhA==","shasum":"74d3af0273f3e0516d6dff3688e816e20b19be17","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190414063123.tgz","fileCount":73,"unpackedSize":302777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcstQPCRA9TVsSAnZWagAASukP/05fnRYR7XMoYdZZSO/M\n8OdV6HWFUOOm5YKUTkr88Lk643ad5VfQxindeR5sT5OEoRgwrXtia5ixYK77\nqaYPCkXXNExFMxfFsWKv28+VNbGwve2MYDsGXhIutL1VJARfzOcpQYJ6dJni\n9sORN7d+/v9Q6YPHBdW4N1r1DnXTEdqh4ihb6Cpa4JA10V3G5J14qAxhvJG+\nh+UcaDWQSuR/7bYHa280zwbX3v1Gh4145mapJMugYYkj/YIDHiT+uWT1H2Ij\nIv2uCGrQljQfje2HU83kMr5v6DgN3dcRyRRcYIszybHdzIraNZFbJYlNZmVs\nxVz1dOc1mmM/sJH8b1SQiGe6jaXBN8cOQSQhJpMFVbfQkWbfpcNmfV0DrLFN\nDNXbQw9eBmozBm+zMfqdz8cb7fpg3Jz4vf2NRlgZqRD+tOTeXLbCCLjRl5CL\n4SNcd0IofshxhMGO0XINRrO06AbW2WON//I+E3EVh1OCVLD7jk24KF/Nv+93\noZ3+/Q9Gi9wmvGsshec1j5dUVTuGv86p++/SXRkua5D78jnamD+WFgDDwwvr\nvBi7DRN3GpPRBuAus4DkoPveBPqj/sIgzIuojjY30bjfsGcgZmQ8neg5T/kB\nc9tywKNPB/zOobDz46oPUqcA+x5jIfNjqEHTJbpWUThc+QEM2m4QLMU+3Xpq\nmyDA\r\n=l5Vh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuViU/NcsADFnnDwKAGIJ7WGdOA8j8HFHIGleC3IQ0OQIhAPtAHJbztGmd8x6RgeOnFdh/LBu5wS1qHNN2gKQu3vGc"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190414063123_1555223565933_0.5332059121182229"},"_hasShrinkwrap":false},"1.1.0-master.20190414064804":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190414064804","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.3.0","@atomist/sdm":">=1.3.0","@atomist/sdm-core":">=1.3.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.3.1-master.20190411075431","@atomist/sdm":"^1.3.0","@atomist/sdm-core":"^1.3.0","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6e9bbb8581c6cf2df4fe690861c9337f6a054661","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190414064804","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-L8pEUnit8Xv6dUFHWOVbKCf1BuCt1sH0o0wwTzYJ4OsH9d1yRy+IXUV+YkUQEu4oV00KwFNIfxKAe8czSDFVNA==","shasum":"d213ba5ded2b8090c3536758f92109646c3a203f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190414064804.tgz","fileCount":73,"unpackedSize":302889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcstf3CRA9TVsSAnZWagAAiOwP+wcD2rX9dCBnz6oPvESC\n7xIltJhnVBu30zT1XFlGn8CCBBNJ54YTmmBcyeeUH+GLniveXfO0IwwL7f8I\npsWsu7LnNCO3KJpZ5cr4o+N/q59spDUU0D5V80YU8M+zySU/wzbI9i/sv79z\nTVXA1O5w8P83FPMmQNZpugCUyNfspT8SLksiTm+tU0a6cELGo9epgWI95hw8\nLSEtywqeFbQ2dJTgfir9mTFeIqnW/zTarJqm40sru3DS1wHyt+MQbBtvHxsA\nUwt/nWbDtrAI9wzmblC04qgpoQ9RwUe64p0FTf/z6xdir2n92Ryu4of8gMdd\nGMhfj4cv4wovXg/W7ms5mSY9Rl/AEmP7wPna3wFpHkNGcYBcmtyLfARbvJG0\nq3xoSSnrbsdB7/DVWoqhyijDgtqWmjyLzpgjjZW760vmI5VzlvHbzA/BwwQN\nj5uBgRk4FGuEXEBAENCueLhh1R2F8QZZxldMxDbYEXCSCQZeRgzdPXGurUf3\nrID3NAoDFyeOvmhQe2Tgs/XguW7gG2wjhrWCDE5hCw/zspYraG+ZTxopkWHy\npVX4SkZRlDqJz/z54qiIOPgmzTblS6pNS1fur6eh3AgM3I2JwCGsH1H+B8jc\nmpYww6Ie0w7zhRmZ28u6k9FVkbDAdfmCUqcyB9KWsc1+ShZwxmKkVtQp0YVm\nqWGC\r\n=LKiZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBvlFyF+SRMZfDF8ONW8ttxOpmOThxJB0AULRRCsgZvZAiBd7Y1Dg6v4fJ7Xc8LcutxdKfru25188N1O+HVUuXmELA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190414064804_1555224567202_0.7587133213174839"},"_hasShrinkwrap":false},"1.1.0-master.20190414162203":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190414162203","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"2459b5a270752d1c9f27aefb48281dfd346dc6bd","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190414162203","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-3XWuAuEa7MV+CHXaZr32ggt/sbhYxngAsffKoB3brxqo2bxsAYnXLwTFpeaRuCpAUC36Uw5scZsvqBJlsZ1A7Q==","shasum":"0fea3bd0e327e2ee94ca79202cea52e8dcab4405","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190414162203.tgz","fileCount":73,"unpackedSize":277289,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcs154CRA9TVsSAnZWagAAMzQP/3GjX3emdELDhX8E/MSR\nd0UjPq11kBJ2hqoiYDZeyqknX1L4Wwk0A2IIMTBWPb4iblUaUP7lwHq7YkS0\nzYiVTwpBV4J4dTOArl541NrfmlzMw0rRPsTHpwFPbiC7zvg6uZu/KssK3nL7\newbquNtpOjx9Rt493oLLb01hrEqztTP/tXuBDIhZdvbPAMvjxF5iE8izUvTf\nd6voh6BqlkgNizOPPeS5wtoFiv0kjGUa2Vvq3CX9KQUhqcPPC5WyroosjFqF\n5jRnf49krw6OkUn+xsg//rsEhMSVTHxLtFinEo7otH8Qbjz9qn7XhH5/wLVP\nbh/5XJhjmAzvQxsV5DzQewRukO0fF3isWMg+cwVdV0wrWA0HFZ316hFymEnf\nWcwjgoE9/Vdd0IvKs+HveFYUUtW9+FQ+/lef0P6fWqqK95toEjSuj4ZyoUeK\n/j3VEjozSmy8/jqFc1PLUYN0BY5M2AZyUkhw4AyUYyeTGzy0qTT4l2BwmOU8\nLJ3sBNIPuppwtYI5udEU5WM9qjvVskBnGIRbKdQXry9kfp3Cb6Bv/WmYUSoy\n3iYIaquF/6uO/OgTCLlg5ugARwGcchCwbT/PzUlhIkPadN1CNaAkHSYGTaOq\nPJRAs8Ty7U3CzIgQ1cq65Ixh05k3Jkt5VWyr8R7HzWy8qXh0fA2BcCpOKTzm\nexCT\r\n=VyC3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkT5wGA6akBx/9Kn7kwj7xunIAqaAdCPm8K4CGOebk7gIhAOO6wH7i//Hpdmyw1C5uqweAcRexNaxZ12DdVMlggI8e"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190414162203_1555258999257_0.5328311945641049"},"_hasShrinkwrap":false},"1.1.0-master.20190414162530":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190414162530","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3d39dee92db081db9a8b0f96db7d88d5c5eff70b","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190414162530","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-lD9NXDlOV5DbCJCPLoo8klfROYCwU4OS/49Cz1322/BSCUU5m1aEUJjGtZBAMWl+zzfO65dg9VKTfv83Nz8/Bg==","shasum":"c8721ecf28c3f894909365ded62b588d93692778","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190414162530.tgz","fileCount":73,"unpackedSize":277290,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcs19JCRA9TVsSAnZWagAAQHoP/0b6H/pk5J+XyDBgtokw\nI2b4Y0ibD4ym7qfdGuPxIZHZWE3nY/RWWwsby03uUZroSuMy5rGV99Jzuh4U\nU+dLdxmu1B69lk+ExuUz6eyUNLEXZdgjZJUqPixrqp3S0gHjMRR+kmIeBaFv\nrVbjafwsZIUPE03fEmkVDTzWLbvLr7S9G3EUiw381uZFQXB2sgHrKvfJVkTX\n0g6zJJV1WJFb/GHe/5u4mw35F+D/PUmPrPPVLieNnr32h5dL+9jNu9DSB02t\n8lhGdSdx7OTYh+1KZbh+Hewmo0uULCUggfvHZBKKXMKI6mOOI8D/tA9ISxQq\nZFuZ4ZsNWLEFy6/FUCmp6L6AwJbRVjluma0aFlbIdQZY8GwkCDuKmQ4KT5Wd\nErpc7N9hYPlbLbt55AqEteB1YDFU3RatgjhvijBCU/4msqA1aRzhXLwTkj3n\nZrohUPcFEaKQZ04e68PnZesXcRlmIv6BTAkFHYX2U6jmFXm3VBKFiRKKBhFj\nPaL0bkZFaEjHSmTDdMGV1IWl+fYOam6k5pdndWxfWWbGnrmvD4BiMtgNLAZV\nI1PAs4tD7jwdscZNz5gr6t43N7/4TsHVXvW1qeMS4FJDZ6TUXjVxN0SKMct/\nSALybedIepOhpGKV+JPBqb58Qfbht1ft0znQ6Uqh9X6/UAwDHZe/0srN6L8T\n41LP\r\n=U+2B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYkeyhqH4/DumweU9JJAi9Xd4l6NTNoUCJexew7XOwkQIhAOigqKvB6LALPLqjrA78/xIXLn9DHeMYYd+ile/WXNx+"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190414162530_1555259208548_0.5161835436673059"},"_hasShrinkwrap":false},"1.1.0-master.20190414214804":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190414214804","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b35e9915999046faaa8c11022bdfa8e6f399b06e","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190414214804","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-TAJqhja8qbAPW8sgjYDc1etJWDR6RnrtBcoBuEiQgE2wjNz4I44hzznsLsmnb4XRZ4VKTpTV93GkMWido/fZ5g==","shasum":"274c2235fb409bff82635ea4b367a1e57c8cd3ea","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190414214804.tgz","fileCount":73,"unpackedSize":277614,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcs6rjCRA9TVsSAnZWagAA6kcP/jq7pEKHkygFtGLHGdVP\n4s8sWG6KABcP/y7n5T01yMaEpgJl4X1IWexjhQTuZhC4/ovt/CrdEeVRYnG1\n6jHQQqwLYLJAJVfyhCtfhJvjtVCfNAD0QpQrHXJZlzyVLdYVGIouDNWfZm4j\n8u0ba76kZdGrX7wtYi4okcGX9yxewQrlrxBaebuRtOEJ/eQeYuCMDGDrOC69\nWSekExpqSD4Faq3rI0MbXQ8vTSRXZDULSTMV9HcifM4olpnRfK/XYsvPr1C8\ngoEhdfqnPvqyizsEiLR0sdj8PZITylQk5TLftxIqzUCy9MWGks8tuDoYSD69\nDd4V9D/mFFTmyCAPC2QgnSkTk6E5a0ipYQl9XeGSa7A8+vTmef643YcvoJm6\nZS3Je+Vax2RCzeg6mSR5nnAqZbiWbX8FeMNEEI86BLRJ1u9LeXL4Hg4QtNef\ndRbTygxqYakhJBUb3Dl0Tvss3GUb6M/iJ84nL5Wqo6A0T79LhWMZvKh7gp/O\nSRZhWc81SiMNSlCwVwiEa7fzl/de74RkQ2lrVzFtuBMvPQQv/Q5Wv7VmUTNo\nDOgDYCMD2bKQ3hN0xE3izhhkB+B9yunAjF8OvuKaDzD0QOdW9tWBxCH6RuRL\nsy/4zmYfVDAj8XhDAh0a/aYxtBRCv84xO8dnDXR75/BMlRet9Y990BKs4jgV\n5JXl\r\n=gQVP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIETJWoa7kdzxIaBMJVokKuu+tNi60GHe/xsmmXI6iHS7AiEAxnr7rLJw2lSBYAxGRxUZIpHKWb5pxGjEmH+jRNWxOyc="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190414214804_1555278562645_0.2697587619649864"},"_hasShrinkwrap":false},"1.1.0-master.20190415205523":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190415205523","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7f18fad300c89a44762f0f93ac2622ead3b91976","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190415205523","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-T9H7259mPiexbDqmACJfhAlWUbnnk/xQUCVO4TSc7Fx+aJrLSg5NzjOdsZdYCDfobZi0qBY8J4RqjhOongzdOg==","shasum":"b79cd2e0c2c44bb2b9b6785ad899b52d5f8ab1bd","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190415205523.tgz","fileCount":73,"unpackedSize":277277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctPAjCRA9TVsSAnZWagAADgAP/RwlelGW0pqbP1BXsumd\n/4SGE5tb0HQVTo5fiwa0QOsu6EBjVNzCybx7SLhvqareBgKk69KgMwx3v3DY\n+Qa4p4FtIm9JPwVizUlMaGW1X1mGZ9ahhFU2aSguKnucjd09KsV2StNcr12o\n0ErZicMTPl6VYsorhSI7cby8hyphg4biKj84amVzE1y3ax2bBdv3Px7xHuUQ\n2Q161wXo1yyccd+0Hq1p8pkwxjc2MMb1bjnWxkjzUtNhDO0iSTQToBLnaxKX\nMCJnU7wMbE/aRYa1aoUobvO9liF9te6Y8Ut9oUr5nw9p7S6WCoMtMrFxsCfn\niqtzZOncwx+kvx1fWkm+s1myPfhvyNa+Yp41cbv1C71mDP3Y4EvO5WIhm/b2\n3sDVgCgMWO9woIIE2ZOTLWVpoIKA8A9jQdxEDA5mAvXXgXs8Brb/EFj9RTlV\nQspY1Wo/G+vShSYRnAUURnEI3Lz703xuwa7NEnp+Mq2f0XJ8m8DX8zs/Bo5T\nbEEdgPf25IEOkJduFjN/1LuHtlzr5U+3Q01R3kh6gqXz382sYldBFgjEN4+P\nGmcldZxGWOwlaRMQ7nrN1x77X0casFuv+YTXHvDNCIH8B13DsytaZcOrsxR1\nGnIHnXz90MIyXK4xLNfOzS9t1PS6hVfn/b7jgx5/mF/ZuvI1rwpLecLrXwXI\nUIZ7\r\n=ymGH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDMrh8nwshcKQnuaRWw2N/4R6bYweujwqXsJkhZFMvUOAiBDCEqylkuFIgmbyGutD4Q1ld73qQ/0U6nBHEfuoAaHtw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190415205523_1555361824187_0.012009562153311837"},"_hasShrinkwrap":false},"1.1.0-master.20190415211240":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190415211240","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"51e050b6848d97cbc3284d951e21a40e76cf0869","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190415211240","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Vby2NJKTzBGng3tMXOcNIJlxdg3z4CaoOYKEvO6CWALukcWh0dheyBGBrIQIBSQkXgwR1mrzRQSesNSzCAa9VA==","shasum":"cd3f1df82d1f61940ae4a60ead3b8ac1e8e9ab76","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190415211240.tgz","fileCount":73,"unpackedSize":277914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctPQXCRA9TVsSAnZWagAAdaEP/1a5qyto3HspWfmqP+IA\nYm6kHM7Hz1m9zoiYKNCZtFBWcbEH7SQHYfkxs/poy0FQdseI/b+qbTGS7GIk\nzOMTwt6hEoiR2zimYyOUgkKSW6cnJSVP3zJ5GsF3/E4wkbUL90+KMr2+Fyhh\n6dYKmT23VhQBjrV/W+b8k3L466Uk/92gZJ2PBW6uKPzd0dgWRO2D++3pNReZ\nl0S+X/Bf3eej670s+c9418HwC6VMx1pBfgNQQWdqgZfljk4KBPyfZQ64OesD\n3+Q5n5ZvrlUC9EDaoCkdKQ1XOOqdfMfnO71uOkWzHr8LRgOsgGKaFGUhfAjb\nKJVR/xbValJjhIogzN9ozVIwmctMPnxNWzcHCoxRhngCw29OIVAWW7R3BuDS\nWrLVk0Ja135padNyURaGQ610Jt0Zxnv19OXFzHoyi2eNnC8Q4UhAsq3r9McO\njXvTMZ3qJpInQ44TAQxCTOVFh+5ZOE1m3upDgp1g54/+G4NEa3ira/DyS4oY\nJLabonSxAXQrp/NilHS3igwZ1nNLunzxtsHdeAFcluVM6de1jeBhR/SNF8ji\nCIfaj3f+P5wcTa0wgiDfW60Xlw2c/guVTq/uHGI6kckzhNkRIbO+9SKC0+Ow\nImKI4X/U8yTK6sXTh423KWe0btUnP/h1jb4m8gk2GO7OtoQnZJSXGWSF/VeI\nFSOg\r\n=H+eF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE+d/7lxInQGgEd9PhkLATNg80cp+T9aJlFDaY7Kj/WjAiBpyaLIcWe3thM9zEiZPNf2l4Fzj1RXkh3onHE6eaomQw=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190415211240_1555362839242_0.07129218474448162"},"_hasShrinkwrap":false},"1.1.0-master.20190415211518":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190415211518","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a9d3cf8c292775416d7768aec054af0bee08e27f","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190415211518","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-r0civWwe0WGpjNXfoVn5Gsyn1NIJDljFbTvmnO+h/wFbBVEMYrjS7MrtAqQlArfk90DfqTcnbMIhScoonDgQDg==","shasum":"74cca27badac3a161d0a62863442d43dad8f0d13","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190415211518.tgz","fileCount":73,"unpackedSize":278386,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctPSxCRA9TVsSAnZWagAAykAP/jZleBfOClP2f1n5Pj2X\n1N6MoZTqq4efO7nQmhyKA5VIi5tGcv0QhrlVaVEIyjoLcpB9pYoPh+NYvBaz\ngl2LEDEmnc2hhKbRwMkze1opXGVoaCsocmqrIsradiVReIO0NB25voXfb+ur\nMnjKqXt67oHeHFGK+sSi4XKZRSCwMia8seCg/0JWeh0jjEq5as0wPWQ6GfiQ\nqop9zkS2EBxVZMLwBUXZ2WXYGORbuimp5oD3rQqofyzgKVg094KxmUUGI02O\nitff5HXnDmKAguMJSwCOy1bECffECO8yQL2vAOU8z6fvShLzvEw4q7hbfeWC\nDWjmE29ZPdK7+oMT/3pMcW+98DaSResFawzCSYFg1/8uvkoufN6SP9k9IdxX\nBjgs0SSOs9bWCBs0TK5TLV4Tg06wgx9iIIgnGYQdABeMMNEnlHfHMg7Xnmaa\n6z9fMgDYOoFzJb5uCLDtCTmAyPiUig+Fq1ZAttaw6BgbDebIseulTISV7Wl2\n1V5qwrfacafKps6hO23BJE2OjavZITgDljycg0nUKdfvucYD5mUda7hRZFOe\nCHOOuSoJtl4CMp3tLQQuP/+LhHNNp0rs69tj/eCnKSWYPKhNfybZXswGXCvV\nAR8F9t8AV5aETqq4sB5+/U15bz2TqbgaGqLfWADz8FC0PQjb+rfVBCrWSvl8\nRTTU\r\n=7tah\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDfMzSCVkE+rWQDctFsHEPHZYTY531nO4rnpOpNhnVFYAiBy5MPsHHuqbdygTjY6ih1Sh3Nw/cQUrC8G7qLNwCn+tA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190415211518_1555362992313_0.6841111183575868"},"_hasShrinkwrap":false},"1.1.0-master.20190415212229":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190415212229","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a3945e8b47dbf74ce3e2648d73dd145ca2958340","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190415212229","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-U6IuLi5qsB01O9ofJb+ehOIdFN2vG93DvdZwVGA7+PwX9GWBrJWyM36T1BnBBXPa3ftB3adYHjv8ZszW+mcERA==","shasum":"c06c93810c2ad15d40cc5f174ba033a524256b0d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190415212229.tgz","fileCount":73,"unpackedSize":278818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctPZlCRA9TVsSAnZWagAASSsP/A0NSRPtWi3AoZuoJPS+\n4TI/wLbrQ9i71Fo7OG8qsp18CSZaZSFEuemIEEh57sHgrsq9OWYsN/THFjoo\nWq2iNYG55iw+h8lUHvpgiRguh1SwV6MJenhOaOoN+BSbW5I7ONMbqWo7uDq7\nPM8LvAixlpJiE47g7H5M3uSZHDOs8XnX+oLuAAuA1sHyjZNUju26LsGJfnHB\n6XA+95x94I3l617eIgI6BoJnhHpts7ly/cBiqVEL/+cBreeuZCpTLewq3NLM\nTdsL5nsdVWs58CzNan92NFH2x1zMbESFO+jCoFIBHK/7zDEf9/wt4AEu2G56\nqpQv6tVXdBJ40jbo4uNSV4XTTkBe3Eep9kYk0Vx6cC8Ke6JiKOwthFJjB1cD\nLv43urTdYtDo/LweC/FS2NV7XqkdWLOlmDUU4qF/exlODOjPglQvsKoeSyjE\nyJZ89WhMlSUjRJN1M6hhOXe1fty7nzNJelj27UKu0E9Wz4txexR27+oilcW8\nwVO/TcwAZjovEB8vCr7VBufDZTRrkaj+8H3aecRx9JJXZUWt2tUKNHLke3OY\nvG8pEaWA80+S2FHvOxYaL3NOWqO9K023pnIj0bISMkOTq/AR6FEGldHxXqqV\npLvwpD0tRDt9HPvnPl/EMLmyTh+vkruv7mqTtfNJXUN0+3C+hLqLUt9LhapM\n1Hjb\r\n=K8Cq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDD83tTQzcUZ31cNYfDENMNPJ2uBV5m+iF0nJgj6jc4wAIgJcJFbvcaLiwDL9He+nKCzQTLnxYX1emS8+AJJReqNr4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190415212229_1555363429023_0.06498277950593301"},"_hasShrinkwrap":false},"1.1.0-master.20190415212943":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190415212943","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"544ef3a255d6ddd1c5385789467860a275e755dd","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190415212943","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-diw8tZ7sddcgoiDOhWQ2sL8H3Bdniu7nYc/fCn1y0u7NESBkkBtTUrkZCyXONJYVskAvkcJVk5T4oJfu9te+8Q==","shasum":"6d279a6316e0a057d774af1100a884f93b141249","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190415212943.tgz","fileCount":73,"unpackedSize":278741,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctPgWCRA9TVsSAnZWagAAv48P/3OLwxj647MpmmPPQ9pb\nc1YQPOVTt0QCd35zq4zm1cWgFE4BuND9xY7ScebEi7IIcpFsEi95f+T6tNVO\nzbr8byc8nmaDeduKAkvGAbphay2gZJDzQLRHrpqx+48bj4MDZnyYpvJnUxyK\nNW9RdSBwnKKLFUjEW9knm2Zyk+oKeJe4FlWSkQ5YX3Y1V5f2RkZOQ+xw4A3C\nwKjREdN12vL3FfF8HMKERaGoMNaqxk0USnmes1bKhxOCyT9yYKqL62SWvet9\nYuPJ020wHGXshre/YAp6C+uiGB+LV2fZ3uIv5R2SQt3oyTeHUOJjN8rq/Mnc\n9Bi3gHOeUhCdUxBkZ0v0VDdde8lRp5ryoAsQud3rXhiHoeyBB7EUSto1yDPO\nr2P4tFVjtOVn044lpJrUP7A+ohhxmpJnO8NulFXc2QQhFkO892iB5ua3Gqrt\nZsyneLDAxZMI5oc/7zCoVKJocpBkRb6Cp7KYPo47Y4uTn7KbizkZox4C1afi\nKs5vY4frtaggLV4NKpbvEdX8ZVpl/aXcwz1uRBNL8ni8YDhiTQQaehtylf20\n4L5Kn/+fhFzrulBEI2YQxSeqdnU07AvOYE2HSSP/MvLTi391YmXrp6drsaCL\n0+Iyr0jQwEHoI6yshaHhfHZM/86XSmcab8k0asOiYPEP443XbX007B5glwBc\nT2G1\r\n=/m+Y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBDsy0b7Xf8dL3P900YEGt3X3SfFnYkJYT4dsgjmcO0KAiEAhpxmqslXJHhskNIV1avaUZ+66dAHwTDvHESwgHd7uRw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190415212943_1555363861944_0.6945985746773959"},"_hasShrinkwrap":false},"1.1.0-master.20190415215228":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190415215228","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"7ce964c234b2a8e50317de3e53da406abf89f9b0","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190415215228","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-fMk0P4B3O/iVu71YBXJ48rhkfAOz6qhe0APgIvbU/KXR/Hvn9orlx0prHjREgMlfzj0xOBGlv4iLISTNlEbu+g==","shasum":"96994018fc64cbcfb76d41f8742d62231a02bef7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190415215228.tgz","fileCount":73,"unpackedSize":278804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctP1rCRA9TVsSAnZWagAAThUP/j2mwqYg1qT/qwAbJBEJ\nYbvZafkn2T4w1y0vgy3j+P/8EoA6U3uRsT0rq1wSvN3sq+fE3Fzj8QV8AP5x\nFIC6eIjTR4P+vW/OupUC2JRp2HOc0Qw3ZxBTxv6rjFUKbEcjYkjgKk3/skJ7\nTpdDH0Vwv34HUZ37N18rPbLfXUhxy+hLVqEzn+jdA37ZCwcG7ftIJWxJwb4E\nFqnrl6bU7NdO8nnJxn/BCP1+vtKSa7c42TbGa5sUyJU8crr22Oq4UDoqE4XK\nJt8bmBstg2JDFpm98Df5cejGZGX2pgPz86ypfYSJOIlIZwSGIMeOladSaXcX\nXGZxJKBcM1ec+KBu5X1zcKLpsh6LKq/GLNuMQGzWDQrlzoghRAWMNTWPHwu9\nAk/lIbhqKF7h1WAKTlSv7bltN8lUHi14BpnkCQZX+i0o279O+TCVEDEFNT9E\nFWL7XN3EsAGfqq7F9DaHfUyHGZ7vdSm6VC+cjF/ke2tlUlX8be+YxzI5sPjv\nhKmW9+KuHc25bVZFnEDdBcctbW1Of2/l3H1PrD+zgzGIeP2accyx0dMlmS3B\nkU3V3fGJXLTZSblAUj0dWelPPBr+MXuBYnwPm/DcAnIJVx0Dt7ZUvwRJhcql\nYhDYkm5GJvzpKa/adr0Lh+bq7wk6/xL+ZiYqlI9oN8ti4GoHsNZEIDD1sVSv\nIsn8\r\n=0rdA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRMHYHrPUdFtsChNBsJ53ZBpvfECiBwnHzi5PjMnqC0AiEAu2IKX0q+P2lnPvSCCRbikzRDixIg/WMe6JYYy1nUJsk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190415215228_1555365226334_0.882089618276765"},"_hasShrinkwrap":false},"1.1.0-deep2.20190416043139":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-deep2.20190416043139","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1c733550a14f907ccd202de842eae2594e2b1a3a","_id":"@atomist/sdm-pack-analysis@1.1.0-deep2.20190416043139","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-7posD3jvyTjmp8Ch9C5703XrnGs19GE12iDLuCWHIhYIfuCBXBLKpJUNrIyykRwBjsAD7X5oumm9M86Otj5sag==","shasum":"748de3637705f3cd7e88157593bf61a164c3b6e4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-deep2.20190416043139.tgz","fileCount":73,"unpackedSize":281073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctVr6CRA9TVsSAnZWagAA99kP/iA1vX72RyD8RCOobygI\n1FnTQWaDm++cNAWHwm69akj2BFg8jRjymib1saxOIU9arRvhqsKxebeydCNH\nama6sQRa2XRxkhfxRZ2viRNBM20c802kIj37O6AUGfbovHOfEi6daw9GomcS\n/JEUVGR1TSmoMtvkaL4nbPvVfSd+EaCIubQilcGB7CTbNNVoduiBuJ/7SSHS\nCiy3nrFPtDnl+BYVFivj/a6dsxWiu5pnap9aVi2aJ0SFDu9V69kcLFHf3dya\n2YF85vzLDGBYR1pqLb2J8P/7+eIGXp8+W5xJaCwDT6WGKgPgdX+EtW9cD/Oj\nZQqqg4pw7pmG9h0Zb9sJbwej+U7TLoO+aYdzFQ0MkB6zL/aOMM9bgCJLfF8i\n44/sdT9j2i/QTEDmsqCMoCUb6AXzFd5FZ0ch5F9sZE/JF0kC3MLv7ZFQENw0\ndn2AkZ7oWhy8Tp3oXHj9yJJfiFrLiEPCNoHO8pKDz2A8hnfGcfBhNCWZMhVb\nGFDCpNUfqQwKU8F+pCwAZMYj7bC4/0ofp//91z2mi4HqowVfEKeJ3boI0Xzn\nVfAx3uLa8iRtCS0Tjx4tavRjPAkvzoI8X5IVZcC5E8Fh+iei923szZV0qBHV\nn8f6aDO6hnAoIiSg9ZrHObZChxBDl2vZTzMOX5EWYXzVUYCay7QQdJ3722Cf\nqzaz\r\n=0yQI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjdNd8tlyB0AQbW3w4hijSANno92EkfReaqsdBGt7jwQIgRHkqkmCkfL5hLmk/b8Y9UXtrcuE6X44Ddo2vXyIcaWg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-deep2.20190416043139_1555389178090_0.0693836045067433"},"_hasShrinkwrap":false},"0.1.0-add-tags-to-analysis.20190417103400":{"name":"@atomist/sdm-pack-analysis","version":"0.1.0-add-tags-to-analysis.20190417103400","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.1.0-master.20190131044730","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"*","@atomist/sdm":"*","@atomist/sdm-core":"*"},"devDependencies":{"@atomist/automation-client":"^1.3.0-master.20190203162633","@atomist/sdm":"1.3.0-master.20190129205714","@atomist/sdm-core":"1.3.0-master.20190129203235","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"0598f634ecf0c1a498b8abf7f86bf0b384833dd1","_id":"@atomist/sdm-pack-analysis@0.1.0-add-tags-to-analysis.20190417103400","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-QVuS/wfovNZvZzJW4K8rXvmyMKIOuWqR/Cnh21RFZIdp6KsUNHow3BIAYQLKVdonlH7BtiPqY8+pX9QsInzBdw==","shasum":"986638a91d269aa7a054f4914d1e35fdb88adee5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-0.1.0-add-tags-to-analysis.20190417103400.tgz","fileCount":73,"unpackedSize":656205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctwFpCRA9TVsSAnZWagAAtCkP/R5Yuxx4q3M9YuN/Qa/2\noLT/PR5WicaMpWLRX/Wj+5RduqkYqNK5Z+MJk9BaCgWPDZNmfP7EmG6bngp9\neew1bI2cD9AdgEJlmHDCVpVcgoVfC+kZXP3Im/pXPCQMkJiPB+jcRMc7Ma5b\n14NVeCYzlUEQXmQSO+F84XvfwFag2eonsIJbejrLpw8VupYAEDkoi+oluIrY\nELa9r4HPPkc68QEGFkPl+QBvj7T060KjzYVbX1dvGrmgy8lgJzL2JM12nEIh\nAAjViaOQ4aNsKmrbZttRiCk31cxexn7q9Uyy1U/o4YcRIpXROo1kffLHCE31\nvamcc/yVWmhM6HyZ8nedjXKhjtzcWZqRaRiwgubdNrtrFgUzsS+Zn7DsToPN\n5jwEoB9CIKO6rtWDPOZkd9W9jTCKp6KEW3uyrkKhJUDRlaW8MPNBrPf2B3v0\nCH+RmnzD4JSgYa90iviNqRWz90JZ3TFHFL+arXgHLhq0z+eldpbwMazpgQuN\nrDAL2rqgdS+mrl5bvLrR9w3R1XLR8O8zaDPJep2d1Fa5xJ4gdIqrRDQM5O13\nBOGiiWljQpMpbO5xbENTcVlNzeCMYLvUt81zxvDd1DuyGcR3k22dM/ZxaNdo\nxfnQGN2aYv/GQrrHc52eTUdaZYGK6dlDyPnv1embtk6PFDzcPq6CeQrFqI8H\nqPzj\r\n=BZ/D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDtdlSv8geStqEsLzyA1I3cvxSBGrzAS6qdjlEwnjs+yAiBn/eT8u+os4bDGGUT25tDt3ThLHC53JDwiEsQ71MYSLA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_0.1.0-add-tags-to-analysis.20190417103400_1555497320874_0.13942760902773244"},"_hasShrinkwrap":false},"1.1.0-extend-condition.20190417114055":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-extend-condition.20190417114055","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6441ea5f1d8cfa143d6476a01e9651152635864c","_id":"@atomist/sdm-pack-analysis@1.1.0-extend-condition.20190417114055","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-zLaExgblT9ISD2I3z7c0l888epFpf5gJ+6aVgOdSa9p0j/2uhXijQdRNUZtCE81+fKzWK29WP39Q+UUoft10cA==","shasum":"518a56ebcf4d3962e242ad5cd3dc4b7cdc418678","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-extend-condition.20190417114055.tgz","fileCount":73,"unpackedSize":279356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctxEUCRA9TVsSAnZWagAAhDMQAJdiZ7mW+m8D6TzIx9am\nBh4eUvjlH/eVA7fvUypkiX755WIHaEnfUeCkFVa1FUlt2+PYdH0nmb9I8y5B\nR9EmW0dk6TYoAxbOwfnEJ9KDdJJ/YfwDmGk8O3LhHESw4uG53d4uK4VKWYuh\ntP7TAKYjaK0W/eE2JTngoRWpk4OFLZsqd5zeHAPmY4oOm7tDE7dff0eIred5\nqq/ytQKVNykUMBdw4ai9RfynQSEdsjRrue81kxQVbYIOEihsy+GH4fB44R4t\nTEqeDup5k8qtKndjwMfu43kaiY1LLj3LadyfZUrfo0K3FCTXRG+4tl6aBdM0\n9J5DfhfJ6Opb832s0lpB9JwYW36pSUUdhapMZNL570q8HnvLpTuYzZGM8ufZ\nHxm9Kzd5v2rOIBnU+IwDZ/qedO/eW/JggkeIR+AxMekM+7pjT9+ao6pYH3q1\nQ4RhYrc3yi5kaMsgGdxZ8aDAt1ycCvITYdvEgHmS17OsyB5BdyBiS+0grzOl\n1yhupukcGX9pia6ElaZJnZoO7WyBmO7YOnDOeFoVCLMzzkkhaebXBjh7Nfbw\noY1PAHYqe3I7igWvKVVKNzIpHihyyF672zDAquQgjkJmTT+rkW2pgsckTYu3\nFjMrbUsBUEXvW/KQ70WeItQVdwiQmZv86N7vqm3i3mZO+AZZs80gTJ1R2wJE\n6BWl\r\n=a97p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCirb4G4/+u+SV+reTEEhFMORqAD8yYpk2+44ajnrbqiwIhAIXglz3fENekcj5gPyB6R12Q+w5yZNF9fiOANreKIvvh"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-extend-condition.20190417114055_1555501331818_0.2181951149649175"},"_hasShrinkwrap":false},"1.1.0-extend-condition.20190417125413":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-extend-condition.20190417125413","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9bf84ed94faf5281bb35f306d34c3222cf21f3fc","_id":"@atomist/sdm-pack-analysis@1.1.0-extend-condition.20190417125413","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-9jRw3CUihzboU51Lg6SAWbmMAX5O6tX+2ZWMY715XiaWEC34DGxiI+Ynwh4cCb006QLoJPgz3Vq0v8QPm/V/HQ==","shasum":"d16e31ea760f1b4d73a1e1af2a55513319329cab","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-extend-condition.20190417125413.tgz","fileCount":73,"unpackedSize":279384,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctyJLCRA9TVsSAnZWagAAGsUP/jOtaxsoWt9JoV4rYYm9\nMCnq5tHhWHF12uhHa3vjywMeWaB0e1Zk6h1k00xjKN5bXKw3Kmi3nuTCGgoF\nvqqdYxZNPPXeIpW4D5aGhXOFBilYk1gtpu850FGn9CAOTrbb4SVH31vEkyr1\nu8eMK5TSV264oY+PEoPr1xahPQtutVfYeEfm2sYsVcrtJADjsLTVbcyEAu4z\nPRGK3kgaxuAifkrqmzIxxla/XAMfqf0P5df/TuW8iEV3Eu+G3B7YdaDJMIqP\nGrnRjzGKOk15A5RT2VNlyTkWgifgg6M1jEbuSJfHM23eT3SsPsGhg3ZLCI0d\nJuwNPy57B2Pjs9nrMY2fnjU8f4Y8DSzE/0UmVGnL0RoBGE/3yTIXv63SqFc4\ngrR8ZGuebuJ1cXNhDD2m7xW9JDbSwZ5esqO6DPpdJgtoGAo93g/K1PAiCMFZ\nYca9nsa+Lv5aDTVtPVYPbkmtWxlr6J1hgpxdcGfAYfB4rcWZTCEJ0WtMDgwK\n7cb5JyZH/1yLQ2b8UL6pPZR461XEWQ6JOtlKYpSFbmAFLmt001SiTOoZS2/l\nEZDOJGSBHnwz1CTOsmOsXszk++kPjLsO8OSNP/QdBTO/ZL6Nd4JDVy69VSMJ\n3ra+P17VsB7A3lyN2R8ZDGD129+BnZEr6cMpw+eIrt5j5ggI1n7VRgb9mc5o\nN7ky\r\n=2u4n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCngqp4b6r3Tg4HM/7FRgNvEH/znPFj0PtMn4VzbDSHRwIhAN/bjgCxT8xfqasCLaQUDgW//IAvPNg8jfFu1VO265Bq"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-extend-condition.20190417125413_1555505738978_0.8137038379699997"},"_hasShrinkwrap":false},"1.1.0-master.20190417222916":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190417222916","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"69315f6e68b4be25a08acd0cf42188ab908ab259","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190417222916","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-kAdl90rcKhwTILxlory92lJ90bcF7opFDkYDiarhY27lqADKq+iaDRDkDgOyIRMp2WkfyWLHmHkQD/wFVEF2Sw==","shasum":"283e9046e5311976bfdb32bb4287cb99fc148090","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190417222916.tgz","fileCount":73,"unpackedSize":279488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct6kGCRA9TVsSAnZWagAAlGYP/2Kvqyorn3CfcrxBw0S1\n7rblNnvUTiCQA+XNsNjWzqg/d7EmZLHWto4QBfrNZxs6MpGN2dl5x9BCgyi6\n3Pq7I5ntg2rOHNyh5G2M3e3rUFVhsst/LJGNa1YdooXZjRJz+GPnDEVy/bts\nZwyRWGQG2KTlUrXFbGd643KPX2HytjSX3uqld6i6h98RNVnbBX2LCaxb3Jtx\nGLO4BkYUCI+8xIZVaFqGTkoIj4+T3TUPcQI6jKh2WIeSFKQqqje7CcnPdFkD\nhgbI60lT7QaSWyIV139XAnOsrJ+HUEvqnXnPbnDSf4Ek7jNjzYVBmcDD5HYd\nZExRL1c/ZompQahUTCkkakzJqTsk/275uTB0pxQ2tJjgoJ/im/KjpQ/aw7KO\n3XKaSgSqJyobOd2qUJ3+YMABPTMQfqyXHjfkGGT32R3IRzCfAdB0pk0xDSfi\nbWvPkeEbaBuKYybL8MjGOkdswtuLP+67t2Qz/I1lZIOj5l4lNS33Yejb6pc/\n+aO1Oio2tF/z2HHGAmkE3HAhwEgUjYd4RziUcMK8026oB8ydeiq2gaFv515k\nSwowVVWJmHVp/7vTzwrilD4V57GM4S59EM01DUq59mqcT354/kcx1asoFbcg\n5Sz2VVk15kOsCk7cGp1CTsfZGvLwxj0BKgh31LxTYC+5qbAIa0K0SYhVKAii\n5zgH\r\n=yKa9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgWoUvMlrF6Z92HN7NvKmiXclxBQ27KAZlzko4kodE0wIgQOvggczrfeb1DxI9k7+9yYb6iY5aUVQiSog/FT6pvTU="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190417222916_1555540229497_0.9649122696410044"},"_hasShrinkwrap":false},"1.1.0-deep2.20190423090921":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-deep2.20190423090921","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"989db34ab0ce052cdbf55ed91f1b60f51aada71c","_id":"@atomist/sdm-pack-analysis@1.1.0-deep2.20190423090921","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-GK9F8mxEb3CYOzGtmq68yZOcGi2pbrz3nnGmVc6HRn2Er9u2l1pbfwqvJiWd/dVfae6/s2Vl8UgPZAls6JNpzA==","shasum":"909e35a9fdb34abb5af529e0c6b17c8401b2d6af","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-deep2.20190423090921.tgz","fileCount":73,"unpackedSize":281757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvtaWCRA9TVsSAnZWagAAgnUQAIjequKCEgo3L7k/FffR\nOhirgf0807zXmMp0nx9jTsY+FUEe+3iMutfFMVR42aLw6fx8+gQzXT87QSbb\n8gJlBHlzdsJowGJIr7e9lhf3Zya2s1J+h6ktWzqFcKKIn7rXuWPqrYRsinpI\nooqAFItVvt+v2RX4UWRgSTh+IWCwj5Vf2CdOdQIS5eL+sgVFyjtHMUQV+YRO\nUcm1rtwgxaqV7X10qDPz1gNY8wdneV2ef4pX5+GOCIaxE92LbV0tQ8C9FVHy\nYUFmUavvKZPDueEsoOiFmRspk//rVinB5xM4NfyFQCZ0lvl5WnMWB+VCfIqB\nNWtI23uhdjwFmN78Hr5gZaACA66KpfWfgCJ3WFFpIUQ+CAndSr5ncJcsSsyY\nh/0gzrwLNNIHL6NBK4zbvZEsp/QATT3oBq++pMii5ZRvhQRS5ero2Wme25fz\n0vSkJsEQxg5OTyfdWocN9cbP7dqL0VEeNka5H72y81PfMjhoktTtCZOjyRAN\n9B2y2d36tKLhjU7UeevY/Yo/KcOcSNC/DMgJc7CfPtoZWASg1DagSdyAe7Z8\nR7sNV16iQtIE/x94sxOilq6s4mSsMjMfMxMhPNrBG1VFmIty42OXGQamH+o0\ntOzfJ9KsU3QJ9vl3Mcrxyyy0xTEI/3BIT8vpfOc8xxsvLPwNGTja2DJc7HMO\n86BQ\r\n=N3de\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHgJpd0yf445jNVSal1amfnSFMG/lQp2I+/WW1HRzhovAiBGzjaEVCyVzN8OAxivIr9/ddf84cq6FtnXUXZAOQgwkA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-deep2.20190423090921_1556010645640_0.39562442276710685"},"_hasShrinkwrap":false},"1.1.0-master.20190423091307":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190423091307","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8bea5475be06c6c5aa2b7843bd2a9d783f0d85eb","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190423091307","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ReFr4qUCRo6y4gQuIY20pYEcB+NEMeZpXtqDpw5P6xoZ3WnEwqtxsW8nYufuYJ/0yYT3sTTfY5OWBM7V44sQ9w==","shasum":"a0f930a40bb81a04fe5400f8c27e80b46f48809f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190423091307.tgz","fileCount":73,"unpackedSize":281758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvtd3CRA9TVsSAnZWagAAH1QP/02jT3jd1dySIc2pF3tV\nJGLYR1j+9NPY2yqfTUdcb0xpDdCFUhHVm7/8jFm8ZqWgbLhGfx4UNsM8bYWE\n4oLzKRsYWcOz1xTNQDCH7S7hBGjZGlobDWR4u2PXJ52YH7sNwo39hvBN4Z/h\no3h7kc/FwoUxVldV9qD3hhUW0BboOD4j+TofZ+j9OK+aG7NCBwJIipKYlQmr\nLSMpEXNUfwIBUkxzgyd3JI6yomxl2ytL44tNgDHOH+muLfrGb/OpnBw8Hrit\nuOzLAaFvM7leH3KhtrsmETdmCv9sAoJyqOeouGnhoDeLkfZs7s7tyTW/t5Zl\nVvkxMNzOAJMuddvhHY42ZcBooLa9p4YmYxLp2hkMTsXyMtvex0EZ+csjr7/4\nALN2IRWkbilunyWZMwYlIkDJ6xXH4ZL+7deQoF6tigJJFQUhn1IaD3UOjvbr\nXTqKgO10jpuJqLePC8a6SPJ5JPM8wXqtGDM3neVSQqUdgKJHe8JWOe1KA1BE\ngCxe8PcCPFXYIupEOKdVDJu69E5+vxynIcii59/1fnIhUo7Y3TtKFCDrRNEY\nOTuedMhUY7drINHKaCWIlEBmN66ypCoV7ofXOi4nozqkMcFPpim+tWfdHlv9\nMMcBW4uX3JKVV/HbzrUvA4Ij0N+JDbr/XqczDU5Q8KTGpPWFwKMVG9UIwGlR\nNnPm\r\n=7/Rn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQCZy/zHcXiQyv6eXFg47SF6j2TuPfOJeoEi6XoPFamQIgXgNH5VMkpErHKgavXRfYNEUu9DXMiFs00opvYdXcEe4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190423091307_1556010870751_0.41094511115473176"},"_hasShrinkwrap":false},"1.1.0-with-goals.20190423093531":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-with-goals.20190423093531","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f86a28d416b48a8ef34fa5688f855fb259d89f9e","_id":"@atomist/sdm-pack-analysis@1.1.0-with-goals.20190423093531","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-pwguKPb2se8bgOBWjcepyU0EOK4MyTrx8NO8yB2w8ICAyFfFaUKdimrZvn8U5RMZRwwJZtJOWVS64v1VUWMxvw==","shasum":"25ac10e74574c671a0b558a84e6fe4a78397534f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-with-goals.20190423093531.tgz","fileCount":73,"unpackedSize":283446,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvtyxCRA9TVsSAnZWagAAjxMP/0rJg+RWFYNGHD+Bj61Z\nF11C65zmnozapc+YycFC/tlQszsJktYS5Hnmtm8xTBraFfEeTSkFDKdoYHB9\nIgvtZ7PQrqk7C2G7c8K8IsFROFc8FaH/DnhlA8bZ6ENqVRWE5/7hU/Pnjg34\nRKbyos231wIPXJ/ycL+W1yC87AigDwuZnX+IP1zTeyE/FvaWo9NnAKcpTl12\nzcGHjn3qj/g+clc6PjNbRDTjYGi6moI+/091QX9AmyqZ5J76NBH+GkZaB48v\nD3+mewRpGxm5G8QKibFkX9VZ2zSE9LuRC3iyezPz9O1PlX3W5z8qqNM9yktL\nZtA9wKur5e/Q09vQWDdWdUPUYM6lPbHE/Bz3/l45sV9NOA1dbSh6vjmNrau2\nGVw1TKSFB287yx9V76dFRBP/4OVBPvDhgmvNYvJT4m4wxh3Q+Os6oP6uYybh\nfYUE5iwLvht0i+mif8KztV0AU5tivRTXT77Jfuf650onSCbD+cYJrZwNNz24\nX0JhER/mbm2tehil9GR5cBni64XhcwzXoSA0E8Yw16Fh8JHB3qsLktxarT6r\nGBD9cmjLS5EXrqg6HCCbqtHJiSZEMSDZZK8bjGX8wgn/QFTY4twPWL5GNK7t\nf35J16cPHh7bki9lYUQeTHTHbvEFXEYoGo8Urz+xxMT7JXEsEOkJyCKNdULH\nWnHn\r\n=ffKP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB8qOuiMKwsp284r7OEBaxZx2OaC4bQxdD+7jFsIHyXkAiBmnZYssUSwYvRDxjFpxw91sLOVCEJKQNcGLNAfiu7z4g=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-with-goals.20190423093531_1556012208682_0.7355353527449942"},"_hasShrinkwrap":false},"1.1.0-with-goals.20190423211420":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-with-goals.20190423211420","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"247dc72659281e3010ec9333df49230ad261ba17","_id":"@atomist/sdm-pack-analysis@1.1.0-with-goals.20190423211420","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-D7atiKr0khmjBXIO7ErZ3OLV5b/3syH9PUYaLP9qMCYAzReWBvFjTQAKt7gjiv8WveHg9N6KLSln7r4g39pPiw==","shasum":"45e1c4a230f48e53612804acaa355bdff2e5571f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-with-goals.20190423211420.tgz","fileCount":73,"unpackedSize":283479,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcv4B7CRA9TVsSAnZWagAA98gP/3kq1xeV36f7mK/jFt0t\nxLeLrDAIsBQOTuAsNLgIFccqqQKo6Bn56EN10Qd9Fq8yYOP9HS0qp9l44EMb\nWV00gX9DfQYAh+aHsIBkSuyaFLTdTo+XOW0DB1KreTh8QtdtR7q8qba2LE0V\nW5eXt/Tpz663mb0QdJWZ14XlIayknFy6TwzFBzjyLpLKtz3hE5MgnfVLBi9S\nOBSMksBIp+YF+TNFMk+rXbj/I0qKyCuGEWzXnIPEWtymfwyu3SohJWIzKL1k\nquOQe4VLjv6Ud516Y9wGhBr1hf7SZDPEXG1FClBKor6p5MjVpoxV23b2Vxmq\newjOql58vm9qswKU+/rHjbS8WQCRVi2/5B/hrwTYcA0GzUmNn4e7x90OkxBZ\nWe0klVM5kS0ZaiqJXy1ntf25UThuNzA4XqkW/wX0m3MMVEZ2fKxALCw66eop\nkNYL8R7vmLUkh21UbrCy1HaJoqqA7g1Hu0VhM9QaKWSRwrEgRzvDTTYgoPPI\nANlV+CvxLSI8WNJxHDxlOaEdJEWOgr4AoZQ+8IGcWGoAazv2IoEmVzwBsNaQ\nj8IBqxAJrYAKic37s9JAjrhpvyZK/SGnvbkzphn135Frgyu0RJ39azKESA08\njDoeZcsfveHy3Pn18Kl6iaiPvZpiAo+EhWYuRtgyQkLlAPrw10/QV51qR8VR\nUHoG\r\n=pIaC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqUJRoVRneqYPfAyT01UrFoU/fXURp2HDCqqyjmWmfDwIhALsT6Ta4U5EjdHa7mwFTdMs8HFRqzZ3x5h+QKGncuOod"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-with-goals.20190423211420_1556054139212_0.751715954051364"},"_hasShrinkwrap":false},"1.1.0-master.20190423211706":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190423211706","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ebcdfa08578c00e69c84522671bd4de1bb500236","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190423211706","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-JaRlgURmxbP4CfwsCd7fsBfQdCAPtWVW4n5L9fj2PcFno477WluqG6B0oepHsgBr7CEHa4MTxFq1Bx92eIoaeg==","shasum":"b049a3e8fc20e3102c18a81517a966443cb4f35c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190423211706.tgz","fileCount":73,"unpackedSize":283584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcv4EkCRA9TVsSAnZWagAALhsP/iBF1+Iqxfug1b2ELiya\nEcl8LGgR/xkkweOUEGvYZMr139pf1UlSszZC4nDOEai97qhbxxuAjbSkQBoU\nGQ9mFD8hNNnvERLGGAcg3SzV0kW8ApObMwQbqvV/WXLb0HBQyvHE6zXw8aOl\nzgUCOGzLDjddbgLKsjCKDicz/qgwJgBY/0Jviw8fMynhcTcDyTDx6xEH2mQJ\nTLpkFRzxmO3lUEclpf5FFZZRJdvG9DgA6CDx8WS+uqJ1sIzqxMa0YnTWIHfz\n8pPINlBbbqXhlPrVmZe5FXSXxQmE8gjdimR/ho3Zza9KCyYr+rqwS0dmjh1G\nzTfLnkUXwO7hUjCY+/2FvxoAL42pU+x7cQh2o+4Q/PXkwfSb+QQVHCFXEf4Z\nKErM2/UhoWectQ66CO02/ObriRdhLM6Fd/LY+grWxIot1s815Ip93ZwiX08Q\nqsKZtPB0xjAU4ciIIPznsDqSZjNcq+OU1CQLwCTwFsEu8rgJIjFy6Y8ZoSid\nxpKP7sBcXyhZMqWJIFdSIq4Ld9l1p/DVXgezcNuZZi2fpXiAdbcfEgNONFup\nlWrlW3kMIzqS2lBdX/k5dl0ml3WVTuQamDDm1S5EWCgKWY8jeEpG3ynTKmIW\nhUzot4515lHrZEkxj0lomcogBJjCUj4R9nAQon+jsEnvJsGPjJqVocleXEIA\nktit\r\n=P59j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGGfN5xpgvzY8xy8GVPJejo538g/CEfWAjyhQtZjnlDXAiEAtKE1k2NotgNbtNxfEN9qnH4gKzTpDfcFCWL/GI8Ap6Y="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190423211706_1556054307706_0.037816769319521715"},"_hasShrinkwrap":false},"1.1.0-master.20190423224213":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190423224213","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c621c0de7069af03e4b0f1e69f619b783df9cc10","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190423224213","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-AdwArxhHnlzYYuZQx1HoAnIrN6aZJ//2bO8Nu32hzWTW2WjhW9cAE/oYKrGySQ3uZ5B5lvik1ZIgsnWUJIrThA==","shasum":"d9b25f0cd5517dc9f690a28d57f26fe6ac44e89f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190423224213.tgz","fileCount":73,"unpackedSize":284385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcv5UOCRA9TVsSAnZWagAATaoP+wVJb05QkCTdn3z9xV7w\nNA/w3F3diID0WQwYgIHyHTQerZF7SR/cn/W2eEkvOY9NJ+w6wqsk8NJlsB+U\njq5c1BUc0oMonYrc54jjP3GAD1jraDDts9TEQtFnCFG6qflajhN6jAecFTDA\nvZsiFvWsN0nKPLGVOLNDMXxyWt7Zj1c9J8cjYSb2K9pbP91DxHG24jWRhyFg\nNSq88tcXpnLiJkko/AS0Ip404jrcRlhecHwHTbgEtvuM1nQaV5FAU2FsA6Bp\nGpNPnbAzohtdIEuh3p7u1UzgJjseUZM08zf/kvTslf0x0QRn30LsvVtYc5XK\ntlM2OiUAkOBW5mpu4ZdEaFDJnaAnzhrpiYL2Im5alD03dnh6gPsyt1dNVmI8\n9Y1nIf4jXuw65TeDeEdrXxK6XHU0nmXbtobYzna8paWFr2gmWYELAaozEClO\nda3kpHplwg9rl//UG2d9+JOGP0hFKSHeZ5oWJ0qHib/CJ4yS+Wv23f9LqmOE\nLebhblQ6mL3xMw6i0O47I9RjI7DLPflT9DN9EroqOaANm9Fk3pNRxEtWY36d\nfx3adB0V/hsCioUC43/L9ox4wdgKHP3kkA6sOjDIpgshH5tBATwxDDU3h+w0\nGOKVO0w4kWYVajmqXgiLHFFA0XuFod7OHW5uDGfPARFVvTx4/5mAn74wE9ju\nnknO\r\n=KUcP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGLemOscd3i2LzFGemgD+n3sjgN2mEUvQ+9UdmrN/w7EAiBccHG3bfGb5KAA33jCQe7ayFj9BPOAiV6S49c0vlBlyA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190423224213_1556059405541_0.4380439672838543"},"_hasShrinkwrap":false},"1.1.0-fingerprint.20190425022304":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-fingerprint.20190425022304","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6974ab7d0c221fe80fc14b00b6fa5019d828e1d4","_id":"@atomist/sdm-pack-analysis@1.1.0-fingerprint.20190425022304","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-bx/hbE4shDOj5B7h8VQbnJ67NPhGAxF+RwMCwmZB1RLXqZhaVtSYzWMJ+FHJVgoYdwgF71gRZbuURDrBFpIObQ==","shasum":"843e0007344b6f396807bd13610f34b8575bf6b7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-fingerprint.20190425022304.tgz","fileCount":73,"unpackedSize":286620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcwRpVCRA9TVsSAnZWagAAyUIP/05lw4nt03helQTP36HU\nR9+6PfHcUrdgBfEbQ+1VwBnudN0vD6oaadN8gACT695n3lSuY5fM7J1qaLog\nWyxAK1RsLo+hz44dixrUAWMVbcn3OsHIlFJhGyde8QDon2E+7wlMWsdRK4zr\nWcg55+UMjyBI+PyW0N+C46sqM8czy+O4cFsYdvB41zojhdoEIVNA7D/boP1s\ntq7aurC+0RJqrOwAklZBNifRuKkJF1Cov85VIMbT4+obQBvTO5nbwN795wyd\nHNvpjCPJV2T88GkyNl9LW4VDY8J8GcWu7526M2uQxLz8aMuc4Vj/FZjfkkp+\n5GjafhsD+4sVySCT9D2dRVF//cW2Yb3Mxa90T56uxGAC+J4E9Be/sW8T6S1L\nrUkzYq5DIucgDlvQ0KwUqEVJ7/jc4nDpkEd5AtLDmFpdvZOQMHrX0ZgzcA1Z\nvEeRtsadNNkj8eoU5ZjNdEEqNqchmOYgePnk0cvfKafm1fNqRTDw8Rj76FhD\nOmZIwg2qL6I1Is4DoFd8gitVTwWJwya3Hz3A5BQLqcumNAr8XSYon6J69eWJ\nONnhg2xeU3rRsiF/sO0q7OZafUHUpWOSo1p4r2sxlMVh9neP6Ou2pI6IJxkJ\nCa6BITC9dMIiBdgz1jZOW8J6TTi68v7M+8VckBok9bHQnWfejqy+AkISdyl2\naGqT\r\n=Ne+/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaiFH0WXpJL7Dyrai+zTAyZxL0OHLXzYhjygp9UwuVsgIhANWbS54Ky3B9CH6Ike6xkRwclhKRIOVqCXqMIefAcdoU"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-fingerprint.20190425022304_1556159060596_0.6274757807503695"},"_hasShrinkwrap":false},"1.1.0-master.20190425061642":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190425061642","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4bf45d64a23659382ce8da70247f9f0918cd45f9","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190425061642","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-6y4zKPmpdcOXAGb38dQhImppCYZWDkoqYYmjwTb//IwozDLO2QOkp1a4PMVtcbRyjZOlKVlwrRwP7OGc+OLHCA==","shasum":"c0e5ae5cc2005af4e59f3381aff9b1fe91857df3","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190425061642.tgz","fileCount":73,"unpackedSize":286706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcwVEzCRA9TVsSAnZWagAAxfIP/jnSHcpfOYOg4NxikLIP\naVPBPpqhTrAO21o9lOQ5/ija07HjTIFSa8gnNsnIdt03IzyFytBcf2t/2Q2b\nq4tIAV1NtdoCIEc1/OOaYmIxwSv5Oa290+09OyL79ylQCh5wZqklsvg6ioPd\nBDjjdDRHyq0zNkphsvcqUgwnvh9eSN6HFGYCKZvrkA4os9u8K4zRvRI1A51K\npyscof7QoCKklNx39aiVuoC6+2t9/JvOL7Q+A3agykUMB1oKgAwzF9QRjbgK\nVj6ZRUxa3FX3zhCN8rzPtgvNaw2yVJAOdoVGChlz4SSC0uSXnSAgJUb9nicJ\nRfiRvu327BOzGrGgvlelbtVxJ7aG1Qws9A6jOBIJHtH09ctcqPgwha1hJqBL\nk+laHEV2AzVle9B2kKTMPl26kHM+AYOHTVHUH1N5AI1D7tnPgxSdCnlL25l5\nGNsw6UeBS5q5phQYC+W6GQRExhXcBQpQVy5ydW4qv45Po3CI5QUoJbKuW5AB\nlfU1jDtqMq/uSkTvn6OEAGde1GBiKbJYLh3ye7MBCosfM1mMkPFYUxLKcYT4\nFK+O8YIxejj2ZSLo41/lrVDHB2uu+/P6gt/83+PsPU9awhSDKHQkIz1J1pWc\nFt6EUr3DK6qIvNN8qI0P4YVtJAIT5IDXmJMDdwbrcs8MIpwc0A6fsG54iL1Z\nJnSw\r\n=05J7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBVmrAwX/99NLifr9kP39ir9cxrVMvDee9d1D4OwHo5NAiEAvWdeIHRt26ufHScsq/mlLwhkZK0CtmZnY+PHEu0yLOw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190425061642_1556173107101_0.057012150056990674"},"_hasShrinkwrap":false},"1.1.0-master.20190427103318":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190427103318","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a4eb74906c8b2467f0c7d8330f3b97aecd04cbc8","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190427103318","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-4MONvaHjQzNvAzLLbOvRKNBT1Mwgygg3uLS+ApEjOlZnF/voVd6UI92aFWN3wQsmy9Eni98Tdcv8YDE3pAnWxA==","shasum":"e7faa630f9bd2dafda2a3c7a78f50f831669e2f1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190427103318.tgz","fileCount":73,"unpackedSize":286891,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcxDB3CRA9TVsSAnZWagAADe4P/0Af32MJd+3vCSeINr5y\nz+PnvviDlm2UlW3a1o2oX9TOj6YHZJLLeC2fW2pSYDX0tES2kQMesHO8qnF2\nbca619v+RmNegOHbwGS4i1QMGoZ5Fv4zNNTD6j9AcN+tltYylahCQIEnaii4\nemEtT0AagEFkZjzfw9QJGFVIPM7S/dNgX7IP6zYEvg8+yJi2ml+qFIqVFpuR\nkhcGvb8xcyBX6QgezF+Yr/fMtrm9l54s7z3RrJdlwdQwWF7fmNKrnKl2QmKK\nGMclkmO7vfVo10PaGyT/8k1VwEiiHb+9XxWImwDha49DH8jqr5q5smkQYtXm\nm08c25dQMFsKiU4btoawSIf75esJl0V2Cr05sLa4GjxgEpEFrR92VmfPyAOq\nC1Ly9n1PBC0A/b2ub0M+NeO35IOuUCk0Fi0Ar4rbiYVxBa+BMZGL45KUOao7\nrgwKLpzUk0vf+oOem76SKEglYWnrGMo4uT5hloL+N6R9BkWeygNKrX3HVMyi\noC8nfYiIx3izd8ggTMYWFYOQ0Ba8bLFonqnHsPDX7SedTkSVJRCbjNcFEJky\nJfp7YVWNRkKEd/WUMryv2m4jRhVn6r8JiUl6VCUh8z1O8brKFDBdfAjR/Mov\n1gWTIs5Kjo7MLs350N0Ze/7jZtiRfoQF4N/hm3DKKC8hbJCtfb+kiNO6hGZu\ndJeC\r\n=+5Bb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICC4OHL8laBAE2s2B8vVqdObOmLT1zjps/rq7sdW4N9kAiA4FYKa4dwT+WwFX7irLZmGBmrajncTBYdp0oO3EOglGA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190427103318_1556361334680_0.6472626127793097"},"_hasShrinkwrap":false},"1.1.0-master.20190427195419":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190427195419","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c5476bb1b75e8449244d13e8ff652855d0fcfe6e","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190427195419","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-BanyLZGmfxuS7nfnWkwsvnW7ixNmuyFHysbX5FDUoqZYCHxSaAJvjnW/+5VoltgD8I79ZlW5AZlJ6oZoTJ7M3A==","shasum":"a5a6cbbf63bb1d846c9ba2c94fcd2ffbfb2e898d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190427195419.tgz","fileCount":73,"unpackedSize":286885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcxLPPCRA9TVsSAnZWagAASeYP/j5WPJrnh/kawEux1h6z\nOred2HuvbffwoFhNvfdLAbuGqRNlVC8lDeSrnQvlcW2CLDQdSSOrXRowBzCl\nUbqVkfyYGvjwiSwhGRCpPCXUwAxeED4694MDshM4PwmOBx3yVdWTo3eKk+fg\nLHtaEJffsQ07Dljrbdmci8XCkSTJ5HENTrFS4plcJ2Rk+JzjND4bHBGZbH2z\nij3lb2NyVpQa1x0iuWP1hboAsocfe/YFz9pMlcVzcsw4ruOyTODA+JPIZqYp\npRQ61iijRvHdTaFjVK/oU70N/hv6k/cUek1TeFS5FJvxWFjhoGb/CT6SPlCY\nAzs9pHWbpi05BQvYfwHRChdGBfVERNu9oLNETi03bNg8tiUExKZimYLFYQiA\nKZEn1fioThtA4CcQr5RsTBfNPZ1CQzq43SyZbfmXvmfJWDyO7GDEgZHBMiDi\nWV5WK6YtZ5uRXXPaNwo2YkKygqI8skxSf2newqwv9fdQy0n+cjf5XVjJUT7c\n32CN/hGayEb7MWTMOSEt5QrhFesTE9RL8v1pWZIJt+cJy+yTDDPLs23FXxDp\n0QXR4PxC5uSfWs3N41Hxx868RX9R0iAt/9Kk+Yw4CKCLXpLrDLgulP4LbhzX\nNNnnNC+3s7EDw8jpH2UJ9dPChJpkgHdl4sK8jeiNSIclfaZ4nqEnH/HvhTZ2\nu6Hw\r\n=EdUD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaaOxeeJcl+VRQar3/zzdAljQ1HLQd8Oh5DwqgOU0ESQIhAOZjfkb4xByOTcg1kmCnUgpJ7bUvVo/h9FL1d84oC5NB"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190427195419_1556394958440_0.9811463339608513"},"_hasShrinkwrap":false},"1.1.0-master.20190427201431":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190427201431","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3a4b39b8495dc2576d1182ad1e9dbc99caccd221","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190427201431","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-bOf+wz6sJAaGh2l0k5HsYQGsLBfSR4YFFVLXI+6cy8Myk12jUdn+OfwZ/q1mnHntvuSnCtTmvK4MOCUh/eMlGw==","shasum":"ad513b22befb60634102bfa683ab3eb1fd0abf1e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190427201431.tgz","fileCount":73,"unpackedSize":287288,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcxLhtCRA9TVsSAnZWagAADLQQAI15atc0J0UJUVsPyqhH\nweRNgmBrTEK8cGxUK5PEGJLmrF67HhP89nzslKbvXSN8X3m2OQGueRTFK/Ow\nO/IxJe7QHcvuDMFpzTWinydHLIVPuUaN0iKc0qKH1e2KkCxiJQpQhALD9+iT\nlGF5clItKvoFH7HMqPt2m7GPJosgcsK6ACBMCtKQFQYU5Voe7iHZFgdHByaW\nodHCNZXMzfpSPL+DumEIO/Lvrgao1CGYtVgDlBj7hEtUBRDCDKeCZc4Rwb1j\n85F8BNQxtF5o+45E573oqcy0eSvixy9VTF3TTi0s5GqGm5fxckm5+lWcljTF\n1FC+el8mOIz/0XT1QGdxp4pL2G0ImHSqAl3vjbXCead6ZoZOCFFfN+sVaPTx\nlpKbYXdN7DYr010Qso6gnCPkGmi5lkWvJi0fQFaIq6PCwjB+4KwWKJ/Y3T5h\nsmI+hqy60jZECVDvt3qecaNZLU6oX0D9sUliAykak8nizC20oaJl9IbvskQx\ny1jS/2uiPybsgIWzzvklr5w+5Ap+728Veq6ZMtNQ5P4TDdzrkSol8/lAnRgJ\n2pK/ftevpAwZbWjU/ngCM+h8IJX/NOPZOt23ZQ49WV/MgdMKYzBb9UiN2KxO\ncf3eBar3wS9W65S9YRlGd7uCZTRAG4S7UFl2NtlYxs1jEyHbNpFxhTyxcdS1\nLbCT\r\n=s7Sq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCphKfbH9F7vCSVCqfHjvQGtJnI/QsQpwhRPvPpzUcizgIgUHGcfDnLm+m1acLM3gm7xqXw71gwMb+4Iq1wCcERl9Q="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190427201431_1556396140426_0.41878614161404704"},"_hasShrinkwrap":false},"1.1.0-master.20190429060345":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190429060345","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d8be039507aac7b94352ee457ae3765c83b96594","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190429060345","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-+u3YllU5buhMpsWU3NFLYJC+brYSRj6TzDW7gzsK5LEYwauenDRHVngzg+O0Iux3GBFUXOTMzR40uXYmK4seiw==","shasum":"c2cf40a54a22ebfa0a5148e4a1f41a0465bbf76f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190429060345.tgz","fileCount":73,"unpackedSize":288383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcxpRRCRA9TVsSAnZWagAAw+MP+wQVATg5GCXHK5+vlKfj\npeFXF9SWd9JBzTvcqumXQZVyPpZX7OEmHaFDsNS+0hG3N/OdDNFRCRQgCpXL\nbO0keTexHI+JtqEducsiHmXQvV7gCbIpk7AJ+IIQYQPC9ReOyssmOqybTioU\n923bvgRn40AueILHcDkdUTSWzU4q8A52NC5bsEE3ljGZjjVS2d+qCcwgt5IP\nN947NfL/krO6znmeb2EXTC1E2u8IAZ5fsIpBqQOjh02Zg47IXFg3S3xqC6pU\noxO8KDlbaz29qHxGt7gibU3dbLUxdzMiVj1EsvVYyuT3ah2NZwwtWJWwQJx7\npURY7I5iLA907eKGKcliF4DhxwqkMzXBdFj4PYreTnIoyHyiM6Eo9CgtjqBZ\n7pDft3aWbqfS4zMrETS8m3d7sYAtpEO4df0SluwPf+F4GAA+/PnKGgdqJSLH\nIkqKRhh+9jWbEARcbv3XO7z0ySQ/yuhTR7EZjuC9bsooNuQd0WYA+fVSojNq\nLKiUr8wFel1ClYo09MUH+igy9/RDL4HNIMXoMxbTc8DAA38etiZJ2I2+WaSi\nJ9EFQHGk9+lwW4LDqTil7f1tDZCLuZ0EoSQSTpM88B1Mp9BBz+xYAOzvoYni\nqQZCX+vrHmF7NNOl09RLjfLFEl2VUCx9U9dihmnzpskwgMco7mamukqzzSRy\nlcPf\r\n=txMb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAi8QMX4uGQJcL4lgnxz2zyLlqTgO2HCadBHdGFZ93L6AiArBgpBfDEXyzJbegZeYBgdv0JEk2v+F0IsFzBfoezMUA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190429060345_1556517968440_0.5403976379558746"},"_hasShrinkwrap":false},"1.1.0-master.20190511094352":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190511094352","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1bc34611e55ece5f3c49b784d835f6642a31b591","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190511094352","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-InOk2fNi3/jkjaGn3Qv+KU3QFIb9Td57ucRQWRAOoHFsyNjwhM6X3627m3q5d2OTNkKw3ygj6nLM5Y0E7sqBTQ==","shasum":"246f726660f3dcb259695a499d483c5018ceba6f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190511094352.tgz","fileCount":73,"unpackedSize":288821,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc1pmyCRA9TVsSAnZWagAAxywP/jjSCYtS3bMVXmYXTYot\njVuh7cOsqbCmc4kc+LtStrAhEuw5bdW7iOTm/Pvgs6e0kHaQZ5ca20C3gZmK\n5BmIgb/YHLoOQJh8ZlYdgCyycGjw/LTa2tlQXGb1TXy45a6lspcPTiIQjE+W\n+zk3BTELtS9Bda/kCpoXIyl3Ze8wln4BqWlYIkTJSZYIVoAJtP/VyNoc6SS6\n5x1EuMk8RtwshodQVZb6HJEKnaBxAzCptQEHJEX90kBtZB1wEZxMDNeuG7sZ\n2GZtF/sU5WhkRIRA/FVhQWE2dZjnkrNLC5po4MyvecUWA1QQ+uyMTwteQDyq\nEKMSsl3sVXPVBQsY236RFhtsoaiG1GGq5OjICu3YqtUl+fzwWwY5VEbeEmwB\n1vNEIwWyIr9eaJxwOUdP40fWi30UbEhrmwM/ZNG67G4CQBz2oUpdtPt0tKur\n6env9qagWOlXJrxVfh2+2uL+IbQvW0ypkJ1yCJjKBnyFbhiQD90qmYFpGJPL\nPCNeMl3upVD3B5HzoKIEdzqiVSOqWrbT4anLcZwLzklLl8m3tmKm4t1d3xs+\nAmE3XIBRESHvgYiRlIbTFOkAaUlTUwkG3aqZEsOLlNnKDVhJujuKq1eztQb3\nlfj4C5gWks8YL341phLYnPUxFdoyNMO1W0KTvD9dCXOIhWUOQPQKj+tfuzEO\nycWs\r\n=vjZx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDiVUYDHZJIHjtzH8rTM//1LLdHtf9bx5A2wia0Z5KpEQIgUWJfoG2fekvp1lcePi3wM09JZxq/QP9EKT+t/zBe9XQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190511094352_1557567921323_0.2723205947700258"},"_hasShrinkwrap":false},"1.1.0-converge.20190516232710":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190516232710","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"dc25e2eed5dd2eb01fd640fe964b37a9d32c8394","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190516232710","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-gAIvHIXK6IFAmfeiigd5k4oiGGiT0p7evKbjWq5v2asQ0WRT1rrONb+cDeT8/V7M+3QNdWK8Mo1UnoVAeAp1Pg==","shasum":"885ff976d9cb206996abf69202839a64ea2e44fa","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190516232710.tgz","fileCount":73,"unpackedSize":290406,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3fJGCRA9TVsSAnZWagAAhfwP/iZEaKDR6ES7uNiffXP9\ndbfzaGGQHI15gai6kCvtgiA6nQ3VT9X6GdZHpGJF4Z3FaHdz0mOUyqFBqHRv\n6icuOGQuef8wRJE7n+u9BJhaUAS4BJEzhcEhZoxEZxLiZsg9TWW3VW/iZLdR\ndxeXcb7T5fK4Q/hwiHmk5bIhCBw2HdH0/sX5R73l3DUU27WNDch+3Tk68KtV\nTJlBFKJEAmNf9OjIC/DV6IynAVKU0RJTvHKIP3UP7nHnAz7k/RCM1dfvV1E1\n+pZ6ekoFABeO9rJ7hfYMKvn+kvsIeml+XyboLbLbnuUMihDsr9YMO//ZcVkd\nhbvkHIKcsId/80jPCPoHuUiW5qwXIp+IrM5zyYICwyMWInpjzGy/GfqBgsIE\nKCMvqZ57jaf6uWs4j/btRl0isyYKPsy3m/CYJE8vNBBKNvntFS6MkQwtT9ya\nwKyTEFMmXIRI60YnjcIgw5WQo/AdUSE5DQjgMYRjf8ABqMg/JB2JbWzx6dZC\n5fSH1IJOIx42pvmaW4Yt/B124nSl0qIsOXBY67zONk4a2WvI9Iln7spvr+CF\nhEYDdY1b+psI3clYwHyunLjzjY9Wlm0Ac+1Tn9db7psyfO/RVeju2+iwLJyk\n8LZcYAIAyB98pAEf7kBYblARdcgnlOZy0qCLjJenaWdAN6qXbjGbBvvLbHVi\nIG3T\r\n=oh4G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCc7zST2i0q07tYUwrlyR4XKuaGg86QLLpVwqH3T1kdJgIgRTqUAt+xBFyldX7NDRGXyfJg7gRljvNmXWYyi1WQ8W0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190516232710_1558049350145_0.5524746960952882"},"_hasShrinkwrap":false},"1.1.0-converge.20190516235627":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190516235627","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"288fe954ceba490b6e6687c7cfa668eeccfb8335","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190516235627","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-qy2+EhA1wg75I8thGGSVuvgBrPI8AeFMu9gvLF3q+7C5Rrst3M9DsgPVOzr18sTXLBvtALyDG8YhEUdsD0unvg==","shasum":"01d919c632e95e3e88e0ca731d93c483728b5548","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190516235627.tgz","fileCount":73,"unpackedSize":292032,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3fkBCRA9TVsSAnZWagAAJngP/1KiZYLttKRoEwbZ+CUq\n5uWZdd0Q9BVr6TqtbggBgUoihGZYagVgcgNcG3jGwqpBan1ITOSLKp6a+U1M\n3RLQ9bH2mQG8Rj9HYb3W36fs386IXyQBuXNl7mzcNdYOkjaL9p3Qai6cZC85\nZTjWUfgjjsPuARGLKLaZWAPbaeQDGFoGuOU6CuhdapfxAHESk6w16k+Y8vsc\n69uGktFzgpjkY3s/sQMLc6ngumQWXoju/HwHK8ufgdsop5HGdbbzhzECy4JK\nNw73GE2enQRAztyR4iRvukSCSRmm0mh13qAIAg9t6GgKMaIaDSh/Se6+7a3F\n1/MprKlIP5JU56hxBOaQBGCipikB/2lI37hveEBCZzb5EOIM3l8dQoLPtp41\nWdyn5cOYG0v6zCmKEwZKehfihv56yfjsdG4NshvUUOD6tUY+ho4m4YKjwTK8\nkvOgcK7MalRua07p6HjoJEKhhWCue0ge6CnhWkiSyKLceh+Mb5jQ16XNMTPK\nq3n1kEBmMMcx2H90JgDFGO8/ksBaRvHQin9uRr3q1vk5NWWflNk7okjSCXbv\nSRo/wOLGKkNBHZjsn+Zm5kLsoEGMl+nES0EQcFRfTgUYUSiWAMRnLb9GgfIx\nRc6G9I+j0F+9F69IsI1k1Z7LpwmjmVnbmlsjLktPraSZ+9MZZ2ZjMlwilENX\n3Usi\r\n=d2Qy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBNaxiM1Z4ltqqx9KWj+/gP5xa2gu72HdNkekBXPUFbiAiAhiGM3dF4M5GyJQm0UeCfKuPg9ZzxPgFucqKEerPsWdA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190516235627_1558051072749_0.958746418151333"},"_hasShrinkwrap":false},"1.1.0-converge.20190517000304":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190517000304","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4a158cb683b1b4b6d9b221723f800da83b779acc","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190517000304","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-zFJQLmNHCVizuIVbO4yVDnsy9TbTfPomJvTgyE/1JOkcVeuhUzPHtpAat4HnQddJAVHztq5sbqyI0CXFySONaA==","shasum":"d105cac75d7fe95376bc53349bf359822e407c0d","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190517000304.tgz","fileCount":73,"unpackedSize":292078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3ftlCRA9TVsSAnZWagAApfgP/2WiGpUNNw/Hf+PuE1NI\nb6YaiNWReXGkYwyMM+c83tZMojiIMTRKtEZF1p0kjYsyk/w8+6nxH5E+mbWE\nIgUllPOC0G4dSFjXNGBEYrD7Y170HomqBu9mRX3I6K7JzJbVt3k+SsUDaNXw\nmufgVsyH1BKcP9/QLxeOSrAXi6/0R8h1vs8h83qX1c/TTQTF7JHklgGsN0X+\nxzWZGMt715mkIaInopBrRX62jMC8OOMq/D/JWWKNe6NCifmmiWe7z+jNqa3w\nT1R1sgoTwK+tgTSBquUA9JIZZcNQ1xw9HiPQQmxRdtTZWZESyURvDVx45nIc\nWzSFjC0of+x4FHMGNuszacdlt2Emt8u/BNrOEj65RDwOgDSY0g07SVfzd5E6\nuc5oqsyBewP0T6K52g21Hh7BE2HZlMWdDvGwkQk4r5ArhC/H5bi2uZkYW2mP\narlVSHM0PFFd2D1NNepacwXbcP0I/gujHR1ATbXuIwbcB8e9BcqEirwK/O+U\nEkEknfM/0t4QY60+426/lbnCRgKFO7d6pUb+3aUW64/BwKNUR7i5FrDT24R2\n+WqA3d5iYwHVAUfwUIT+GV7UrXMKr64DSIaJTH9MwMB21Sd7VQcgsRC07t5X\nJwj+nQVgKAZkY2EvUp2gjuSOkLLDr6VBIt/3iyGNGmxHyxLHS6LMIjWKOsOC\nJxLN\r\n=ed5v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdakotlZSeOxAd3sMV1yvK3Hs0ty6MgPm0m6aGGpsZRQIhAPb7KEN2AgqpgBC+BrvBFoSy8FTvt4/m6x0cEK6Zo9m8"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190517000304_1558051684694_0.8827928605375788"},"_hasShrinkwrap":false},"1.1.0-converge.20190517015006":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190517015006","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"657f3fcc83b18c4ff59674d874f42b0d0626a2c0","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190517015006","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-HeHcH6ZOXuXCirXtn/ukswwTwt+SlfqHs3afvYBmjuow5V65pNnUgkTcE15choL9ihnym0s8Pt6QvMlEtSpRaw==","shasum":"27fbcccda11aa70f52311efd9227e99d48e01a9f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190517015006.tgz","fileCount":73,"unpackedSize":291940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3hO9CRA9TVsSAnZWagAAg9QP/3BmZ2FM4cyVZik7F7uV\n5h1sfxXPz+aInoJHzE0phidyKRi5io6OAc20efyhZ97MG8ekjNl3NkV5R6i1\nHnJERGZhOBd2baMQ+nG6K7fALaHrqCKnwjN3BmVxQGTIq/rwWB43pnP8bpi8\n9TH+CV/q/xQoC/W3OM636WMNarRYJST/TSd06UxzkdtRF/19zlD+fAjdCeRa\nxLCekRKoSgiV1fAsYmzAH/aOxCHZf5+OBxZHaXxvJ3aEeu4J9eK36iPp0KSd\nf5FcgXYu7dyuKTT/f6sPq2dzQLNbUbIPrqB+cC2YMF+LQhwQaO1DxLIwz/Qp\nHJu4M3f78PUKc/39102aalNorCZRyzGja0DKaTqJiPtIyAMDuWubhzoUhFqB\nVZbqs4AsU7DlVXyOE20VrWHWeMEYP7ltieaHFHeHrJFn8TX2XGO2xfcNDZQ+\nzZznBXaiQ/JV1/67aYSoYJ6uKzqv2G6NWeKU2E0AxGcnkePgebIhIl+VcDbJ\nH7kTodYVpPGftt62ZGH7jivrHw3TXG5uvvz2Tpr1UXqfPTrY2jMk4iz/Es95\nwonfs9TL2IzgRKlx321jx5r8SF58m/kMGQSOfxWXTM92slXueS6d1SYCiq+A\n6ewOemvIcGlS42TDj7b3iqK/Y/JZzqJUpqt2StDtadfBgsc/iYbYVns3ocKk\nuYz5\r\n=3wJZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYJAtotIpAT+9UxyNAQMbXcY0ly8k/Xbd9sScEikO11AIhAJFcd6oIotbI5+szFtO7h89V4qVCcg4xJnt6Ao+dpKnn"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190517015006_1558057916595_0.42006127076460964"},"_hasShrinkwrap":false},"1.1.0-converge.20190517024239":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190517024239","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"00fef02cea4fae6cc008001d316f2780b24c000a","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190517024239","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-BYKLrIGGpw5VSdQ+f6M+h4kJJU7JGMt9QSm+8scEJwHuzitXIhN8J9SBlxJXz6grER/8OmJkNLRj84SLCuxSXQ==","shasum":"cf7221349e72ac19d50e7b4eee39d597ebc9571a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190517024239.tgz","fileCount":73,"unpackedSize":291933,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3h/uCRA9TVsSAnZWagAAhjoP/R8t7NFXtVih7B+g+AdT\nCmPmruJm/WVG+jCf2F7dw+M/1xx3PlPW9f0nU3QfoKRoJnsqyLBA6ibrJ/ys\nRRI8I4Bi8HM33AzPMP8yVWfpq3Th8wRWNb/SgNxyv+UC47pL88yUW5L015Hy\nrvM8vnkl+2zVf/EE+80JyJScjqZX5TQv/Fv8CZYCu0BhnIjSeKcCiLltO75X\nmKNR/cFQYq3d8pUIgDe3bVsIFOREb9TO5fQb6f00tGvvRKo/RI8QIt57z+sN\nWbfFPbPYgIyC69PuOybhg+wpjS5LEzW3/lO642lvEBPg9YEC6b3mvOt2nn+S\nt13PWWA9CBEBhrsafcxn3/n1SgZZw/8yXfFxU/6bbqzrQEzcUMrN4mcnM/O3\nuFlPUoPdJ5I4GexxT+wEPGBKeBnfAMvX7bbd2BBnpg+iHk9sh1XVPqQd83Su\nTj2oZCwLeYEcI2pRs7qdBqYbUBy1AsCp8QvgVetOCFt6R2ISfcCBWLq3ta/h\npzuiVD2hI25PtxZ0Gqq1L2ntpBipM+UmxWZhRPuM3ZZy/zU+akvxYjJ4gg09\nQYlCUt//EpQZJtHtqnYAmB063g6O2n6jXvUz3q7X2kEl9l5QcccLG9VuIq72\nZCCFWl+iB28eK4VzWZ+4V4bx4ERYAw89xMW+zzsvX1d3hm90o9MLv0mAI3Yx\nQoW4\r\n=/p52\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5k+jVWERAlLIin8zKVb6Q/zWFBC2Et0t0mSVHSxKQDQIhAPxD5VInamQnXUHRwDCAYiymuiu/6KpH1IKc8LO6lBcQ"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190517024239_1558061037743_0.5301421413845331"},"_hasShrinkwrap":false},"1.1.0-converge.20190517164926":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190517164926","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d9322d2c766c4f5ad90c39c26aab9a3098b47641","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190517164926","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ZaeZcxJSHo3Vstpxf9QNfrnp4BvwXhASN246YGu+6FjF/V0l5gfVdNgrx17jNk6DiaJebYNRCnHSVPgeKCzQSw==","shasum":"cb4ec0b8977cfb20657fb7deb908ecebe3b32e29","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190517164926.tgz","fileCount":73,"unpackedSize":292401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3uZvCRA9TVsSAnZWagAAkGcP/2WCZxhk3tHvR9OsyU0y\nVUtVvo2Z1XVKe8Gu8HmjycR4r3NdPA14HvLgpub0R4br0FiY9L/IaiajK5Eo\n7plbQo2hQr05imJLUU6CjbdNp5Z7ehtIptzZ+j0//NgOwBgSZIEriC0A5PBM\nz+nD0K/YE0/ZNGs8DhjHOr75fBua3J6ox7W7YLxcp6d3O3HvLEtw03Hk7rXl\nJZ9bpCE2GESO6frMKNTvaxUUmKIfZJNratQjYhy8Ae/oFLJI6KMuipwGW7uE\nm7YOYPAlhpb5G/m5AmtyU76k4HfIKQFLYy3JSVuXecjF2UdXGeoklQece0tb\nIIP/xwSLuBAYhR09hxhSZgJckTf5I5lyGTgaujdpniLiXtZvkK2glF1GkpwB\nJXGHDBVxSWe+Der5e/z0dTjXe07l7w8mGYDQabAA1oo7+QuVN59IsnshAit1\nHDf5nEX8uwWRF22ryjXf/UIzwdqhOOCg7t1b7azbW6tfgzFfY46d9C7szS0i\nIIlmSfPfX/YgfCoSN3NtAOI9o2y0MLWjmVzy97dzGATLqhlbQoLolW/iERnl\nOBSYDRcpGPJaz34q27TXoOMYiOlZZy+7NrAlQhNS19WMfRvRW9CHe38zeuin\nFl3bB1YudKP5zVMA5e8JPXaKYNBv+aOL+tOxDnxIOOAXtBI7KlMWNI9n1RHv\n4kE/\r\n=h13G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC96SvnA5ujUjP4whi2rXQza6kAmvVz21172zs2owTyIgIhANpdvM6PN6OuHFNHczXneB2KXATn/I9C8O7hwYF4y+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-analysis_1.1.0-converge.20190517164926_1558111854892_0.8526045434801015"},"_hasShrinkwrap":false},"1.1.0-converge.20190517203306":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190517203306","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5e64ea0f0dba150df3fe60ffcb139aca23e6c89d","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190517203306","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-rumAPkUxD091RjlxtqAw/9D11P6IVipDIiuBXBCG56PfIcIJk9gqvraG/PGxNHcZxai0Glhbmel0njGTOuN2KQ==","shasum":"6f71641dbb4d65f2364f6bf35330a09d2245bf0c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190517203306.tgz","fileCount":73,"unpackedSize":292721,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3xrZCRA9TVsSAnZWagAAEeUP/3Djt+rVFDkMBSaRws6r\nMmFYtkqc29vk93LL6troMzQ0dvFlexUsKys+fkBlRqDZiZDIMOGgMlRGF1+u\nUfo/Ncw7nnLZxNMuD9+WDpovwBJnbcYd4gYc06xOqRusVK82bQkmohRxJVyH\nyRhhsaQduc8Ir14sEP4AqxRHKodVm31ivQ/e0cgm4YSBt7D/dosL4Csk/y7U\n3uQeFBy/cjryLhJntG7JVNEWMgRRQpvTs4LzJJjqa2J4UGlHlPDbHmYkY9tR\n9WKF2brUGeYbuEgrhlhRot7ap1qKe+xfxFsiZApSHWXdmS+MLP/4oi0SwqEf\nZ0K8v+P0YLRBOEKV05epkm4eLfw7JCQzhDVlYWUrX2h1vfBifY5F1MGv3Vnq\n1U3BwQjKB6Vrqu66G7Uyg50dHoaHv2LNl3rIefafkBbPOKEhb4nt//v3yPxV\n6d5jjm9Qb1tr2gORymWMn/xoRxpdUrYdFUwtTKlkbfWUQonwxdqlVxQ9RAxj\nkNakE95FFg1ZD6ou5vEYDAdkOZRgWURqApzXSkryMZVE2IJQV//lp/5zG33+\n9IRy9m2BoQE6M0EkGCupsbcWc5WcoEbvLlQ5BYCPwEB6mh6P7HXPuI0vGF8O\nExltKHiMhd+X0x+vT6tSu3TvL1Dcfy9qmbEJKr+/A/1VXGU0a9Yn3SKzUeGp\nDYec\r\n=+2Qb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChJg9pfiyYF8vVTMpS7sJSpUDWlIx5nJurNVZsVYIeSgIgIYhogxoGLWKzS4E3IEIDh+2KES9av2Iwdb4n6J3zhUg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190517203306_1558125272790_0.9190780124236866"},"_hasShrinkwrap":false},"1.1.0-converge.20190517204209":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190517204209","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f5c596936f3164c1525b9e0034207dd405a62158","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190517204209","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ecwCYuMKqtwg11r6D6BZw/oW4AYwkXqGa5SQP3DlCR9a1D9igif2vBN0sxiXcRY/nUM92aH9RTblcdwZFBiYgg==","shasum":"176f66ba7601132ab39132cea74c3957dcdf0713","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190517204209.tgz","fileCount":73,"unpackedSize":292523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3xz6CRA9TVsSAnZWagAAroUP/3B4ugQ+/lvc+PO+eKo5\nqPkQ3VykyD7DXLBOLjjeuQvehpKPwkgUx3m/YGVY8Y9x/bPDwUc+hbGEaJWr\nis8HOLyC6FQfaSR763AJFqlcJPmwj44/+MhYhM2ijzV2LoQ48t13rRCegOsX\nPXAQqgAfhjFwKCmXMh1cc34F2zGfiUpE7pfwgIMkL/h5S5PLveFKZL/wbZCT\nO9KCv/WejAK+ElcUEjvBOT7Vk+72KXNz+3E2O2MZT0n+iW3VcoDEz9uOYm0r\n+GnFkz+7xYgRSh0QN+lRcJ65hykTUBbpGfQpYWhMQbBHUD+WCtwcQeWB+cOG\n1YqKUryu6x3ru1G9kLzBTVGtIOPZjGtQ+SMokRQRdvgLg3jiPUaqzbERRYWb\nuRyz1RXG3mJFPZdyurfNc/1iggr7lRhjhZaPWtYHlI3dpoB+n6EsT+dVnMhH\nmFERp6G6VAgzb7uqOiBZJBoyQtcuOo+1ucUVQUmiVHgGJTIRVC43vJD0VrJa\nIcJbIseQAplhdwylpWZiUOLcmudXB7hgVjC8TDkLDvfF0IazIT/duPE4aBwm\nnIhANy8LhR3cAL0hUBFeRdzyUyoezbmtqKVQwG6cG3PP70VTBYwQXvKRUanJ\n/1WJSM12DXlxqZKP33EqkuPbNGkMr3XzGYZTYhY4I74ONZb6JjctbKSpcxi2\nvUYA\r\n=BIBV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICESJAwgxzNmcHRJZYIvQ0N+03usYMX/Voq4J/g8MP/3AiEA8i748Rsuy3QesQUCt905GJr3Lnd7FUqHARgXyEen36w="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190517204209_1558125817583_0.32097463581745433"},"_hasShrinkwrap":false},"1.1.0-converge.20190517214636":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190517214636","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"e6f1e1011820cfaf6797ad381099bc28ec508f38","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190517214636","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-iqG+uvuwPKcTQs5d2QvUHC3gkVwMP9c2mlnjDt5mdegdTUMErEaPgegNZvI5tnqnKfT5S+U4GwdiKimXCtjQ1Q==","shasum":"d1603989ec65bacad372b3203d7085b6e2c4700c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190517214636.tgz","fileCount":73,"unpackedSize":293137,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3ywWCRA9TVsSAnZWagAATmAP/AglPYuNzpbIMTO/hXRG\ntowtEj+cihyOqGwzyEOMRpID5jkqMaxOdWMyhZzPYgaLocpOWYTMA6+PJffX\nWzIS1WOdGbwq8jqjckA/CeF8fSSD/OUUP9SswoigeNp9ll8DgFrtYTe3sNuL\nCjDCia6jFfdOGopN/ofMRmiM3rYs5O4KPNihNhxPsumcn2tzyZViGbSbueuw\n3eCGJBNdFfFp/HuHXsTIBKPyM5Uw273h5wy+n6GFr/C4EQeSxOFfBzchaae6\niWCqA8IrT07UWyRIk8g335c44eWNjN1jujFNQ5nXvb0LzAD8NOK6LABI92Uu\nfDD7rkcInWx/dg1Xxag8x95Kdv162e9Y0wUxPbH/iSmWTYs7szTculGUuNNU\nGPPVWvJU+29GqbKISTTprtjJMFcO/lQy6PrUQNOCTM0odDmd1atiNslORKMg\nOfKjAgeNVOzxy5SmZMbNIU5f2dXWcjK0bv2VDMiBWFBnSqo5pBAYrklAVjR0\n0fgBrdmZ/FczuTNMbovrl4rJSEgGoV/WLbZsQPsaKm+0idRPVVr5SN501fG0\nBbqVd4vfWoda4fLG5LqNZCgctIt1WwnPgalazwNZsTVdhi5S/Hw7NNugRx8W\nXG/xGzNgAMpwSv98El+Yt0i9O+3KNOW+ISuox3dGypaWS9/iBsSBFKBWMTC0\nmJ7G\r\n=LxPB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFzO4+BfvlWAdr6+3LwKsRURKzcqcrsXCBmreYe+RV4aAiEAmTb1xHkIIsecKUrBBbKXKNywizxBGj4iPpqfuQ0J7e0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190517214636_1558129685390_0.2975714888616938"},"_hasShrinkwrap":false},"1.1.0-converge.20190517232022":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190517232022","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"253666139b9e0dae17feb3326cd17ed7c1f982f3","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190517232022","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-hyxuF8g9IvlvRBVcMX1QhrV++civTE8eJ/em6MsomgfzY4K8S2RGbMRoMXU6X8++krB4rLWLWrLUOlJ3o57tkA==","shasum":"89a95c4c2b3070fd7d906361a0abff9016176235","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190517232022.tgz","fileCount":73,"unpackedSize":292995,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc30I0CRA9TVsSAnZWagAAs7wP/3Dhy7X3rD0J4r05BPV6\nbvyH61oBQ4OtXw51IgHBeZnofigxkhYXZyVs7mmUWAtNYFLxpQDpXUl8RSQt\nxRgbrDeGrWMuFrUtGGVliQb9UvVKivqyOcaVfcJrcILLagLuJT33GJfwO27H\nROt/6n/edQILHLk7HR2Ou1b+FkZ+Ui4fKNSFM3+uMpVedNfumAjbEdvtlEZI\ntmqg/CDODQJS9JiGb9eoyCyxSrnpah3g/Vr+7nUMC8U5dMlpee7m6K4Qslwy\n8uN/4oxZdONwVuKFqCH2xVqhkk+VUyRrJPG56g6S5VzGYHSvn5lVA9JDLwke\nudNK9SkOBTnyGujrbhs5+vBcyiZCK1ycWvWFDDOp0AUIuTcVfPifUzQTwkR+\nTiUsdcvf7GE3UsWD/brzu2jT5YGsr6T+GS0zyTNqA22fOZ3EEr++aZV32OiQ\nSK6MHuACq27qWA/NBl+NB1cnQhVo1GtwMZasJWta+Z/h7r3dsAUBWFAYaR4P\nDdUgJ62uq+MuDjjmS+kfeJuA67gf9yM8fndQ0ESVfr2WlXrG3m9xA6w4K2Y3\navCmIh+KcVlHj6z4FWY9FlFNi06KE7T0p7XoZ8W3cfzrwX/z0PAlSGZ7URW+\n8oUfbGNEcTrykEyhkWldg9jmJ7AorJskIpXo2NoQ2KbnVGYOqK43XVTA0nsK\n0+aP\r\n=yw0v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsuf5E79Bzln1GrzIi0lIgnMEqUPvoptGdNXRbFDY+9AIgGQHU2DoqI1cVnhcd5RPe6jYylcUWVks2KNksdlRrT+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-analysis_1.1.0-converge.20190517232022_1558135347704_0.2803908426851347"},"_hasShrinkwrap":false},"1.1.0-converge.20190517233212":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190517233212","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"244ce71d53601fbad029e967159ac30efe420368","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190517233212","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-AZv9Q7IwkL2Q6v7wm1lqy76rY0Mf6cFn5vdGBbaNIuwAtH4oXVNEE/hvwp9oUExJmWs+xqtFjgixclwrrxmHnw==","shasum":"f28212b43b2e2c3821438fe2df5acb518e98bfec","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190517233212.tgz","fileCount":73,"unpackedSize":293480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc30TYCRA9TVsSAnZWagAACLQP/jhI8kyf3kJjr/sOFDL9\n2/s54GiHDfuV6cmcN8PxI20BTu7qhluSIn9NFEnrhVM25PMZV1kaB+uoXagB\ne+2uPKVjontYG7+WX6GwhycXsQIGOQLHUG4x/FARp5LRJ64wWsKOrxwp2Il+\ny/4hTU85jmNwtB8PS1WmLYBleuR5WvY6VRS5Py6FFCLAQBh3k1qdjJAYh0UH\nHsJ8PlAfiMlNNsBQCv81vsPla3GbLQH9Wrg7yFXqJAocENGCFbYd9XPbvXlx\neLd/ywvEQvI+ejzl9oO7SHN/z34eKfzDGeTQZLsC8IzHYxZ31Ph5texlxUtu\ntpjdezSDAELEGcROZz4tRfpA6BJ7xSKYcUcFu4UMA9ltqrtXu6ahGSN+Akik\nq3Cf6HrSHh38SRPLl8LAtxYloD8BFRIzx6tGAv7UJA9bVSElyg+LPHawIEQM\nPRUqQXmegFI/TQuST+YQkh7LrkxYipRV79iv/AIOlq2dDa9JLw68tbTHXsL5\nXplsyA1UlnAh2XRc3IXq17vrjT1XOxrGHPdKhU37kzlZUk4/2HRjarf5MtUT\nkiVxeibo9zAocJ7XgTUvbCUZDoEGaLA0OwqSsFkYp2wXuMV/kjv6CoUZD8js\nNAAzvboTBEMTKKOdhGMR2WV9AlByC4woPsOlG690HomGLRLn9D69fusQQlcA\ntMx1\r\n=LyLZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQmj4QdqNcEAVKMJkxnndreK9o6Wn8fzxYuo2aQlzLuAIhAMIy2dY+SZonjGp3/0hy9F3yo3kG9G1ko0sV7BoeA36D"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190517233212_1558136023955_0.5117150773371189"},"_hasShrinkwrap":false},"1.1.0-converge.20190518010211":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190518010211","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"c0a9c20e6761649940bbfe92f6d3c17971edba51","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190518010211","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-TaHxRUR7ikwnb+KZHvRMWTLGE/ZdpJsZbqlaH89NOiXhv42Ftm59awJcTYEVXQ332bZdlEzgbdojiQD2s9OzQg==","shasum":"332add7d6ff8a741f9963580ebd33122ba08d169","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190518010211.tgz","fileCount":73,"unpackedSize":293507,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc31nrCRA9TVsSAnZWagAAFLMP/0HmjBPaJINEhJbXXOrf\n7UsKLg2BMi1aLsnk0lNC3qpVs4opUFNpxWNGNLtJuYWP5UPkFr5ZHj6b5Ldl\n0lIZN/P/2YlPJwKGcaM55PGTNGlHo9yWCQQC0lDp3A0J+SKpobkqambiRMLL\nsvgFJBwgEcJzvcfTqlG6FZqdVbLDre8jpGHaz+3/tLquAfB/LKfahsxP9Jtl\nyhra1C6PB26S8p2rs8kVOACk3mAf8GPmq5NQaHQHxeGPGnCVV3ADo0L4gXsk\nmJY03H5u+8cpFcdQgfcQWhxsGHni8un/aBLwuqsvYkkz+08CgHjadvr7O1tv\nY7jgbE8WyUc2W+T6Tcu2QkTECerrT4xeUNLNyzlPrvjQoGB/1ab05d3I31Sv\n9bgPCzLP5+1hx3UAzQHbRh/mtICgVAInwCXHuw2ZyjfNRmVGyptkesBFQuo1\nidw8C+7rWLxWVH6OvG3PhCwzYMRx/ix5diWRiqn+FqNTOdz4Feqeg4ggJDMd\nJOglsI0yiln14cgIq8vWvVDUjU4ETc1NaTddjib3ycZtm1cJL9R3yEghCjc+\n68F8fNd7aef2+JGHiJuir8wf0Ei34w9O8FgaQqZILhSXkvKAUUqTTlKF/5uI\nLZ6O73kwK5pOhj8X3H0bFF4wNazHMOVF/CPZHWVdLGFwju/q8m96S7pC1ZBD\n9Bu0\r\n=QAeZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDm85KHSytW2o7EzepOXBxmhb7p4RbPfgn0XRFMh3ifDQIgXtqGXgTrkyeZHWeRTm6P4wT67Lntzyf0/aWGUlmu1QE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190518010211_1558141418239_0.08458595242693301"},"_hasShrinkwrap":false},"1.1.0-converge.20190518012201":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190518012201","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"3821b600cf58e5413b20ae776c668035da653160","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190518012201","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-mtmz8LpmY9QLw75JzScZ//vCe4ipv4c0ySgrMdzTIz/pfTX//6LNneP1uf87qt/YtpitPks4uoKnI057VjdHSA==","shasum":"7b19d1b145ca00d7e784a68d9cc537d0c3fdb421","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190518012201.tgz","fileCount":73,"unpackedSize":293661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc316SCRA9TVsSAnZWagAAkQcP/j6p7Zg9SRemLAwOuBip\n78qDZHztuwu8jpEJ/lA+Hw4S3z+WaGvec90dMmAYrb7UH2jzfkOiV7FuCsuZ\nDIGp0GBNFUWk0+/Y7Es1rJwt95yzzIKxC5XaTVDhAz8YCw8wLPN3wnUFfX8K\nRcPQyHnJNiwI7U4l+t8YPIz9NulGP6IVZh9lfeHwNjrpYapR1Qj6SwY2c2ES\nqZwHjPwqmtdxKc5R+HZTWTM6THhEzhvBAVASGCS0JVFszPwo2cxKLKTMgaZv\n9qJrcmf3iujF48HFdRxlDnhPjfPV0RJJPF88Duw+8WP3G/vCqeVV87RJzidc\nHC1A0MZR8QGkVgzYov0de0ig0E43lEjF3pN526IFIUWjeFzJwRfzUqoLrlBK\nd7KdNyKFSmcSaaLt6qYXRggmEuSQSWybUVDqKLb6AreWtUyeIj6YXYbepTd4\nmbMrwy8d938Dj62z7B5q1BylxsrO/yLJNFnz21qyjmrIw4J5RdwtukxwyRFS\nMRmXuPjqFV2FN9AzGt9NYkmu8tMK3uXF/GByivNOXWiSYzEtA+WnuMnVwHNu\nqHZx86utVBUIg1IskyHXrLpRq9/8zspASv6v0z2ZAq6Ww+lCQgmjJ1MaUPSu\ndxz+R/J6unXmofacC0cM3LtVHTVRKulwv5TPqWuv5sMTcPGmLkw7WnUynYJO\nUTTi\r\n=Ocw4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICFLreDNqIv9kHtdgEJb0peQqtQRtp0ieq60Omp8il1hAiEA10xeyK4B5tnEvB3Z0NbkYTxrcMOWdKlQqfU9+1IJ9vM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190518012201_1558142609342_0.853195403327941"},"_hasShrinkwrap":false},"1.1.0-converge.20190518170814":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge.20190518170814","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"107361d28bf109fd10918913e5eb3c8d2bd17c40","_id":"@atomist/sdm-pack-analysis@1.1.0-converge.20190518170814","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-lDm6orkWQOmBbNdFKjxgKQLU/Sz3OyM5zgwADRqbpXPZnn0hwcDcm+DXFPBWfjGhY8LPzlYczQNxdQbsey56zw==","shasum":"eefe72df9f086c2bf8bad380efffa680583a55ff","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge.20190518170814.tgz","fileCount":76,"unpackedSize":295201,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4DxaCRA9TVsSAnZWagAAHd0P/2F69/OJ5fgzQDNQF9nr\nJtbBMStIm3SwYd8Sv+ah7a7f2Z0xjLqTE8Vjuqio+jXe16skesFlQbt1fqBo\nBJI++ZTN775PhjCueJypKgEtOg7dcrKUlJw7u2wVj4RKVBLibMN8UXXO5Iod\n0f1iCB9C7sHPlfYccQ7Q9nIZwl3yIQrTjRMsNXD0AXceS2Egp6KwRaaVtaFY\nawixFWNsF4wm4llnWk63LkMqJHGNiw5f5VuBIz7+fZQcaEJJX3003eZ/zFf3\nIOHt/zJU7tBuzHUNc/dY1Yna5+TGWk85fZfMA9Zp30ef6hC8dmouYVgnOpoT\nnQ/DzgDV1MG0wiDlxCaadzHuU0QJWBc4qTqNBBy2SE9wdqxf2GjB1lG0Ad2U\nM0XXDa0E85pvlw0H8Z2a9h2oM1pXwFt1/m5XoiasEuyJ/HYhffmV2kQDVVCN\naKnrIVnkWbhmr0Cw/6OMpSgqMxwPFC+o4inP1mDnt5XCMSK4dROPkuVIj+a8\n04pRtrSjrEAF7E8EaWKmsI+V1vk2Imj1oFri4N8I8oANIO/6foGfN0wVJ7D8\nV+xR8R3pRK6RaebMDgl8aZSuj8f9FbKh9m1WkfqooS1+pqYIueWokU/w8C0h\nQFgtJZbaJOZVHGsFU1tFVRzyu4i+mg7cmhVsVnHEHOAog+TNe408rYX9TQlf\nl1P0\r\n=bpN9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC6l50EZO3busqofqM1Q1BiLCoQu8NkCTbYLh27jaoOZgIhAKktl4C/R3BezVxEz5H8O8eKFkV5MHvFKZB/P2dw+Nar"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge.20190518170814_1558199385755_0.02880798627476766"},"_hasShrinkwrap":false},"1.1.0-converge2.20190518192709":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge2.20190518192709","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"14d7136bc9f3e6f21b663f92adf20a2792d94a7f","_id":"@atomist/sdm-pack-analysis@1.1.0-converge2.20190518192709","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-WPjm8HZtIfitNDQUX3TkDJd/ENRIqGKWsmUiZuskR9QeaiaVgBWoXqe9i+2giYEfalstIXWRloVGxisI1B5jhw==","shasum":"9af630d580be5350d9d8537ca33e598e36e272a4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge2.20190518192709.tgz","fileCount":76,"unpackedSize":295269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4FzeCRA9TVsSAnZWagAAhosP/A8gsNFpLIAETrYoVo69\nY59O+BfBn0+xBgfjiqpw+r5nz8MYulPRikbetw/fpgwMiChYmnqzJBSSyBbc\nMQrjZvAYn5SMrtPM1kGvqcxGrLB2m6Q5ih4r0VaqJqZnk5eKuEls58cdky4X\ncgsy3v1WDPYTY0acMEu/Clclpt/RT4a2Zgd+SfzXb0YC9OKbQyaP7Pmx9Cei\nETtUrKkVvfnAEhDlAo3uFHgJ0zlOEA1L5XnJ7P1v5eN91gOMUtG0RvwMbJDP\n6CRQVtm7JoQJtEbDwwSlpo9qqsMvFlU+bUpwJaiIolJbpe+949/JHTw9r9GG\nAvPTHI7g3+v/28CsJ/VF37FY2COUElmGran8hS7WGL/3q3c+aew58xrcWRv8\ng87q5ae7+fsQqZu88KQ60NJ867j2t4Nh+ZenMwTAVMVUUhjfJtLWXbFql3Oa\nOlujizvAMN68eqRZYWNuuGJD/RzUpixYHG2G7pralqPtiQRHiejCS58ej83W\nOekw67LSwB33yiR2B7H5vAj8yej4ohPV5eTA6V3ugvzvErwfS298omtMGgSM\n74Gj/WYSyFzzkXR86TYwPU2EWgLJiI07rG19oWYejvoJLazl4j3FjgPGjmhK\nz0XJRf6mZflOLVtWwpzAVGtdLHihUNDTy4HlHF5I3IkgMwi76mCgTjFnWd+F\nI3zd\r\n=6pZ3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFVmqXjK0vjUfx4DHcn2Gb83hdXj04ks9waJhRdyyijfAiAIQKG3FcMB3nXQiPf5+a0mPEvEHlWizXy01OtRKAGPwA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge2.20190518192709_1558207709791_0.08340337073936044"},"_hasShrinkwrap":false},"1.1.0-converge2.20190518204543":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge2.20190518204543","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a3d9e94083b44401171680b52d89b8ae88ecb337","_id":"@atomist/sdm-pack-analysis@1.1.0-converge2.20190518204543","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-SJiGdP+GVjSf4Uki9tqPGoN+9r1i7ufmRXVg71S4NBa9EufkeJ2g1g9FlRZVEt4Snqh7IIVFb2N1CUIPZuUnYQ==","shasum":"4755dcfa7a48e7009e6980c28b5d20c272e5e7db","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge2.20190518204543.tgz","fileCount":76,"unpackedSize":295262,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4G9PCRA9TVsSAnZWagAAi8gP/icTUlU/m/IZl8ZqYN6M\nxXwdff2Flw8NCO6rfPRWemiOM+Em3b8Mmt5xnuHEQcDUb7i1FMlYB0+iNHtd\n4/peKwJosWdqc6d40PijPgdkyu0p3bE+np0Q15qsxooS14EIb+5eXVB5c2Fx\n1KOMR1vm3ni/l41eKMdkdFCShifbxix0LQc/NbcdLYjMqfooGyqO0jZaRhyU\nGGBztqCENvJFWi4OtcwEql+o/+zW4BIUKbDyJS5zunTxMYwKBci3OUhfvQ+/\nMMHUD64lDmgbC0PlYkFRtePOMYCEmA3icPwngd5EKTR9Qj2JSz5aD4fVRlow\nPSoax6WaGTi17MLVAa2ukv9l++l3OWSoKg1mupJ23AGgeQGALa5vOFsycLi8\nWYymngv03Pp0yW8tgxy8Mc2Aa1YMR/wwKEHXBYXX5DwfMwcczNA5F11jjSD1\nZFzzlI1JfCJ9Sqt4IxWf9mLWX6BEJLUGPsGVmg6UiMwOhNVqJegF1a5O4cQt\nLk1muy5HPNSHdBg1JfW+zs7cDZOamL6Bns6VXWAeHS+NhbRkpE3BhcIT6D1E\nLD9mrwu9rCkvtZMzevB5bVTx1C2dOQ06Tkdp3fniZI5QsHT/ESmq22dddkcc\n4PqvGBCns5s1CNrecAMcWYcHz3KeYrsKl0orgL5WPlMbuvIivbgzmFkLfk3Z\nK6kn\r\n=lXEQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGPizTsomuq55PiGE9kBZckUxgxwbB0B69TBjHrk5UHGAiEAzkE1RNTpHAVI0WyprHUNU8hCQxB/RLs2MhHmcfcMwLg="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge2.20190518204543_1558212430694_0.6941275934812485"},"_hasShrinkwrap":false},"1.1.0-converge2.20190518211106":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge2.20190518211106","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190516223042","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"80a32bff71b92f3f49fb7210f122f4333a46c539","_id":"@atomist/sdm-pack-analysis@1.1.0-converge2.20190518211106","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-wtles6qrC7jOyDlvdZAAdOm8qGYsI8XPCmdDvq7XxF3hWJR2k98GZ/+g8vdCccDzcSVqUiaA0cyOslFh62uAaw==","shasum":"93b6fc8c33e9cec79c5fe95df4b5a87cfd4a6f01","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge2.20190518211106.tgz","fileCount":76,"unpackedSize":295374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4HVFCRA9TVsSAnZWagAAeGoQAInokCe3QGUUfzVfy8J/\nR5UFIiuOgUhX1vUY3Ch40+KyObAjnCHMrPczoTFY7n7VBZtU3TXz6bXfYJO0\nA2cgTjCobYhjpS5N6FTMe+A6j7NkRETAczoUOH8WYKuANrw1cs5fxlJshHIQ\nmz5OwWPsgrv+0gz3CqoKJO1/LzJ6XqWkSapj37/i8tYUNaYxJ0M8i+C4IqlY\nJS1SiLsanCeb1hO5WL0PH9sCLtuz+51H1zKJPDNids7l22sCtQZmzRXr4p6/\nhjc8VI845N21n04C84YNn+0savS3m0TVaccSVXGpu+4y1hw6JcABsJZujwql\n5o0qxOdA3pAAg90rVguvVbyNbp6h4XhQHZwvRSBq7WmVvyTZDB+yX0R+btiU\nRYLaOacXBwQVPBpyZTuaSRSUgkjT/SrFqISh3whZhxq7AxZ548XZz2MOrVpl\nMKZ7Csgg5ZsVVKajRYgTSWns6geDZImhpB2SClfTFl9GuV4Qgc9Uz2qyQOop\nWes+mx5tkwXY1j3vSZoOVlFktsgfTe6SlnZ/yYyZB7LtwJmXSxliiMygOsr8\n5x/XAcf7FLjX9IQ8AUhMiMKS9D5wP50dmDI/Q5M220w39dS/cl+ouMOV2RZc\nkCX+SoaPzSa0CTkdlBwou0WdsB07ul2Z5f34BUmN4TtU5FM3NZroSUaSI7cX\n22Ec\r\n=sAib\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvi5tvWolJTUGBcEGdO3yIeSeppzb2tvWQtFx3Zx4ekgIhAPiULlyUp4vlSZt+ERSQ3cw+93sCtSYEbBK8B+I7OkeE"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge2.20190518211106_1558213956800_0.3322889047299358"},"_hasShrinkwrap":false},"1.1.0-converge2.20190518213249":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-converge2.20190518213249","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190518212054","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"cb170f6e5e9019c5870b5a493e58643a17ad61d8","_id":"@atomist/sdm-pack-analysis@1.1.0-converge2.20190518213249","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-V0F35k8v41uHW34Xd9FCz1Ke5X/57ABEftUr1jhH8XGDeOKqAWBkYJaqxTGyiE2tXVpyydasIIFYhT6rd3A9BQ==","shasum":"b187277850acae3d18d9317835355814fbf9df8f","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-converge2.20190518213249.tgz","fileCount":76,"unpackedSize":295390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4HpeCRA9TVsSAnZWagAAuW4QAIupSw4KHa/XceVpuNSf\nM8bZDGukgPNg6RdtrDLZhroQoUz9/qPeEw8i4zpcRUHVJhn7i+Bw/Tsg3rTw\nsh3C4EAYSJk0aSCBwxod/v1JNf1RucROpCzATznG9t1fp7FqS+qlU4AJicC7\ngoCS7yszOWJdBsTOzwdhFPeWguu569feQJu57xF1KZ5r5sq46In3Mc5urdAK\nOHoi1yOEU/MciD++HSW3lnbk6JPwtN/mmhEGTy6b4e7BvpVkem7eFw1/es2X\n/dyl4vmZFEF+PCTVt2vEkPcIumkVZq+gc1zr+1NtKxjaF71OqsvIu+IEIpS/\n+kW0xzJJZNgfcF6RDNiWAw4LQnRFRkybcrALLKqsn9+jbAQVHCXDl5nKuFPg\nPPCvfdzJENd6ynbMrgQLqRPBHyrmU0YGl9WArld1LFRGScbB3Ad2hnKJGafT\nLGLIMrccw42yqsmVgyW4lYgG0+S4hDOZyp0kwaIw15RdleuMlLp13JhGuWQn\nT7EN1Nd5LoxtEdqwvLo7MN65+rz710kBLTSUZlUWl/wMYndmZvN3l2ZOWvQg\nyL0FcMwKmE/F3+EdIwhIpjshQW67wTLc6XFWRCPZCG8yw4EpjndhbPUS2iuT\n43aEKoh5M/ik+MWPuGP52sHcTcG3ZqzYeeVCKjMi+JGy4OuqnSMReGkorhRP\npMFX\r\n=Lnne\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBJehGD+NpvCajIlR75dX2mZ7MYyfr+Lz8lYkEJqkTn6AiBZQRc+CF410JLhECTJbUkuN1z2OFijsIuQcyPM+0pNng=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-converge2.20190518213249_1558215261475_0.8858463891275572"},"_hasShrinkwrap":false},"1.1.0-ideals-change-the-world.20190519212252":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-ideals-change-the-world.20190519212252","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190518212054","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"cdad698530fa4e19c8e230329ba0b9a29bb0a718","_id":"@atomist/sdm-pack-analysis@1.1.0-ideals-change-the-world.20190519212252","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-/Mz33K3XTyB6kRd1tjlZT463kFZLvomYBaJqu8BbXbkLG8+u76iPUyxrCchLC+IYKl+EiwVp0IarxQqjozfcUw==","shasum":"c39f3889da0f78fbb48e454d42668425efa0e85e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-ideals-change-the-world.20190519212252.tgz","fileCount":76,"unpackedSize":296152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4cl2CRA9TVsSAnZWagAAAbsQAIGv3HRRHJ1HOJ1/7JWI\nQm1Y9mDL+QIJuizJndEbt5G79NAzHfTh5Hyx7pFKf7oTBrYGTJ7ZRk/p8kmo\nCj6hILFefYfVc/2ZiltsjX2szSWlJ7/QDUC/Hj6wHEXTQCZwXxEiaGb6fj0Z\nugUu7mF2WKl5uBJNO9ITial0QpsWjP9wuGnu4qwsnqvIaZaDMa8cCKtbEBhW\n9fzgubKyZMG+jNCPsic0HqdDpHy8DirTzoR+3xYQwZvKTJctG8iWeOzXRPK/\n0ds6vXGyT43RRURVIS6RVAcIdWltTbIthiZelX2Atwc1a3D1SYgZkXE6TIcG\n3wruZ20YyiBRHPi6dXYRUAe4I0nNBpeYfKM3sKS98ruG0UQ0jrgTzz7NX51V\n0dEBnhDDyJUQKnD6pNxAyS5cls+5X2uBIVMhWJnidHpdmXqNm9zwPUZDlbqe\nPoboaPWgkhWQGlG6+R/ZPCbsgrniG9RN2btIJAsDSdQ6+9+i1PxeLQFQ7vyA\nNCRBxS4E6uBUYFoZQUjVrCJzSAJ0pGfQ46cAaoNim+AgvyaXHQ52hxQg/fUN\n6Kko9mBbMSjsZ3uUEeQ0TOwPhjgsUqNl66adXVoo/8Zke2YvEOLgTrCvL3GY\nYNUrMWiH751bsQBrH8kWE2aNShPo8rw+OrV4IYVr/pdCddOHg4YtH83DJ7fX\n+kRI\r\n=8nWB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHkYfQJM+3vf0k2wspcYzYShH82/bJCS6ZsuQf9EbJN5AiEAk9kYR2wdY7KCjh+Ptfr7mpQtPHe12QrySYok4L84KBM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-ideals-change-the-world.20190519212252_1558301044014_0.2847045929229446"},"_hasShrinkwrap":false},"1.1.0-ideals-change-the-world.20190519215236":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-ideals-change-the-world.20190519215236","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190518212054","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"075d8f24ba6710deb10d749a184e7fa59dcc8c91","_id":"@atomist/sdm-pack-analysis@1.1.0-ideals-change-the-world.20190519215236","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-nwpF4ikadzH4xCynsEbvjZrVEPJJywnBqQ7OIxkfWCflVzazq4QZwIR+zZ8YzhEd5NgGTIH4xvLsk2NKWaBinw==","shasum":"1f248042e4edb4e6c023be3f95431df54764aa5b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-ideals-change-the-world.20190519215236.tgz","fileCount":76,"unpackedSize":296328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4dCFCRA9TVsSAnZWagAAL9oQAJCN7gxAe8knaNlb5h5i\nKS2N8iROkrjppWa7djClEQO3GZMUik0fRfVD+GEp0VtDXw0kD/FkUJJiS4LE\nN/FtY5X65K+ed2wLWnmwEPgOOKMoJ5bcV5kxP2t9g76YS1o85ZsUIHoiz/Nc\nVQy5eT2pz2Xh1XWw/LFfXnYjABqFhse9iD9NEYT3GJ8pQR7NN4sc/KsCQpAG\nIU+Jeyc3NNaqUk911T0RJBzwVyRZlgxosdxHY78RRy/T4MeIY3Y++TzNamnH\nMU2RbuHC/SIimCFVDnQHYXH+A9M9mSkz5NrdJQG+7KHeC3KIBlnmM87NyKSS\ncZIeTczn2D6EOyNC6Hvl7j6FvtWAZpV/UR2f8VwLGENMmfQnWW37UwSFejms\nVfYFYZ4zuWUmpe2MT64HqVADxwkNvkmyileINwpJiVQfZ+qdFImv4tvW4Sjs\nT/2G31lQ9STv9n7/6X9xZnoRDvzvvBOzNeIJPNMiIbdTdrJun1RBT+iY9TXr\nzK03zxV6dO+HhcAZ/qmLwdFuLVgFSQEQhHx+i1or1bHlB5BIKsd75huQwaIl\nPU/PECGcXTfV29K9EYJ2CQe3zWmc5kMLNM9o+ZpaV6UnwOm2DYD+mHNWw4Ri\nq8HFwQ9eyfrob7MUNLJfkLVlqSX93RsvHTwXenC7NXwr0VcTSkM/TzEqtgej\niNVx\r\n=W/QJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzmysurGJAWQo+dhCUzZb0fqvR4Pyv+GoIh+jko0RmXQIgfGgKFvph4MHPbpLfDYvJnIbb8Zw+4xLJg0rQK3lWOuQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-ideals-change-the-world.20190519215236_1558302852897_0.4065635061513697"},"_hasShrinkwrap":false},"1.1.0-ideals-change-the-world.20190519215622":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-ideals-change-the-world.20190519215622","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190518212054","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8b89e7f11fd18df8e79f83e0d6c3cdd034143f3f","_id":"@atomist/sdm-pack-analysis@1.1.0-ideals-change-the-world.20190519215622","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-ytQxLEn2dcLH4DDtKVZQkyszzexeBe2wfS3GpaP2WiNiP6MiaKvY8DLS11fuUYKPFcpuHHLtFMe6g4hk8zMhFg==","shasum":"ba69d989c6aa2892b6194d48a0be118bbfee2530","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-ideals-change-the-world.20190519215622.tgz","fileCount":76,"unpackedSize":296337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4dFkCRA9TVsSAnZWagAAkq8QAJd8DK4AI4kHhOo2x3fF\nqgkLRv+sDUelzx1M5Tdpl8ssULVV6Tf2Un0NIZsPl3ivtgWCwX/AIuu6RrnJ\nQg3ItgsUkL8UP2QD3xdNYA3zAd13BAMS/wMcA6hxIMVgeER+JOSfiYQvx+CB\nNr9+I5ajOBFGzOMPeLxMi4DcNmWj5DBL+lwUYW6p96Bzb9xRNXqj7WhCDJxM\n2RKJ+Pjw868j4ATnPNdVyefBTHMEzSS0tn5p9qfNQi5zV+Id3yBt/QCe9uKk\nEnJRMV37ASSoVgdDH9/bWbLyEf4+eV9OALCJeJuYbK2CHF4XHWiQqlWoNXyi\nmQdA8LGHvCnM7+PxeWWo4MWFAHl+IAVX7oIGEEjkUhZaeU0BX+idAnb3NTGv\njP5UUKPQxp3a4SV8hmWZeSPQZIifu0ByYA86QJD82CZZS9RrEgRfO7zuCTNN\njrLtSXiRQSap+3DF/CHLyaa22bn/ZlLhsU2eATy08cjPcngUQ7XpoCP3j+Ba\ng7ozLTCrtZlZJldqdoZmXFPBoHpAKaQUBtEeWqX3M2lcXxNh8hS7bhzTK68a\nMv8Wzon8bAFzeuDxVQIqVVTTg6U9oB/wZH9g1rvCt/NZb1kgjrXSdOA9Klq8\nCPTwZyoZgFCqijO3mMqlf22vXSD4XPJ1nr/oBHtWjX778HqWZ289/+MGQtgK\nM0u2\r\n=zUvi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCeEjMYaJ16eMSHEkMg9brE//G9Zh9qsf0SG4wcSgV1gQIgFUuG1L+o/KIvm20+8megboAudjlytOHMVPwQ9HBmuvY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-ideals-change-the-world.20190519215622_1558303075453_0.8474785670876159"},"_hasShrinkwrap":false},"1.1.0-ideals-change-the-world.20190519220841":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-ideals-change-the-world.20190519220841","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190518212054","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"66654a9a919b45e40093f611d326566c991a1323","_id":"@atomist/sdm-pack-analysis@1.1.0-ideals-change-the-world.20190519220841","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-7RzkJQgXSS0B4Et52a5sXcbOmsI43AMR9yrpzRBeWQfH/DHZKflvIjnFHN1z+j/+T8N6KDkbbU9WwJkoGoto3w==","shasum":"cc4c70fa1ef4417c72b2b6f7762c021d82d2d3a9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-ideals-change-the-world.20190519220841.tgz","fileCount":76,"unpackedSize":296299,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4dRHCRA9TVsSAnZWagAA1tIP/14AlNq2/gQpc0zSXldB\n555S9l74DP7kINKJtrAuKeoqTxDGx9L6wyXhaNH0qvQjdJeMFwuSRXWKF7o8\nRbxkCRayJPxRSXI/iOoI0lcrOHbMcqlYonApe99HfuQWrwl57D+CWWSh03kr\nqBaf2fjdzNHBjhqEIcQE+SqmT41klbKljQ3NwWy41dpJBBpGVjDHmbUpBx85\n1kvKwqBV+uv8rksHlAop3DRwkz7J01b2Qnb2LLF1ghQ7WGCtt2n9KcGdlTAg\nQBxFXGhafrF0LdA4RdNItv67IjyNYobBjSlLI7AVZVt09fqiTqsUgFqDYSRq\naGgmczEGDDsS4EqfhnE/Xubc4f7MfBkJYH57CNtm9ZskKqi9AhEdWZPopx26\nx0Gj++OKTImUhisrfvtmasWBRpbHXcU8MoWx1yH1WBhcGEvOoUSNbDvJLxmd\npn9MjiLzQ4E6bm26s35sRl0lhTD3qttftG9WDvwBEuz4jWchcWDlv1HC29R/\nu1ZnTDknkV4FE7V+KWwhDRZhW8Q06ARnZuR9huIQ0AK9Ry4S57yARkbs0K9Z\nDEy9ytOwS0jBjRUoLRrZdFmuhwa5Ee+N94Llr7jpMUicNsILvy9VIMzc/eLb\n6KjZrumbIequfjOOSOkH+h3DhLdWuaIXDzs1B9xu2RvXdk+QNv/XvbwPKaVu\n3spT\r\n=EsJJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLB+W5jpqE4X/2zlTwH1/VSMhMSF8hJIO/ztn7EsMi2gIgDlpv8Lp2V0oPnNMiUJYbSnXB0hs7x8jDvfhHXpXkqVE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-ideals-change-the-world.20190519220841_1558303814988_0.4576328088538495"},"_hasShrinkwrap":false},"1.1.0-ideals-change-the-world.20190520213913":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-ideals-change-the-world.20190520213913","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.3-converge.20190520205936","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"94b2b320adac9b1640389bd9a38bc7f3ed7e54bb","_id":"@atomist/sdm-pack-analysis@1.1.0-ideals-change-the-world.20190520213913","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Va9jhvi5aECcJ6eNMniDxamMvM4j4f8rJj/HukhDrNJRAOGimty1BJDTAqu3jJVV2kq22QRzDcNz4i73B7cDxQ==","shasum":"d11bbd0eb71b7dab16b0a6b6f41a036544823ef2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-ideals-change-the-world.20190520213913.tgz","fileCount":76,"unpackedSize":296337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4x7JCRA9TVsSAnZWagAAYM0P/0WNORrqYw7y8nvpuz4Q\nT6/nKnELM5RjFcG+OFMEI3DEhOmkaf4R1PDu8ETi5uoPaNxlx6bVLFnfoSWb\nVGadCt3ikS6e2j0DV/t93f0kuJkYpiUWLqCkt9hLegDoXbTFZapMz1c09HXR\nU7msNwQXozyKH/tamgY9fJyF0LkQzMaO2Zm1W7uGpbasw18OPocyHkw7Voob\nqRF7JJ173o08JL8wWtm2tbJlnv5xcMYn9D22tiGoe1/e/PZKw09WDazb172c\nx5/1ShmiXh5LNeyWH9DBUAujbWxHLm4kZcAJOvqMGpNc0rZMfTTVGtdDjwNb\nLQw0GSkJv8Cq/iF224JVVfaO+10ShMK0pj3lsf/hBP+ojY0YFjbEvdsf5V2C\nRXtrp4XKKht104g6VRW500NBp+JsI/2o+ILDbgMoVPte7GjRXf2TLHFRr1C+\n7bXcDTaQMGtzRnWc1uWIeiLvXcTlp2xuG/riSjLf3oLFmo5EqtTA0AwPwO6N\nQ3XXF6mtbdTjGXW3+vR304EIfst7RP8cJZb4+Hi624Aeyy+ymozv5ZFQJJpG\nRciKp9R/C2Y5NYrLAA/XA1WT/5kY9Bcj45+5+uMQs1ds3p+K+IbetsbW72GA\nsqtvhded7glTpwy1j7vL31lbEh5rX8CYkkTWKDPrhuF49bslRa4xT82zX2AB\nVKzu\r\n=1ACL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD64kZIF0IXWgmYYsw3iEpMQxkuTjeGOsHAKdHYYzPVgQIgM546uDJoRqr45nR8wzr9rigXh9qWdpddyaNjfDwQc3o="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-ideals-change-the-world.20190520213913_1558388425079_0.06756353499908796"},"_hasShrinkwrap":false},"1.1.0-ideals-change-the-world.20190523231208":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-ideals-change-the-world.20190523231208","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.4-master.20190523230150","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"49fd6596890c2b92dba731cb5ce61ccc44da8c36","_id":"@atomist/sdm-pack-analysis@1.1.0-ideals-change-the-world.20190523231208","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-IfPaig6wZwInVTYQ9VGu76VSL5BZNgyrMLiGW5qZ6MpzeSYfQtS1rHVrJfrH39iz3PG79rPpDtI5zijhgp0y0w==","shasum":"44bfca9f328ea2bead09ac47c600b9ba7547ca73","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-ideals-change-the-world.20190523231208.tgz","fileCount":76,"unpackedSize":293387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc5ykaCRA9TVsSAnZWagAAVYIP/26jwJc+34AngwrWn44+\noaeQNl/aunjOeiOiZx/EqlsMzzvjXKVHLubqUNdTvK7OQ22xjtjrRhfx1M5d\n7VPNvXdEZtrGel3mEZMj/xfBvpvvBr1YxQMZSGjlTso5QZ/WpBkN2QWtexIT\nIwz47iTq5u16RQ8u8NqWh4hF/aDKXNX2JfkC+Flg4yRAv4pKYxkwL3xKf6h+\nhckWOQa8N4DbV178e0vehGSkZ3TZ6gh4kLVibW4uaZlrmwwHYWjOSZXF4y4k\n44Irf7BlqhRJW6ULZTPnD7QLGdt5PLicmmhslnjE/2sYOidCZSdCMzJHlOpx\nkwOzJiga6w+LRp2J8DDyG/89qvetJYyXxSoHb7ugCFmXx8dYK50Md1O1Go5k\n3/BhZgj6r9P1SDPGAtW770SHmMMjSDCtggEhl65MY5xZmRoEQYOGPyOpTZno\nfH9+9mbdpYL/HG5wkZGMUCGmpUj0Qzit6Db5hqoXQC4moTpi8an3nW0XPKnR\nmGPrRiWeUL9zrme1wQmxzsLRuw1EcafO4PZtbHqcWH6z+zFwDsg+cug+3hFA\n3TZs014LJVB8T+F+1FzgCIm3kbG93coQmAkjkamEh8N3sLpzh97aOaSLEeY9\nA2GcawVh9adNRSwLySPfJu0lzZ1bR0oPLCDUGMae70RcN2z85uFph0byu8sh\nPu2v\r\n=rO6y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCI4ML1m1iMVR1IXGcNneoEcthRivWjNumxE5781V57qAIhAOVeYOE2nKDsp2dUcz7kvRr7m9cTz0R3ZoXHZxyHflqe"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-ideals-change-the-world.20190523231208_1558653209686_0.5679844681396466"},"_hasShrinkwrap":false},"1.1.0-master.20190526073726":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190526073726","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.4-master.20190523230150","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"97e1ec12aa1f0c2920208c1dd74cda639fc1f22b","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190526073726","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-3zFycg6/90w8raZX15b2Hl6aV8shIVvR4YrYbNMo4YG2NW3/f/F9OW8HImNWE2ZcUqssFi7SKA0Zux1euhtbbA==","shasum":"357552bec7fbfce67e1ccd6c5c28d8da5a532739","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190526073726.tgz","fileCount":76,"unpackedSize":298100,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc6kKECRA9TVsSAnZWagAAJPQP/i437gQuqrQYw2MdqGj8\nPNrrjgjwVsL01fR88Fj8s43o0Vz6CbGL1hJwrOL8NmbBoTYOZaQhltdVi60g\nzkauAbQPrFexcfvPtH2ekNdxu/Sv90ctdwsL5fIjHWdgOXZEvDWlLwiP1bJz\n3o4q0ZDAuoPQS8eWW3de22rIlq7qZK53iBXkKyn2oOqf/kOOfVD42tv0eMtQ\nBe1b43BGUEplkth4J2G2KcFz9Wc4bUnd3fG9RghA9v+xEWw0a7RG88RnkG2K\n4Iy0Ke34g3ae3bXIx/AFoxBH1rELHo7x+u+2mSPLDuUFwzrVFJWeIWht8Xr3\no18lvvJrXS3EjDee1k7dq+BhuoP6YmZLn8tvL5+5D3x046XGkTA+E2A9H0Xm\ngkyURoQ6SMWxDX2mXpCOXoo66L0yF9z9XK/05wDM15nEMULDm6P72BGTkYp5\nhhp//ltKp8atLqGl8sAyhw1slI36KwGqDNQGYMcMNh+7c3f3IxMFQVVYrIhB\ne25mgj9ZIDCVFND2ideFk4PaJO0zie6uwWZpmZjp4xWgj6xiN5YzyMqxcTvq\neTjP28Iq9feG2HzC9hNsW2u0z7GK6zh4LpndWnp2gyj1wn14r3F8aitzMDRp\np55RbnJzDyIIxssnHTZQaaM1hwhcqdk2O/Ka4M5KTn/vPArD3J1TiN1D3nH3\n/ACl\r\n=saHb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC/mnn+uefRtKEiHqyCeKIF9oz9azmhErnsDNQ+R0OEwAIhAPFBXO91AKc5B9Ovw6wLXZvfxBLZKCGLXlh6vqKQY8zJ"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190526073726_1558856323936_0.1374958243474833"},"_hasShrinkwrap":false},"1.1.0-master.20190526073852":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190526073852","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.4-master.20190523230150","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"97e1ec12aa1f0c2920208c1dd74cda639fc1f22b","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190526073852","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-9b2hPDep1lkKpgQCs/BdzRh9ZKSSGNwccPVKlZlm/9WbohY0Qn9DQupmotV0LPY12VHoLVq3vs8ZX3momRJX7w==","shasum":"d15826ad567a5347e460a4f981a937fa6e3228a8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190526073852.tgz","fileCount":76,"unpackedSize":298100,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc6kLUCRA9TVsSAnZWagAAp2cP/1Ytxwv3m+TZ3ta1Yl5F\n1aWJgDprWL0+CCeu6k3/3KOAts5Fxv/JhMQwFDZGRP+HCyd+7BhgSCsGXGdK\nJKngEoOjNaFMBwp1xQ4JCkLVgk+A+vKJVFN6bwRh1FzhOGqc3Vu3xCGPWW5D\nCxNqy3z2SqbigKyYuufhfLnwzhAKc0A3l6y2ZcsnAt96Wny1GN+h+p61qzOe\n2wk3qjk2gIM+IBoHMCR4bbnBl1F+SnKSiXaKqGeTJY3hMf7mjFU2xxhW8Ifa\nnmNXTpf7caEJ3P2/vNam8TlasFcPIC/fi48mTTXY/JWOzgwLd+JpULRpeaKU\nea6Xwro1h4jQ8BLkVWX73L2vfuXiVcUZ/qlMuby6VOfXQGtJFsd00TxdD9FN\n61ibBlmplx7JyQuwZJyeq6dOMGLHNi+D8jlKEGdqacYK3cN4MzbvjuUIZwhC\n+R1kFwM3gREqFeeIT/Te++gxYLu1ZjE9slJrF8nV5mWMqIK/+LesDes7AkD2\nlKaSJw3TEGB1tFXxfR4GQlxSOShUJDvdbw6RdOG87ziwEts3UOqPHNR3yTQe\nDE9GlZutEvIJAXFG3dErMsTv0jUS9SVjkVilCsM31JGUBYgmw663z65kFXbO\na6fxW13XeXdX0Gj3WFw5Hx2DnxUrTThZ2FAelnyKGu+KbU6gG42nLaNj206H\nSAKo\r\n=O45q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDN/LLtYnfF46l6DzzdfnSe/MX/uJtxrSQAaMADV7mr2AIgMNgaaQQ8juqRfR5gzhajVrMWMIL5H37HKrvxB79wO+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-analysis_1.1.0-master.20190526073852_1558856404043_0.08471256115068337"},"_hasShrinkwrap":false},"1.1.0-upgrade-fp.20190609074813":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-upgrade-fp.20190609074813","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/clj-editors":"^0.6.9-master.20190609043052","@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.7-master.20190606180649","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"16a9f97d2f9786a677e750311532852f72282612","_id":"@atomist/sdm-pack-analysis@1.1.0-upgrade-fp.20190609074813","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-itBaCK9Wo4j43F3H5jbTrkwn4zkvlI1bh0fH098Cqg5WpUqDuDrKZu9SZzKkHlqFNqSnw9eayIWV/E81SVc+uA==","shasum":"13969c8750883710b4513f91e768d1be8fddd95a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-upgrade-fp.20190609074813.tgz","fileCount":76,"unpackedSize":297956,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/LoJCRA9TVsSAnZWagAA/jAP/i828yU7FYKAP7XhwY2l\ndy27yFzxgLzp7RO0bhua/T3uwwrc3pH7IYN0DyBPw3TXoLbSAqLwtNBMnW09\nD92uNpm3mnlruAkNzCIoJP/IOXkdJeqXCcXkfFXsIOoLIyHzdV5S0LyD6epO\ntM/OSmC23bp7Xds9pMg4BHpZ1nmDJW05Q+gChjhXpa91GADB9Zb9kFEtj0SH\n6kXXA72LELVWuIratNG9BQF7FPxy0h9Cphmu+gQBEGkhI5w/8ZNQaPR9/PKH\nymItp6Kyn6dq3uHWA/+uO1dNallbBPosDx5qHUJigmIp65y1ZPlbAxDz1Aah\nEEnKU7YmneByO0mFPkCRRjthu/d5MMpeWNyY5iAoPNofk5TE6txqguljjPXg\nMz9SE3jC1BmsauW6eb/ojxyPtFL2GWXnpzBH1eAnnyNmNxjEDDSq3iEyGq3Y\nF0/MMIb9N8C0F+uGFXWq+ehzqGQ8JYbSNHZltH3TihYTFjXzybHuHw2oQ1BV\noTEDmu35Q75FJDMZ7+dKeE3emn7l3kySFNWoB49vwwa9tm8GysZTcsAFP/E3\neO/R6SptNiENgy3S0WnBgjb6YU8J2AYNxbQB1pX+JEnljWgTp3RUsIiQFhCP\nMoGtNvltj4YH1/8DXYvVWQkNtg9yHQo1q032Hvt9AjkVid87tiJeIsWsikXy\n+lfP\r\n=6nUl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDOlEPjRKjefE/C4tHOEr5zl560w/zSd7nTokgl1W0O/wIgGFKFALjSC+pVoYQdkm0A0m77lflKt37yqf3nggOgiTw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-upgrade-fp.20190609074813_1560066568484_0.6449489006262241"},"_hasShrinkwrap":false},"1.1.0-upgrade-fp.20190609092539":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-upgrade-fp.20190609092539","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/clj-editors":"^0.6.9-master.20190609043052","@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.7-master.20190606180649","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"8906c269fa723359b831d89217d9754e137a36d8","_id":"@atomist/sdm-pack-analysis@1.1.0-upgrade-fp.20190609092539","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-r55x9dKVzuBfQQjD247HgWjluXZAkVTrNXznIgRV0DQz4EdSWmFrmUt445/0rxqyMfxD2lLpSuokpK0p9scpdg==","shasum":"8ea3e313374ce8ae9395667bf5b44d88cf3e37f2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-upgrade-fp.20190609092539.tgz","fileCount":76,"unpackedSize":297891,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/NDjCRA9TVsSAnZWagAAdZEP/2KcWcqAay8gdXbEE64B\n56X6BsgeSb/LM/DV5ZMu2L8/ZHsBXLbxFzARNYT6G9PISrVO+vAxEyOEL3na\nhscjUDxTbkGcs9V6lUJMBuqQXw2XHUUV+AEkgVb9sViqe6DQ7RzRJlCwzxLu\nvyvHLoirk2zGzWowZXD7jsVZ3KLK281Gw/9whGmsZtKnD/z24V32TD2E2P4e\n/RCAMJ1B++Qv2t/WjjOoxkhIjnZTG1otkj+NUkQSKWDCXAKtf24iC/A9StvF\ntc0M0L3tGg+DULNSvuR6+4woJ/NSB4bn3RGvF/nD6sx9+zR6YTYBFsrbkf8k\nVtvY4ufzsdh1sLnux7moDj6Ac/aEXMm4+sTZUyfQ/963OYyzmJ2GRw8Pyv7A\nsxW8Q2yV/i0UsA/wLiGAm1VwSEDnK+oxqC+IRCWOz9FAaoiKmOY4VkEt24Ke\nLl9dzYFurYXQ9ivpkPqiy8WmASKpdEDtdaZvYKUihHh3ZZHwNmM8dJX/m88P\nq0dJQcuDov5fcs7HyvmThrrOR8fgUxQRMSW9RyWScufBPZvgHnL4w5YYI6/M\nbfSIRaxp4C8qbYKkvAZdhKNdCm0HCvJ49qmHLYmy2DKBLRhqadII3ywI5eVn\nYo031eK6lxedO13pipPvy5gjbVIXs1gVY/rn4zIhAaBm7rnalMNdJzdq9YJ5\nATX6\r\n=cmoi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHxLC8hMYWWX8AUFQDI4i4rNytOB35U0RNXapbZc1H03AiEAssVkK3fXw3MG82ogGkF33DSeR4b9lfduHrDtsodjUx4="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-upgrade-fp.20190609092539_1560072418597_0.4887201264033294"},"_hasShrinkwrap":false},"1.1.0-test-any.20190610023131":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-test-any.20190610023131","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/clj-editors":"^0.6.9-master.20190609043052","@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.7-master.20190606180649","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"f1c624b023f745411f2ef0c792db4fe0f8120ea7","_id":"@atomist/sdm-pack-analysis@1.1.0-test-any.20190610023131","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-8f7UcSLGXaGUrFlDxqM+QizV/qReuq7Zi8K9fTVm17gLjzBvJuH8AQkA116aVl/jIVJA7e4x6RibXSaLhZ/W/Q==","shasum":"0b54ecab653c92af92181beda77fad4572b6632e","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-test-any.20190610023131.tgz","fileCount":76,"unpackedSize":297607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/cFQCRA9TVsSAnZWagAAXscP/jy0WOO8edzamvkrFhdN\norjAhKq//s2pzp1GkGNLbZsGmZtVCN6OshKrQSlAMe6fYBqkuQkPGgTNnJ/E\n6JrcuWd1bXSB5xd8wTyumUcFPb8ybv8PXeueBEGtV4pyja3kwSSgd//pysvD\n4s6UoVylNk2f5dK5dy6FmXZzOLEwWw/vDEMIOcPainXWRyoDUdXRPomE/mY6\nElFgcELN7ZVucNEeU85pFtIiS6ZERhtoEhbbC0MzjSmYa3AInnR1CsIG/bWB\nExDB5/DZ+7uw+4il9b+IPM0WVJqLC6YyefWTt0I9HvmhpSrow7SOSiUDIfVi\nygeZ9W93f0cADscTwV4tttwBg6/5fMntUTD/B+CTbWhAQZGKAqCrdsj+bXRj\nxVFzJN58ym7UbtOfx2wrtB4XUSZDILljHPIIq+bXvCHw876Z0qdzSAzI0T2I\nzrdC/+miKydODWMHkwLv0QiVVt7p6B8+JKcpqid1fAsip6aE0fWE2isnxwTq\nUjUp6XkVn1gm0/8ImXNbCGfpQb2ddOMm24Ce2m8PjhgIZf3TMQdsdDhAg6X0\n7m1MLdL4lhbkNaSedjOfbY9wFxtasMCwAaodLuigjmnVTBMgIs/PTATeQD6C\n307IoakIo/qlb8LgibGcQu3T1n54tmcI/KA80HroktyiLC+Sifb3cXh4LSdO\nduHe\r\n=Ts1e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQPhzO0OuqOyNGAjo6eP8XZVz9rvutw+TcB56LFk8UWQIgIXi/IphnL8a0/p3ZCoRmfLn9AGqShMcK4bjfgm4/xzI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-test-any.20190610023131_1560133968032_0.4032061757194647"},"_hasShrinkwrap":false},"1.1.0-fpupgrade.20190610061025":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-fpupgrade.20190610061025","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"158c3cdaa3d12ca0a5321ac929cad0ac9ad72e84","_id":"@atomist/sdm-pack-analysis@1.1.0-fpupgrade.20190610061025","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-XHb6CKihSZn8mwm8M3Tw4iITnkNkva/l8oc+TF7uxhn7vpvdjwgW2JZXySEDlWrGvTW7oxkJJujTeRiRn2OpkA==","shasum":"b515802605342641e8113f307b0ca7cd709cf147","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-fpupgrade.20190610061025.tgz","fileCount":76,"unpackedSize":298285,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/fScCRA9TVsSAnZWagAADNkP/31d6qIUaP2mg9LYQwlR\n4eyKeF9h4SAVuEGlJuB9UVAoXyL1SrjiZPQ5OUWNgXw0vdcxXSqkh5l2jeKT\npGDD7WtDwTU9fsxhyMyM5SdP4ry3Zsly7oZGRlUv1A40hMTNwpoayeNQa5VJ\nTFrwNO5cWnv7bSx8R7t+uKNVA04Hj5dXG5fbcvJfK644AbHQT204GUK+Xuux\nTpj7GfoWDFqtTA/mtob8JHrSgKhKypJ+F2M+rkkI+OvRymZO/+59MB1PKHpa\nfObd+14xiEBaYYAkg4+HFRLFNgVF2BzdUyvDKu9JFfBvJmf4kZXZtitiltg9\nczJJK7zi9o0D4BLObnq2TjAewTIevgHgbfSBwi+I5upByZcZB4doaol7SgCz\n1zEbe7fcS7oDCs4h3xVQNZlzUd6xTzHAKo96oYC7IADsqwtGGRc+adk9rkI3\n+ECWQUgTWiDLSAgnUUuzkT+z6watI8hCk3aushGaSSnuwwxb0mdNchvZhaMc\nxBxf1hXAkSDs1/GURntfbk4mi2bOdyt+bLMgy7eiKdGDMnCTibkhNpsybp24\nTU5GER81i6iuVl2Abg5IxT0Hu7QWTBrDYFqWPbaeqsig7RlRYplRN/IzHw3T\nz5ufNXza+CpX/JaUlAPGBFemA2gpr/U1J6LAkXcQ7NEdRHWGZXctIKsnp6JN\n4Co7\r\n=gwBU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH4T89uHHP6Egutg6xqS7n+ZXfxwtlI4Q5LvvD92KWiFAiB/D6buKRvXFORj134ToVJgoHaAf+HCeKiTYf807kepqA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-fpupgrade.20190610061025_1560147099492_0.7453351809838125"},"_hasShrinkwrap":false},"1.1.0-fpupgrade.20190610070018":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-fpupgrade.20190610070018","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a5385c5cbd1386de54059db7cc3d8400b5f0ae6b","_id":"@atomist/sdm-pack-analysis@1.1.0-fpupgrade.20190610070018","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-27COe3Cg4YikrWeixEwXP0IHeLpJZZiPXbz4eq/eLzRm7WtIp+ibl2dtjtqIpoHBtDU8h0fdmaYGZuYn7V2YmA==","shasum":"327007050a65285d1ed3ee593123ee5388f51237","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-fpupgrade.20190610070018.tgz","fileCount":76,"unpackedSize":298285,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/gBJCRA9TVsSAnZWagAASB8QAJlR0aIIZM1GLd8iPsXP\nPPa2GIBjRrPgMFhnOm4hp4xB4REJyLRpj/vJ5zqmM+Tt9n5vw+PPHAW2LkxC\nsPe7sOPtBkKeQPV6AUrEhFaxphJb+xMeuOQIn7CmKYaUAMGrDHO0KzvHzWzy\n58DP4C1tUr9nDHQIAd6WyEDCFJp/PZgTPVttBQvTWkK9U7Vl2I7JQ3ENcdkd\ngSW/hQVnhyrMnMZ6ssvjZofH6xuSUny3U3vCJs+13v+TZxI2CNUqXckHqacb\n2BPPxDUtQtrephAg6v74vhjMlPNgxsX5vn/0k84cDL2sCwxhKMSbYA9dp6oI\niCVcbUDQPurb4J1SRrbEkSjkG9093xuQyZIWGfRZbuAFaM9XaSEZRx1+JlPf\nfMuobUiYygl45oknTKmlRUvQyboz//DwzR3jCvC0ri8lE4YmUxn1zr40hZhk\n7Rmjd9DFRI6pBOwjRJdp67HadW7hy4cjV+HL1coQRisa0pVYq0RezqI1pXvn\nC/4Ja4t70JAuTWsUiZc0GdmMXXgIn45/2hxcXUdsKPsARu0R3e7Dn1WvtnNT\nSzVx/g8ByZvcKZgbUOGe1FX/ml3ZisP5Njt+TGPcQGipNXUGHwhZWcV4Wkkc\nUROfS54cXiy7KRMdY8qtbuc3+AjxAWatr5cBs0AeVkhsOvQGJVDIhOGA7l2K\nm5+8\r\n=rt4f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1xwANAN428lQThH2LCY1FvFd1x+dqO5jTYxAacg/uSgIhAIjfO+fycQ63Qs4WV6S0nxMHepx8OymgDhtYBoX0zkYT"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-fpupgrade.20190610070018_1560150088830_0.5412202975062279"},"_hasShrinkwrap":false},"1.1.0-fpupgrade.20190610071538":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-fpupgrade.20190610071538","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm-pack-docker":">=1.2.0","@atomist/sdm-pack-fingerprints":">=3.0.8","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/sdm-pack-docker":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"25efd5072acee0bcf65015edeeab74963889a64e","_id":"@atomist/sdm-pack-analysis@1.1.0-fpupgrade.20190610071538","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-/76Mf5+GJf19J12MWKucV2Yij0w3YvzKlIn/SqujIVdyq/1vDY0gbrTpIcPh+gubvJUBxJgEikoDFaAx4+mJXA==","shasum":"0e096cee6fc2dbaf1e2a3a555006e352b6cfc4f6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-fpupgrade.20190610071538.tgz","fileCount":76,"unpackedSize":298419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/gPrCRA9TVsSAnZWagAArOIQAKJLsEEJVE2zqarIraTR\nL1NdQkXxr1w1vXgpPQUxY21CRoVGLI746deHT4bLL4UhAbTu3L9pLbVT2jzz\n41RANUVsN0qcKjIN+B3nkP7qRWKfeBa5TqGF3+/+GIZ0EeqtwmvGrzJvs/r1\npvbosMbXMckEng914wwqLmjXX99HGF63iCFBYA9skolHCMP9eDlU2ZDClUqp\nC6lCa+PJPQfJlrjzgbkENrv7vHOy4GXZe9TqB/Z9L6XAdLbOs12LODy46G/A\nKqvSlZmDPK3S7QlO6yuWOESWnI01eVKqa0gr6pEuU7DS8tAvsMFg33lkjTit\nZy9ZzGRaBBu5Q7efzK2eOslAcnzGZ81deW28AWG40pCG3kKxwCUygeF+BhfU\nC/AABTBaXQuhL8RdGqlQyLBpe/RcW52fQnddq16i2/cr6stvRhqnGITJ3lJu\nN7L9r7KTDGAEALT3CVDNUW45gFIRh/QbJxXeGY+e2qH8pn03irWIintRQ8vQ\npG3G42tQUeu3P7SEnhzeKo2RaDrJV/Ti3tNNY7hCrpTsMu6eJWiDe74P/Zyg\nK4vfvFDfCfU23HAYuyQLEYlx2DExZo5y7NL9PJBHqAyyT/fRYWwgDZRKww1R\n0+dulWxWM3LNvaJxQGBktzJZsBScdbuaKCT1g517ySsrijg6jJt3KjuWoSCW\nzzHt\r\n=UQ+P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEYHkaelEqF2wylXJh5lqLVR1ymleO7FAI5y8IDsLCy/AiBcB7lAwEt5aQrVrG8T395dXl/sgHiEv2zFWwyD0NvXIg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-fpupgrade.20190610071538_1560151018625_0.3308617997412513"},"_hasShrinkwrap":false},"1.1.0-fpupgrade.20190610231526":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-fpupgrade.20190610231526","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm-pack-docker":">=1.2.0","@atomist/sdm-pack-fingerprints":">=3.0.8","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/sdm-pack-docker":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"aeb468b878fd920d309a18aa893e2edf1c377034","_id":"@atomist/sdm-pack-analysis@1.1.0-fpupgrade.20190610231526","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-TCnsVvEzbec8lQZeN6UOBxG8MtdTrh/X8wAnPVwgEzIF3FDSJ19YwcJVpt6z4ugcr+bkX375jLsfb/kCIGjyhQ==","shasum":"f1ab5004a44b84b35f4c92b1a4d550cb809e046a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-fpupgrade.20190610231526.tgz","fileCount":76,"unpackedSize":297992,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/uUsCRA9TVsSAnZWagAAA0IP/0904FPds/x+2269F4Zr\n7FBu0xk5i0koUOe8JMVN9VWMIxSSWxh167Px3XjCQy6CxNWW4kkuBKgZExJV\ng1H3DSdRtDtujdWI7E6r9XCj5chNueK4eUI8+sNDCVeohKW8uDc1qFX1kd1g\n4kJQDclsPxu/bXQu3T+l127iwU4i9Rhn1192vcfcy3wKWmAJTZI56MgRWGZN\nWjeTb/7OB4cAYu8QKjr1ePFbsTEFBnsdRX2S82pJlldhkeB1U463PNxpexeL\nEdQobz7zWHGKdIBg9VsLwlP62EurQnDdwS7J0JAkAZcELsDxFpca1z0sp6k/\nJdQgp0yXbAISJ7PLP20QbEZb8dAKYwg3TKfI2XMJApSdtrTwR42ci1It6MzT\n6KXD6RpnVME154LCOc9CEWbtvyY3/Vna0aebxFkY3e4eWy0lDMfTKef2OH2n\nhrSu5hivjyjebjMqMal4sTEnWPtTRM4Pt2a60rg6XkJjgBIAOlPZGIVpZg7k\n0ae0SeR74Rt8msJZ2GenPxzl3znhBqCwXBmaq+uCx1mj3jH0t0UaWvIBNkrj\n0o9jBqvgdUuOfa/NAyMnWM+Wen/sV/SiMgoWpO+3CP65YLqPxXqJGSh1UVdM\nNzgpnYPBJYjYG+iTym2l0Ule0WgbsDFRfoig85bJuGuCvOU2H9oeRNYS68Cc\nchjF\r\n=RYJn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEp7dYkot28CadS+VU/yD1GJUES1WURn8R/rrzq/dWMfAiEAzMWwEW3pUbq/6qmmjioImZaHEckkXEbOssAgJZY/l8Q="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-fpupgrade.20190610231526_1560208683294_0.7641129970017169"},"_hasShrinkwrap":false},"1.1.0-master.20190610233255":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190610233255","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm-pack-docker":">=1.2.0","@atomist/sdm-pack-fingerprints":">=3.0.8","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/sdm-pack-docker":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"aa8df2f4858c12b08c8e93b4c16d40fd9adeadac","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190610233255","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-0+z1jdghF6swLcNVe3Yg7IrCvKcPwsfFacgh8YLKT8XG3mBCIKUDHEjzeD/TctZwV49dEBBG5tcT93rTDD/+3w==","shasum":"68c361f1c880d11a960282dba7dbb47445ae4eeb","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190610233255.tgz","fileCount":77,"unpackedSize":176245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc/ukPCRA9TVsSAnZWagAAfigP/i+q8zAaU/efV5bhQcW8\nrxlZS1S0GQgVXM743rIebOdpmfMSmriGPB9Po98XQDO7aJeRsjXvysj9vtva\nd0ME8ThHz9rg9wONluVk4sH8NuP6zIi6UlIi/kMvGe2I+ZKIUOaG25Kwk635\nSb/TIysPHclYZkRtCIvBFzvocBXXNMhgTzt0gp7hNoC6FDHsSf8P1n2OVc1q\nimORtVgw8abnUZwcY35wTJiArXXOaYH0yruIszWh1hO6r4b7x2cf4RYb/cux\nXVjd3Pbk18IvYbj2mNjJudbAedxTAWX8+qilyMH35BWip5ou/F2XjzVUbyQl\nRxgaakUY0ptU4EB2Ud9GYFENvrq7NtFjNrGmZdn3taFSliuNDfUNphFsYsXl\nEOCHNMqRgMa2CQyWmcy97TrFIqF9qvKd/NNpsTmtb/Eqxca/Ugt8ayCVH3bQ\nTOYD6ZMWLZfwQBjKwyuFcBvcoJnnVOTT19NapoKOQOEuVsgOPVV9sCt5YJZ1\nITo1TqNGiKWe0/n859X81ggAvGJVYYlom+QOp1bT4pLqXTue/X3pv/3nEKWY\nJYJSNfpNj7JgsNOKzUEk+KMObRkFkYs4FB42Vo7I1qyHuHrCEOBQ5UnUgrB6\nvybozG3BP8KDiLSqW2aXua1+QxXQ5vuoiwisEmqs2zwNPkZVvVyPfRmVv9IE\nx651\r\n=QVzF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCe7fB2TvAdxNJodygmBDXkVlneoumDSn38mwi/ySh4bAIgBRPhDj49NcD/0NecMaISmcyHnutf0+hIMVRTkA41rwM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190610233255_1560209678005_0.24183297522735736"},"_hasShrinkwrap":false},"1.1.0-master.20190621012001":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190621012001","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm-pack-docker":">=1.2.0","@atomist/sdm-pack-fingerprints":">=3.0.8","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/sdm-pack-docker":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"a3f1c971a09728ab812e98ec6fd9f6cc6c03c92e","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190621012001","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-Q+YfJefKqI08QhiEdAzpPwRXWLAMvocFxyOISbo8HQmih4dYkms5HDL3BMelKcMIs1uGlBvg0TOAOKZndyDFsg==","shasum":"f500cb28bed1d6e32d527f6808ac903a5a9974a6","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190621012001.tgz","fileCount":77,"unpackedSize":300653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDDENCRA9TVsSAnZWagAA4n4P/i/dS9MrX08H84/Nyigc\nqTbj00J2HNcCXlID+e9xX2u04ZY7qeXk9RikO/vz/JR8eCx7tmtPMsEmfuhx\nNk6hSEr4uFC/uZKKRPawq4PhEQh4ViofaZ2k6eyrnDM2572WmN2vF2yn3G0w\nrlnniIzKT4MLI7J1GFza24fX4MjXTHVbOOFZ6oqjnlUJGU/yojVGV2i3bhAC\nrImitstJtyCbPgY49hUw6XB0oSdGWAYdrJ+W5nU8aOmf+heAwuovk1Sp2GQg\n/qnFSuZzckigjIwuiTiPCzuPK1HqjoEwffcDfsuxgIJPIPykq+UEGevjsxrM\nUvO2BMzZClZCZzqVUIKtAuOuyPcsQt4cCFPaFHhQNE01YItflNbtX+12918r\nw/By2P+XRrvitWe178jkLOBW/CgJAibZzazkxLvr9U3zwCXFJPK/qVxx22Z0\npDouSvoGzKwMkhKwpMUGXFpZaGIBOv+pcHm+O4ha/q7vxGdtYFiVZubuSCmd\nwkd6E7jPxDdtx8lWMcsnqxggX+6IrQYeh3Fw6Ttiw11Ai4c34MvM5+SNrNsd\nT5nVc3M9727ZjZoqvGi3elcqp53EstmcUJJh4voyfcBvyLB6/Oi9r/svP31j\nx+xLMY9W/CQoKzGyZCOA+x39lzC6bG5EndemuAbmSq1xEuoopbhT8KEs89vz\nmrjY\r\n=A2N0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3FUMG+fy39E7WTyZ5VbR5rDxByqPHMRIVqme2Zye/eAIgEuLHHF+Qxny1uBMZYLgeHZ6xFALhIEmQz/ODiUE9b2Y="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190621012001_1561080076301_0.11453608213857014"},"_hasShrinkwrap":false},"1.1.0-master.20190625171621":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190625171621","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm-pack-docker":">=1.2.0","@atomist/sdm-pack-fingerprints":">=3.0.8","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/sdm-pack-docker":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"ac0adc7d55f81f9f09f3a44407603db8181194b6","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190625171621","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-8yRR87H06s9kRBqFLpLDQKzRoDOb2gEIhamm8ikxj7pNry8bKb+gruIFF6v3bbUj4aVwzvBwsxKhe7hxY2xw1g==","shasum":"d6f29a9d08083eb84a07c112f660046c7c2c1bf2","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190625171621.tgz","fileCount":77,"unpackedSize":301069,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEldeCRA9TVsSAnZWagAAW3wP/3724BqEfDgW6cWjfHbH\ncfWl6jxX8e+GaGmiDStXM17SMQfas1x6Ug3wNp93a4FSL5Mjjj7BBls/mHrG\nf0MOFxKLDXY0rIrDg4tFPHhb8c4IextlepKVueg8byQHfVuZwa4+WH9jyVsh\n0q38gEc93y7ze8VuKB+hCcVNi+RiPhZlM7aW0xmL0BIJMTAfuAZyMQWU2pKo\nNMrX9B/++RrT3tK7OaMPPq4VaSWroj7wougzJpBRBTDkwnwNnTH1lNhU0b+b\n11JqHOzcEMuO/OL+6lyDemJ0SMmbnpcDtgTEdbjRkbpffZal6Zq155On1Uja\nZ9XKcZCfOzRgn06/1w8+onNEsNMcmFZSbfLMSvBmrC258M303Orjv3/IrSQM\nQKKEDNM1ncznFGIjM+K4tVBKzgkuAvOLzHOc4WSsCX5kU+eNIVkEldiliROg\n3Ya4htu67QVlNfw3tvhI1Jt5o663vkkw5kV5AMZWYdGwka34ovY8d51oZnQc\nj4dysV8oZLsyiWjNa8VB3H9kS8SYcbWKEHSkNOMH0q0/agTWhY7bTG0n1O8d\nCxtq73W19vZJc93kjPVL3JPZtAq//emzRbQ5JXSjrYziabMMyB8BMnlZAFdI\n+rKDqQsjcR/40c4KDVdJ573Go7xvEc8WFRW/4CWKjt0YuaPZ9AXhRlSJtpnL\nahRs\r\n=levl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfsolle+4FAVQR7FIPKl1F1I2gkXoVrBw4CMe4UIQIegIhAMgA4pKdNsx1xDvO8DZewq2ha8wKE3UPg+vaSTaISQIV"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190625171621_1561483101831_0.938257902387601"},"_hasShrinkwrap":false},"1.1.0-master.20190625172707":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190625172707","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm-pack-docker":">=1.2.0","@atomist/sdm-pack-fingerprints":">=3.0.8","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/sdm-pack-docker":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b3e77fe8f522f71224afdcb3c75593495710a056","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190625172707","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-SJsTvqVnpaaTIf0TzWmCre0yas8N9E8VgmU01GIC4sDSGLsfsDpeKHWJv/C5lefTM69aR4ZnYWU7FWpecLH5nA==","shasum":"164e97c5c8ec76211d99af8f09ed51d801f0b7d9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190625172707.tgz","fileCount":77,"unpackedSize":301505,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdElm7CRA9TVsSAnZWagAAvF4QAJAvCdDBOnFGq24OG1qY\nNbTFL1ARqQ26DlmNl+iGckiN7VydL1OoOVy4guc3LBqeifZlqVQ544WRX4pb\nUAXio7RquecZFZ4trWJW/L3Y+PcB2L8+hIfTRs+MOy8Az1iFgbsPf60Ye/oO\n48DSNLEZUQjeIUSuGB9HdjOWmiBvd5W1HO7qzTUqsds7jB0W60DK89kYaiQ9\nU5baqtticlWt3YGNUGDqPDK/gysg+1Bme2dqo2YplbQ9zK4ZvXYu7uqVlP7Z\neISpBM0IPxRwiIiT62PtnP8yogwk+YsPbnm3aFQAhWQjiyCI2rcPjFAQC9nR\nqqyZx8brGxkCTRE9e8RF5UxYM4dG/druui2KPLXpS/LheTWC0ccaa5SGvBn7\neZmgntD+1fC0bGHjdJ8NzhkCPVuHbJFDEo4QKpsnfyjtDdX+h1P89aejZ09Y\n+Fclm93A3GpPtnQmAlRERbSN+iJFcPkc+tbwhOKMqWFVKTRonTVkHyCRrSrI\nTh0MjU+nXzMmGhCScYMjaeSVE7oZALhIZ3MNSpHGNY7yIFoaEj/vsArqvRQ3\nTlBj42ZNOIxlJouhupLEP501hqMPVs/ZOlvo3F36BlU5oCPBZYmKVkQ+ZSX/\n808DLxyNqeYf1qXdsmA51LDfbGPBS2+w7rtMz8fAXP+c3Md7w5i4p07naPgE\ncOuV\r\n=8qRY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAHWQ25WSKWkcSaispnXXpK0Ys0uivqt8h8J0H6aGYsxAiBjgd4GiWqJCAg8CYOUGadpDr7sMzHw07RfP6Tfg1uz1Q=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190625172707_1561483707228_0.6853087187550582"},"_hasShrinkwrap":false},"1.1.0-master.20190625175337":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190625175337","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm-pack-docker":">=1.2.0","@atomist/sdm-pack-fingerprints":">=3.0.8","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/sdm-pack-docker":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"5275337d077cd51ac8e7a3695f3aaabebf5cbd0d","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190625175337","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-0l7SYx8StSNRL/ERewa39aSQ3eqRvhaAyXQEqZ71QtCTjM2rbyQZ4Bv7wMTy1T0gB+CO1U8KxIV7yUjOGIXyrQ==","shasum":"b5217f4dea67a603460f535448595b9363a08cd5","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190625175337.tgz","fileCount":77,"unpackedSize":301494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEl/zCRA9TVsSAnZWagAASgUP/iV9xNylChOnHMXUnDs6\nX5lfb3Kqi8dYoa7oeCRlYTMqTmxsoBrxC2i+9LbgxPb/dEIFpKv6kmsTDc+N\nShpPFYpK6++Du4QOaRTK7bF0Bmh64MDVhhIpoMCe7WbLaD/pTTmUrxYOJ3tm\n3vCcAIGUnZIpCKHtqL3xEFWCVJih9ooYaU9EVdj0kTXtyo+HPS/onXRqBGWD\nBHhgiYgh4n9vczH/M4kFzobFmDFPwQ3UckRNvuWfjn66YG+TsFYZL3/RMHDH\n7MVY4m89aQOPNb1v2vwkGX6i7tsnFMJ262vQkwtwHQNy/37dVQv0Ncxp1X8r\n1TNPWvLWzhp0MbfIf/N/0HDdjZEh5OXfd0IpU+qP9Otd6/a0TnFHB1V2m9qP\nUXm2tt2z2rIHH49f/D0z6syqGpbGGAo88DMzf++ZPYlqOQnebt5e4W7pf6VA\n7kRr2Q0whfzc5R9vTpLZ2bbxFzpupyyx0d9HtQqImuvqxNkQbixQroHZwBb5\n4JstpyKqHz1NDnIeJrF0eWrTX6SNWj14yLcscRdzzP3dNAXOvubUw+yX08Js\n/ZAHjlAV9F3h+nUkcsSb8TdVNdBSULmayF8flvbNRGBc3L2xOAgCPFh1Mdvz\nVYP6KMmTC02FVVOIk4Jvple8gnzPbuQ+NSytx/b8fWy/vqtrXu0CRsrdILnX\nqFZ/\r\n=UDVO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8d3QWm5Lo+HJFyL5SgXyYx6Cvq6rPAJ3igHDrGjpZxAiBVo3UfHEvGMXbzXFa2HXvUQIZfr0dGGlSqaLuyu+URTA=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190625175337_1561485299120_0.1815756567737299"},"_hasShrinkwrap":false},"1.1.0-master.20190701185534":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190701185534","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.4.0","@atomist/sdm-pack-docker":">=1.2.0","@atomist/sdm-pack-fingerprints":">=3.0.8","@atomist/sdm":">=1.5.0","@atomist/sdm-core":">=1.5.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"1.4.0-master.20190411165304","@atomist/sdm":"1.5.0-master.20190414160706","@atomist/sdm-core":"1.5.0-master.20190414161457","@atomist/sdm-pack-docker":"^1.2.0","@atomist/sdm-pack-fingerprints":"^3.0.8","@atomist/slack-messages":"1.1.0","@atomist/clj-editors":"0.7.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"205cf272e44961141064c19236f1130c67f16abe","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190701185534","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-D5qntL8I0I6VaBa2tFE/l7jHrSjRlZPmnUjeJ5oOJi/1fp6WFmki8HnmjLlqPwhVV+TWJR1pPDEW9Xz4ZP3+oA==","shasum":"f1d2901799b7336e576f79d88b7c16d13df45e0c","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190701185534.tgz","fileCount":77,"unpackedSize":303408,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdGldzCRA9TVsSAnZWagAAKeMP/0Byz6S/xBmXrMiv/psa\n3XykrwcEje//tPMmHzcmcHoGx9Hj3JsDILd87a7eXMST3q4maqgv0jOVeG20\n5ohV7TehsA/DYENYPpebPsKuOADyatVprQJOtDnX7EacIMXD8rAR3bUo05+8\n43SykeAUPqzG4v0YOZYTCdK5yCCkrAXvV0DQGN1R9j+S825umMK4wP1SzFfU\nC8hj0Nk10yHd4UoFykSU37bpQ+UXfoz+TRGnmP9y4zDWY9FiY62KLim1EXAp\nIxIUxtzlH46FcnoTxngIQPXzxAahKUKIk1M8DXJ0cI05sMJm53hqRNc59JPf\nUZx/dlloi4Ixp3fGypuX7mBRaKbfS+MzLeHtNj8tztaB4bBya9wnR5KEIPyK\nwBlfLr3XfVSCI7dlfuNvtf1yLcZ3+LmKk3+4jSzYQGZUikpMaodqUEK1erpf\nbyOORkEz3WdLJJ9pthCTsDYM5bs/NCu9axc2wqI9Atv8agrYrNl0ybbR1N4e\nh7RGxiI4aVEUgtztklmyJ215CALI7U0HUHSeZLqu8alcwckE1b+NKCJLfuGc\nW9AQGbFBWHWvYDCsXiQPvCD8yDJTXp+JWa8hrW5OkNf9wjmEqVaMWeb5wtPE\nVSERAI9k7c6uHxojig14PQrbQr2G8d99ww99r+ypqFUzH9+sxbYzFozR9ah4\nCdAy\r\n=i+l7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZy8/Bi8h1xLQHHPDicIr+ncN6PLhUwn9VB0sjdiEOVAiEA/prfLvJHVctvUFFLiU52ss/1hm8sm1fyTTAQmdfbWOw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190701185534_1562007411196_0.09665059829154554"},"_hasShrinkwrap":false},"1.1.0-atomist-update-latest-20190709163925.20190709193758":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-atomist-update-latest-20190709163925.20190709193758","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.0","@atomist/sdm-pack-docker":">=2.0.0","@atomist/sdm-pack-fingerprints":">=3.0.8","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0","@atomist/slack-messages":">=1.1.0","@atomist/clj-editors":">=0.7.1"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@atomist/sdm-pack-docker":"2.0.0-master.20190709171725","@atomist/sdm-pack-fingerprints":"^3.1.4","@atomist/slack-messages":"^1.1.1","@atomist/clj-editors":"^0.7.4","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"24d8ac81dd815ebea654b39077206dda761ff9a1","_id":"@atomist/sdm-pack-analysis@1.1.0-atomist-update-latest-20190709163925.20190709193758","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-clY/xSXRIEQ5LgtJlRWfYnfgEDEbd4yEgm0NYfuGS3fuleG/Qd6/H/vh/h6ZWr2uLEjRdeNs1X/g4JbeZs4MZg==","shasum":"e78435d7ca30fd63dbdd8e0ba4ff0c2c37afeffc","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-atomist-update-latest-20190709163925.20190709193758.tgz","fileCount":77,"unpackedSize":303398,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJO3ICRA9TVsSAnZWagAAyk0P/iNUfllfmtchRvz9e6FV\nLbMBa+VAxO+nw3FmByzWuGueByHHsAuIbTaxlNu+JkecCaHLoB+xb3Cma7sM\nvskzwDGoGSZxO51SHqZaKyZ21f5kZoT51t1lSWllfLVUYXT9AZI4aOOhAmGi\nA8VPQwc4chPevksUZrzN3lc9Pkvb0+b3i1DxkfIKNpt2mPa2xD47zAEiz8mQ\nofx+Wp8ee8sLmV2j2BRpLjAfQD1HT7WpC27DYVVdiHu6MMYbgpb7oChdJWPG\n9GUxW4vIH0xqqcux8DcvtnZEiwlbJAbzWaQl5BCf/zIrZ5m4VcPB56XF9XLS\nZzBP42QZOy+/+Ycb3YAQxEfXg9Hcyl+Ncedd/A8U8c4b5VEqAmAFtELFdmEu\n4CSuzXTrYhY1mJAE+uTexb3lwJNyc1g070KX2McAx1RksZ0ljO4Zh2GbOlt/\niThsX2O+aeJupVyEDWWCqW7wujaYo8WvxJAOEn+Z4XQuqC9NL87LcM/o5s2z\nDx3H8mZ/sDaSWrV3GWbgMIb0tOgN2oY+Er+1sonEq6TOKxRVomyf+iJcY8zl\nmaLXyQwOuHMsWFE2nB2BJdl78j7NaRkTRk02/zk37PNKDroWlkN6Ft/eWW5L\nmfSQjtaSf3ujZYycUS4XTJRm8j1EGmwvgk9/toxGYSTU3iwuO/sOm+yO4vSl\np0l2\r\n=9/Q3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDE7QgUsyyAP1YB2VDFjcIWUUMbQf4bnPA+3LKkV2PbzQIhALgxSYTaJrVL+dKtahXBu4iTQbRoTzuSCAP4Az9qDBNv"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-atomist-update-latest-20190709163925.20190709193758_1562701255528_0.8901352584002398"},"_hasShrinkwrap":false},"1.1.0-atomist-update-latest-20190709163925.20190709195709":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-atomist-update-latest-20190709163925.20190709195709","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.1","@atomist/sdm-pack-docker":">=2.0.0","@atomist/sdm-pack-fingerprints":">=3.2.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@atomist/sdm-pack-docker":"^2.0.0","@atomist/sdm-pack-fingerprints":"^3.2.0","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"bb08f128deb2126297f03b37ac87ff32d0b7647d","_id":"@atomist/sdm-pack-analysis@1.1.0-atomist-update-latest-20190709163925.20190709195709","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-zAFT/xZniVuI0PmnZPIgAQmmutwsgujdjeBvBDydS47ZT1JiE2otSSx82SOOaqtWzEq4jncTkLFtX+S+Zfdpaw==","shasum":"1b8144c9e8101b246c20d312a226b1d69659f066","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-atomist-update-latest-20190709163925.20190709195709.tgz","fileCount":77,"unpackedSize":303300,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJPIJCRA9TVsSAnZWagAAbREQAJgo1FhpxAPR56l5yPxw\noadIK35L6GVOQ0VcSKDz9+yz5iilDscMMRcYcV3AY0lVBmsQjDEk7Ptb4fwf\n2caaCXL5F2AeHInmqHajH12pddop2/wsstCEDL2jFfr6tHA3fEbrAdmCQwl8\nGkiQuvUF9xJk/YcvsKCO2mF/L2q4YzpiGKOygIqj+ulV5TOX86+Zy6iRIEjM\nBeZUFXrzrK6qZMrYghXo18O7SZ6+LkwTbAdmr7o/tmOoxRr+j9jfiqwJM/Lm\noa/yEGuACjbK8EGBJ1DGnxHSdSZpTPkOM8NehnXHZQOVuhi4ubLxk4F5BH4q\nKlE02bzIw/BigTbREphS4B9oadzSH0X2gs3xb5phq/H8hcTfznr7ajy2Vda+\nMP5f/clHHp4nNok6qMmg6UJ2CxzkT4YhN7GFGOXzMFEZoCkHmnUN/CrprcOE\n012ghfntkdpStWh1QIcmNq1osvEMRgHtO3E41B7Hcno7OTjsWNaFuV80+rT5\nNlU2OsK6ja/RG/sz4hFQmBQ0vVKEvujdsUpQ270qTwnSdPjKsHDDS2ePUuAu\nFj7Bz2EA3coIE3/Ey5fUKq5Pt6zO2k0sCOsvUmH3E8BtRDtCC7CCd+p3kmdo\nBoi9HbaldBeSCbEQROkKMo2EFGo3X2bx7qA05vDjFkqyyxADAqjFXa41dtzY\nhm4D\r\n=nnBK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhIANGg2TIbvmwETDyZO2mOyKXvH8eFzJOO1Jdan2gBAIgGAxKNOuhB0Q/zUwGXgq3neAZXegeXP6iTFq701X17v8="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-atomist-update-latest-20190709163925.20190709195709_1562702344929_0.45790385428279956"},"_hasShrinkwrap":false},"1.1.0-master.20190709200205":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0-master.20190709200205","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.1","@atomist/sdm-pack-docker":">=2.0.0","@atomist/sdm-pack-fingerprints":">=3.2.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@atomist/sdm-pack-docker":"^2.0.0","@atomist/sdm-pack-fingerprints":"^3.2.0","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"1f9d21ea51d0b8099500316b57e6c20487bfba2f","_id":"@atomist/sdm-pack-analysis@1.1.0-master.20190709200205","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-gKMMLWG2Zj3IsZLDpC1d8KGVpAqz3pX/o14rsTYM0o+gwHcYtQYrv2sBF1VQa3Q87EcYhTmQk4VZjO3qFn/nKQ==","shasum":"92cb3611004793cf0845034dcc5e7a8493caa703","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0-master.20190709200205.tgz","fileCount":77,"unpackedSize":300980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJPMNCRA9TVsSAnZWagAAkW4P/A7b8MhH/EKyhuJl6P2a\nluU9D7Ogi9frlM/Y57KqoLxNV9F1te3fGx3DB31PbsTUz5f6aMvLxVxLxDeD\nsDTenkwl9nETVvoZPiyncIMVnDAmSu3PPsFcccDn3Qou94VUjIQPEjuT7+/u\nYfDdbKvJGFsqaLXajlgFZGJkLx375XudQ3+dfzy4+tInRJlTNeqrLjeoqB8y\nbqEZOxJsrS5N/3SoODXLJBo2KbA7+h6DhwCspOaiOZxD6q14nXRT6qWoJj4N\n43aVmXZVrZveqn9e5iLx43EmQ3yXTM1Dx69BIJW3O3Wr4pTE/Kmlli7rkFJt\n8Bri9DWXALZ9FSDRxIclrg0JpvI+wmaqiDjSH7tjG2LsJ0donG+l1NyGim0F\n/NHTAnLafgNQFB3D2uJmlLYrVmE6mf6JjcyEoC51xiV7/WZnhmxtTcRSrQPd\ndFrngb22Et7nSkdDpR3zrGfCuvyYvVb6DHvp0WEtF1KgQc92h9ToDKPWOHgR\nAnNucbvPBklmRYsQUhmwxEqm8m7inJ5T/vB9I95kOhAHGibsYg/I51KIWWgj\nLhUhE5Idg47WjHlNC4YiN5oi34EOxeZjTofmw7a5tT+6Bq6WosX/vxguvo3E\nOUxBeuJqYhp8M5QucM/Md+wHejtcFqT8ar2IGbyk4p6mL4n7eapfmhrWEl/D\nG1Kp\r\n=ckLK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDe9UQclX7lfm09ftNdG6qGFd/ROOFQuFfu+sH9UWGF0QIhAJpVXTfG0j6aiKz8yVIGDpFwGUi168jYYSS/bwIXY1Hj"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0-master.20190709200205_1562702605121_0.8020448983176944"},"_hasShrinkwrap":false},"1.1.0":{"name":"@atomist/sdm-pack-analysis","version":"1.1.0","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.1","@atomist/sdm-pack-docker":">=2.0.0","@atomist/sdm-pack-fingerprints":">=3.2.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@atomist/sdm-pack-docker":"^2.0.0","@atomist/sdm-pack-fingerprints":"^3.2.0","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"gitHead":"d67ec8c4bb1862f95ee09589cc93cf83bb67b979","_id":"@atomist/sdm-pack-analysis@1.1.0","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-dvs+5griAq5egCAel5z0Um3Mxma8PQuRKXC6NkQrLmnDXMQHJQ6ETz3Md/GA77pme3KZNIL8ZOrCfynlkqOjTA==","shasum":"92bdb09a5d19431e2c6b6858c9f7499e68ad5ced","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.0.tgz","fileCount":77,"unpackedSize":300958,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJQsiCRA9TVsSAnZWagAAusgQAKUvlMYYFqfFKcWtR0nV\nLv7nRZtuciz8pgQ+vM1XtgqDw/OAYcLag90qS6/eBqeyd6wHJrdeSW/46QfV\nSzApe8gUjxSPtMGVOhs4ENn+57WLu57v5F+w2e2TD+krprV3z9ICbe//3eL0\njjrPghTsTc36z4U/mavvWkCDjyE4a5jkkRmo4/rl1RoKBokFIbOYpdFzWcZv\nc+r8I2OCbH3iQhdR/N/H51Xx80i4ZRPiTdi2N79IqWFQQZju+59CRuYwDVnF\nJN0ze+ob9YgzPJfmA1ysHiahMSBUKwrcbMrKy04u3JunVcFzGX/VvM78I47L\nVTijrQUsccKaVbQpNnZNucYt1b/GUj9GUZJ04vnx7TeEQXMuBvj9oKYAN8bA\nkqjG697oov7vgB9rmfgR7Gy4gzVPtpYx0Oai+Ie2vsooheWJHJ0Y5qKNUSa1\n2rpHfgGs5wD7aNQlr3ge30/TAvS+/oq8fqSRfU6jWrfaJWUJcpkWEgINv4Uu\ntfWTrOcuCAoFalMc6/kMy2uIeEJiwtuVXy/Vqc3E483Jso+CbI1pwuLFgzUA\nmjPhZSvyW3kQ7rhdTRZw7w7DpTUDDNcUV3k/ePDNUPoP3YGKQ2ipZrVj/bPm\nMXl9AEWOqS7fWmtrvBaZxRko6EQ7r+euAQSpOTu6fnEv06iQ0Sphzy4V0MO6\nNJaX\r\n=1cV5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBkQ9bvCqAu/G7FkvVVdfAqJdYApslS71PGYd6BwO/nSAiEA9kUXQR1IGny0gR6cXdI4gGoS9rYYUhDHOGdSV5PUkPY="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.0_1562708769673_0.35949296169834133"},"_hasShrinkwrap":false},"1.1.1-master.20190709233449":{"name":"@atomist/sdm-pack-analysis","version":"1.1.1-master.20190709233449","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^4.0.1","@types/yamljs":"^0.2.30","fs-extra":"^7.0.1","git-url-parse":"^11.1.2","lodash":"^4.17.11","ts-essentials":"^1.0.2","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.1","@atomist/sdm-pack-docker":">=2.0.0","@atomist/sdm-pack-fingerprints":">=3.2.0","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@atomist/sdm-pack-docker":"^2.0.0","@atomist/sdm-pack-fingerprints":"3.2.0-cljeditors-index.20190709232706","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.5","@types/power-assert":"^1.5.0","espower-typescript":"^9.0.0","mocha":"^5.2.0","npm-run-all":"^4.1.5","power-assert":"^1.6.1","rimraf":"^2.6.2","supervisor":"^0.12.0","ts-node":"^7.0.1","tslint":"^5.11.0","typedoc":"^0.13.0","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"198c7ecc6340b69f65c44d0b55a8bdc7ffda2d80","_id":"@atomist/sdm-pack-analysis@1.1.1-master.20190709233449","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-FMqup6lEO6jeayPQFfNcaMJpGxAhvrvvH9FiVQVI1Q/AWK9bMVtQiLtjSMH0HCH8LBvAW5ml6kHJM+dyrdSxdA==","shasum":"34016e1f3cc30317c2c5cc9b5135bb66f4883f6a","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.1-master.20190709233449.tgz","fileCount":77,"unpackedSize":301142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJSUUCRA9TVsSAnZWagAA2LcP/3bPOuldoFnCIKbhO1JU\n5F6XW2WFLkwdXbVSotAO967YXV097RQOSWyQJ2C2Q83ato8RasQeVZJiG+xK\nG8ZAv+bDSaG2/EK7Rb4dduNTiMFASiaQ9WM4KlASfje8DbOY2Ar/VkYjt6mT\nYYmv8C+MzCnCz5o7n+MOBYolwsZL2QP6QPayt4gn6k0zqFdSefLpO+6Yi2j2\n6pjG0R/i6Zo0GInIIKvmgbTUGAoG3q12Q4HtHGOekkVumCAA8yTGBMFiEUak\n+nF2vAMcqnbdyvynEZnJHZCtWwy0ZK6OgHT0zK0s1tGloRWO/dIi6dTQwWmK\nV0xt2BbAGVXX6VscdH7Ze6cKbcng0BNS4gHjzbSuIqN6FiLnoOqT7X3wPMau\nyiCjepsgF154YH9O9KCrFl5yinKgCm95aekD6baryoSiMG9UI/k2cltQ16hz\nzIfe8DwBuffV25xKMfrcVSLYHsGiznP/4KJ26actGP5fSaD3Yk/xgN64X0cb\nr7EjJ4ZvjcXfjLn0rM3Twg+l0MJm8K9LioP8GUPqrBY/N9uWQKx41Y41GjzY\n6feDOb8EJA8+YrwedPIkRHC9c/X0v0uJH3AGGZV3ValW9hey5Xz41Tazpxw/\nmHi+Zl+RqzgAW/bzXwVU0cHme568tsG/VG3TCxBPJH+6DoiXrElfLDM3OmPG\ndgxi\r\n=j6mU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcKW7t7JHKTxJx9REVHBQcFiKpC8Ik99u0iMqpLd/vpQIhAIsupZ3YLDAHJVOVaiqqsxwWPsh8v9TxXNkYHg3jLEZJ"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.1-master.20190709233449_1562715412023_0.8656658682074663"},"_hasShrinkwrap":false},"1.1.1-master.20190710062416":{"name":"@atomist/sdm-pack-analysis","version":"1.1.1-master.20190710062416","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^5.0.1","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.13","ts-essentials":"^2.0.12","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.1","@atomist/sdm-pack-docker":">=2.0.0","@atomist/sdm-pack-fingerprints":">=3.2.1","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@atomist/sdm-pack-docker":"^2.0.0","@atomist/sdm-pack-fingerprints":"^3.2.1","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"d7004e5a67471cf2f614c1488453228ffe012630","_id":"@atomist/sdm-pack-analysis@1.1.1-master.20190710062416","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-eaqy400d9jQ7yNhvSCLxHKTAsykN9CPPEJTkBq5K4yX9tf16WUNVbxoe5BKZFRaF+abv0pPBK383wOFLcvcMUQ==","shasum":"6d332c56276e30430036f0fe2345832d54eedb41","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.1-master.20190710062416.tgz","fileCount":77,"unpackedSize":303175,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJYUNCRA9TVsSAnZWagAAq3AP/2rGODf+W9xh3mD+H+0X\nDMXimm17mlu5EvaGCzrWT7wsEI+WfA8hgwaFg9z6DedIpBZvnDJFq8IzgC3P\n5tcJzIy57MT5yGsrBpO4tUHfkENK6JC0F7aKBObSQYfK7wg5IEP1Zx4ridQg\n/BzcdUexJA1+EclWxJEfhHuh/B+zBPmTiPfyyQqC5eBEXwx9GBXkfpXK8Q24\nGXbcEQJOaJ/lpQE9jfWCMYi59M33MjfvYjFAVApA29l8q2mQP8ZYuIoGRD/X\ntGFW9eFiVlcuXa4GMRpFeibCPeuqKuBTU1S9tVyLBqXUM6RAaihdJxOwm+Fx\nx5t202IWN/8vP+7YnI0LyQywVRdfKByIATckrMUshq9CvCb8H0APIEHuS2ld\n911mab5I7Ub9KG5cE27+l7yjlwGJb2TkVhK68jWcIEOdF2AAFA9/eeQp7mKi\nCK1o6Fwg7Dr0Is53AdlRN2KBiXYD0K5qZfuQfOvUebpl/gwY2PLJu3EDgIfr\nJrLq876luMB09WZVj42xlW6TosUdGvXnJOK7zQ2O2XrY2gUx47VgzpkNNIKZ\nX6HBGBOZYIx61rKbbo5Imc71jxHrZjyjyjowExzD3/UIWTdHPuInbov2h62c\nu7HKETuMkT9HCCHg52NKgDQjvfCctJz4M+5yW3X8f6tuBsfgjYzCnSvQqnoV\nIYX7\r\n=SmWy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxPmcfTFkB7S/i7kbIpanaZbqqeoTslP59eRLxseJ8UQIgS8QNsvf+V57xfdMNGmWpJjBzRAQQGTlT5nvMede/ahk="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.1-master.20190710062416_1562739980465_0.4620611990512431"},"_hasShrinkwrap":false},"1.1.1":{"name":"@atomist/sdm-pack-analysis","version":"1.1.1","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^5.0.1","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.13","ts-essentials":"^2.0.12","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.1","@atomist/sdm-pack-docker":">=2.0.0","@atomist/sdm-pack-fingerprints":">=3.2.1","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@atomist/sdm-pack-docker":"^2.0.0","@atomist/sdm-pack-fingerprints":"^3.2.1","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"gitHead":"5ee0d83a32e803f43382e4225f25e6e9aaf1e43f","_id":"@atomist/sdm-pack-analysis@1.1.1","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-6sob7Xqt/qoEzzwUqs29YUyHHM2AWSkNL+C4t1Uc+s/GMfkTJP8Pns4ZzO9Krm4+5H+oyo3S63HLP3F03RWDnQ==","shasum":"29831110bd10496a45102164ba2a78f3244ac036","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.1.tgz","fileCount":77,"unpackedSize":303153,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJYU/CRA9TVsSAnZWagAAgIQP/2HOS8mUq8ZDF4ooBALK\nbIs0BCIyf6AwPBWFXDG8jcmtui8wrZv+js/IupoqZtNAnd2eyntua0nQzSAB\n6Iv2St0rwsyMU2vx40WDPtqFAfqN7ZofERmfX0YaK3gL7dtzD1rNcMUIl3MJ\nHd66K8ESHfnHxeSvBEGh2sVOMQ3Wpzuts4llMFmDfAuocDx886PRpVsZhabk\nNdkcjFR66f0c0A5aSyOVraUb6oSpnsuNDFCTbJIIAUaxsvz3k7eMt6DQj4In\ndW8Tw3hgU2ljReUisHDTCOEXLofWBw1nzPtpoiOmO1GdwNCsOYwW6TgvdYs1\nxp4nKqiLMaX0dHwbx+crAJa8r/aXDz8lTLBCC+25XjTJJ4+T1KJSTb8INMWE\nS+CEZYOXqXZZOw/wJm2jCAE2BCfgz/AZv3GTXaEJmsuQpDhg3VxgOcQ/DnDd\n70HpdkUyCTltpswdrbrxWjduAh1CifCTwGFwMj3O9Hdsi9HKQBMDdxoPzlhK\nJBbPfMk9OTlFJ0GATWPi/xeAHjtMZhc6p/az3zTWCumhoULi9uBNuA8l1aUM\ncoeqpqRiGsoIYgrrcS8Bcoyym0EPzs3TUEL3qPIAqd9KhMAFesRhLtKOUBPL\nYFCK4knJZ23/jWkl30LzU2IH+6zCnAvt2SxJEzn5KW6ZE9U6+YYLB1kc2K13\n2V2m\r\n=X66D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvKhE5lkN1Qh8XR1/oWr/aUoskoRDNZvGRrNTMisVEEgIhALDLW5jfFjhlEhDo8jTGWp10/S4po+wM7/VrN+be5/YX"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.1_1562740031145_0.7199585511693085"},"_hasShrinkwrap":false},"1.1.2-master.20190710064015":{"name":"@atomist/sdm-pack-analysis","version":"1.1.2-master.20190710064015","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^5.0.1","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.13","ts-essentials":"^2.0.12","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.1","@atomist/sdm-pack-docker":">=2.0.1","@atomist/sdm-pack-fingerprints":">=3.2.2","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@atomist/sdm-pack-docker":"^2.0.1","@atomist/sdm-pack-fingerprints":"^3.2.2","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"fce569d53fb19120e7929d53c2c5a73b6b9ec2b2","_id":"@atomist/sdm-pack-analysis@1.1.2-master.20190710064015","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-A0N5H6FQIUQBPqrwvexduODFAT8pKcNBVsQ/L6l8PX0OUNnaeaWQFgL1zQlXH3oFUbZuS8o1ZOr0oeNlsfZqWA==","shasum":"1ef95db97aedc3b324896940174d02d713c35c85","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.2-master.20190710064015.tgz","fileCount":77,"unpackedSize":303264,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJYivCRA9TVsSAnZWagAApysP/jbXo1mb7oIiWxIjT8Db\nEuGRPLSO7UvDlMkH8y3eZkbErFluNOxr9iZw4Abyp5LZ5omwKZ+dCcvJnJt6\nTyds5cfJnUaiDGhIY3BdQtr4e+ZnGbhEJw6umzQ/oj3L97TZsmXBGPn6Dw8Z\nfWa515VItvjfG+Ldo9psilkAOa1ECr+WSlHU+y6LeMJH93vWmif5hxFXxeeA\nhzPcO4S6ZKlSP/GSlZXCC8IMBHP5jjt74VVVxBfdzBJ2UNtGATFeEe9BAf3V\nXkAaZvq85fxr6V599Kg1jARyRApI3Gh8WeTLqOgSRDRLVcH94iVFRMyKvqT2\ny8McLR6R3fadqb10GmRGOPFt6wmuwLWfJGlMlqF73O98Q0VT2LOGjnW/+Gdh\nvyPt7Px9gYKJR5+4SAnXPZYc3eihgd8qWuvlFRbJR2rfuKgF8F42WAr5JyN+\nhuTmoS1aDfTESZg/SV4Xe5yYAH+dqo6uOXDg94gYxpRUxDI5r++qMXIf9LJ0\n1XIvcxVXiAs35/0NpwD9KXK12AZi0jIgTpmuFHF9RbxhsqBjjHta8R9kpFSN\nAseAicJC9z9UbR91T8vhKBUh0ZPmzUse70ySfgJWcNmRGh/CrrrA7SY+MI5p\nVgvUEZetl0hinEs+2NPatSeGPjUnnf7/XSrktoykbS301r+4R+LhWZlQM4JM\nrW72\r\n=CW5Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIALt9l9ovoO3SjAbQbjUZFrqm49Gz/0MG6YeAOnA7XrPAiEAoJ4BIk9QNXVX3Gj9qiPCXETMz0g0+fIXVl7q4DoHPy0="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.2-master.20190710064015_1562740910678_0.27054237130989756"},"_hasShrinkwrap":false},"1.1.2":{"name":"@atomist/sdm-pack-analysis","version":"1.1.2","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/package-json":"^5.0.1","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.13","ts-essentials":"^2.0.12","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.1","@atomist/sdm-pack-docker":">=2.0.1","@atomist/sdm-pack-fingerprints":">=3.2.2","@atomist/sdm":">=1.6.0","@atomist/sdm-core":">=1.6.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.1","@atomist/sdm":"^1.6.0","@atomist/sdm-core":"^1.6.0","@atomist/sdm-pack-docker":"^2.0.1","@atomist/sdm-pack-fingerprints":"^3.2.2","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"gitHead":"1d602e72da9d4faa7d043c638f3ead1bcb448364","_id":"@atomist/sdm-pack-analysis@1.1.2","_nodeVersion":"11.13.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-38i1PPbC1iFIW4pJRiBHVSBcGPj/d04YvQ6F8TzYKQiB9Z/i+aD0IBjKiS85mCgXKovBGQA0G0FpQ3h0pyYQdg==","shasum":"c38748eb04f2b2cc17c9e705a793e953c7bd65e7","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.2.tgz","fileCount":77,"unpackedSize":303242,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJYkjCRA9TVsSAnZWagAABTMP/jJ6a939H3mOV9D8h4sf\nJLTUccQmGCNRhZ51Zw0eUbrbV3FuMFzu4QcaQ4QwdtDH7GJ5TzPoS9oln3Q6\ntX6D8jdWzTn+EgrIUzk1HKvkc5XMmgrIIyn3cmyEsnYjYmTM24LKn2iqXEHy\nE0zLo96aM5KdPPUOi3N6DnmdV/CxpULsc+aBdJqB8vig1X8IMpoA6ogH+/e3\nKs6LvLIV5m9QbSv59jgEsW4ZOg5odT5Ej7bFt9C3A7GSmVBVuZFTduNxwyVS\nTg3fOU0wP6JCrqxTQeqq+VmX5Fln0VAM+QoSA5Et67JIFu1M9WNwNZUsaKvE\nillZLp+fv5iIFDogkaFeOT586L9b9W3ADP5jEZs4zoVr10Hil09TkYGJsgd6\n/Tf+EWFNT8MvauMPVUBq+T6/Thn7OL5lwyJDbPufuiZoPPL+8C+5IKtVcGYD\nws1wzK/lx7QuWEWqC6U9r0bTe3PlpBqhLaOYHWuVwpQxgn2GCnaLCnPgM5Z2\nF3a2SvOXKrFkYEgL35VhnCtLjNI5bZDe6nlivovhhFrmxw5PKyCZbNg7CsCa\nq8mDjizZVPPH2b1SUlq1f9W1+0G4nf+Eoc+qTkz1jV2GGGIH0lBrWXG6zZck\nxckoZdZA7UULA1Lz6g+BXuaQC+a1mbsryP36giout8ffatQUxzq4EGk51LRs\nPJT6\r\n=5x1u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCL5iVbuiUcS+w5onPevV7jPRGpwAm6US29jWZJkKahGgIga2Xy6l+27I1heUNbHNkXr1EJ301FtR4OlATcjhN+bcQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.2_1562741027349_0.8116349532771197"},"_hasShrinkwrap":false},"1.1.3-master.20190717100948":{"name":"@atomist/sdm-pack-analysis","version":"1.1.3-master.20190717100948","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.2","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprints":">=4.0.0","@atomist/sdm":">=1.6.1","@atomist/sdm-core":">=1.6.1","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprints":"4.0.1-master.20190717095528","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"00f5f241193378113c39eed44526e87503338baa","_id":"@atomist/sdm-pack-analysis@1.1.3-master.20190717100948","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Xt02oEHumYbwESbpV7tIM/OaDVhdTZFxUAIi1OZI4R36DLz3mT/lcees9n7pLJ61bjx1BZfE5lSWM9pJaaMM/g==","shasum":"ba32ba8560e96521a82bb5e4d14ef82e9e383b72","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-1.1.3-master.20190717100948.tgz","fileCount":77,"unpackedSize":300805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLvR4CRA9TVsSAnZWagAAdSQP/3B5G50modPCe4oXTrun\n8Q+dXlEHrCOmO3Nq+Iz/PNkUIY3BCyadil+Ofh+oLcL6WMZ4h+tTpHRQBEDs\njMJjVhJ1nbatF9w1T3fi5Ksg0b666bFOGch13B0jAGHuOnyz2AZWVBlQrSc0\nUl/MPhc+lHP2pWS7KcHTCKKFt/uGYVI77oAx0BcQKfW09xc14OzhCxzrkQ8j\nFwnxQY/cTRjheQk3dKIv4VOEfFAEg8hxGUKdTjaVF0xYXS3nl2rY61pkVL44\n9VCO1JwQUdkDAlf0n7ijua3OSrL3Sabg1ZTLH4l+wVEjk6HmiYBVK3oNNzGm\nyHHwRJvmX3D/7YMKF1vrfpzUl6UV0IWnm59l8evu3hZDPZvr9rjAfp6Mi73z\nxXAzISlR2fB1EwlgdW1YTFTpJAUEBhll8XaRuVmVebDDc4eubXHytn/ufKSQ\nGeVaIVN7x7IOIL0ezMglS2wM7qN3mUrpDQho8sJj/eMVGPm6JRUZZ3POC73Q\n4DEXjKS3ol1u9Pb4S8oFYnCnuHlJXjkjt0SBXa85kxduh0fpTlhy6lFyfEaF\nnI6RFczq2Syr3utbzYmFew4QZQFGH+8Y71+BR+pRp8KH4nXTLaAAEOYes3oe\nVONCX4qrBHeVM+/vGTZUzrlquQzeIZBeVdhW19x0L6PEVqLrBtdyOy4+Fl/s\n2RT+\r\n=rgUn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC12tLnN01bqx/QeAmwLg7dvzWc0M7RYYTWnw2yq4u8uAIhAO/dVHSBQbUCAiY0np5FbbMtJnScq0dWZpPaAcJ+/k2A"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_1.1.3-master.20190717100948_1563358327726_0.12056807315352347"},"_hasShrinkwrap":false},"2.0.0-master.20190717103823":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190717103823","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.2","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprints":">=4.0.0","@atomist/sdm":">=1.6.1","@atomist/sdm-core":">=1.6.1","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprints":"4.0.1-master.20190717095528","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"51bd760af0213b7c837cda4d06538ea6b3a68bcb","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190717103823","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-bDoTacHEzB7fh4h0uaewIgCyZzyFgACrfEIeoCDUa6pE4Kgmz34BvrFg2R17IErRPiLUtDjbf8JVCTykX2O2yw==","shasum":"576f7b7f414317d715db282500e4e0ae921aa8cf","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190717103823.tgz","fileCount":77,"unpackedSize":300805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLvtbCRA9TVsSAnZWagAA3vkP/R1H8srH18O9eE3gbxr2\nM6mw9UUye1jLbHa023uVs/ngnZPnAlEFLDmcD9vEBLPHc0oCWytLSpDOfxTJ\nqT77aa+uE4pjPC+NEleZEMX1dlxUgC67wfOJWPrlr6Nrz7qGZwCwoBwXIRMu\n+51tCi14ELPDUFL6+vUn0bzKu1S+/IN08x4dWNPBNGmjq/g0vve1KOs3+ddt\nyTqNnb7zXKqNN4WfluL8u3MryEmzTUNCL2rtKy6Cmrgkvxt8aBxSjSlj8RCG\njuPFpDobZpsPsHmaGVOhcYhm+XK8qdt0bgrrsEw2e6o2g5tA8K3yo6RKmZKJ\nKYzMbUZ21A57ovnwv/wBH+j9TWH6hhPqNaa6KYlusdWw/00gMpDqp1f7KkmN\nQg8oz+YYbZV51y4qWeMPxwjepJycImm7ML+Pk1fGBcDLdxNB4436KMT5w9EJ\ndxfGkVjLwh/yEm9NndSAtcx4Bp/caXabHXSQnzdzAnioXktw+GKN40qzLaFM\nLLz0bP0KbanBh2Xg9TkWl3TBVl6oYU9X2SGAZAXFWrWAnpUZhkiQBwRs9DR9\n3bwfJsU33BaS4aEb51ydgWTBnvHOElaMaBwn2Oco3UyjHsChrvzsT5pX4y5l\nGPQ1S0CFzqoQy7FWvXv2DHswGY1HuGuE52xTQD1In3WAsS/O4BXPjmLJOqpw\nR3C2\r\n=WBNL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBzRu3pW0SgPnH/dk19BKgoV2mhMyj/2q2b3Vpr6horbAiEAhSE9lH7ylIWx52rMNvOT14fAe//GH60Bg73jpp5tUPM="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190717103823_1563360090611_0.5123516707725786"},"_hasShrinkwrap":false},"2.0.0-master.20190719000543":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190719000543","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.2","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprints":">=4.0.0","@atomist/sdm":">=1.6.1","@atomist/sdm-core":">=1.6.1","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprints":"4.0.1-master.20190717095528","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"6a3860bed763d3be6af8acd51cb83b703f0400ff","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190719000543","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-/bpJFSFWLjhVQelVNVIQd/iKNJ05bPSoWc0MiLC40gTSSyRGCErhATri7X110B4qAXibBzXXN+7/Pvfkb/zLsg==","shasum":"2584d2a34d7e38b798e3f8ab01b70d7cc8dbfbe1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190719000543.tgz","fileCount":77,"unpackedSize":301205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdMQnkCRA9TVsSAnZWagAA14MP/RKmjjd6RfhUN29jF7py\nJ95KJcxS2785fkQoTCS7vFR9EW8dWzzCQtzLSxERMJjtRmMnFJnSKb5mzaVw\nCyRRA9ANdLb1HpviMU7X1ANFUnzOhxepnTdRkbBilxZDoHZaU8ZpoSnORvPu\nrvZC/FUib5Pp6qFd0pFM7+EYFWCWMKDGfqJG/f936a8C2rMlFvwxMLqeBjTu\nVMLlxGDEbsggyOaKgZDJivG6f1KjA3EAJofRguVC7UdA3s9n0lGCOivMIkJr\n/lpYHlVvZ0P4UbKprTLw7yKa9kOcEr3u09rKW3xdAGFhE5D7Y+Yqkpax2wiF\n/DlBPWyVfayzyR/7pW/VpTAft7FQOEJOo7NqEhlFVfkCgz2lq3i9J0w4qydA\nbMLty6EjMP3puVfAwcICY4cPK2mt4vlQk12Tg3lArwmGnLnDYW78efH218PR\n2Z+kwUz+4NeDzHc7q0vHTCj7bcZcYSAgmjWVlt6+oaUKw+YoRwjazer5ocYt\nbpeVNJtd37AMKjcaeX1rvoBl/AUTKmqpZWxfH7w1gJPObdiNd6+2rGYwmGJk\nqFMxrEdvbZYm9Eqg25mkR0oU6vtdF4CYITvzEKfJ3ltvwISXS6rHahrLm0SJ\nQmkXLl6XSdw/uDEUQ1s8tc0/fXhWNUJJVXLRWLyzpkhYI9Cq2pu3sw/AmC9x\n7TU8\r\n=sdvY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQ3J2I1XCeW7mRVjEucL8drG2Ep4kW46bcK8d2DMQmFwIgBsbrL67XmgRwm5wvqIjFYqlk4ZsQ2DKCz2O74fY1jkQ="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190719000543_1563494883177_0.32640595680036943"},"_hasShrinkwrap":false},"2.0.0-master.20190719000956":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190719000956","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.2","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprints":">=4.0.0","@atomist/sdm":">=1.6.1","@atomist/sdm-core":">=1.6.1","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprints":"4.0.1-master.20190717095528","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"b552829213182a7086e832752ba9fe5f475759f9","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190719000956","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0ArRdoOVBKH3gGY8pnH3qyrnzh+CJorwFkad2ALGZVcY54OxL77hZkDrq4SqAVLT/b8CHCZ22DCdWMNATB6K7Q==","shasum":"ab97062aeb282fd7a4d38ef9625b397920bf6e09","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190719000956.tgz","fileCount":77,"unpackedSize":301227,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdMQsdCRA9TVsSAnZWagAAb4MP/jtmNcFl/qrszEisgt0g\nGqJqhXyGq8Zmtmrerrokjgn7ItBa0Fci9hXkMrG+bPGjtkPiI745XEwz0YgA\no3SmwiuOkSRyLHM/uuRNMXDSAgg0VAnzg2Ls3ZoPd1KJZIo/4UKHqRgqCE3/\nai6wBQft4x9bl+f+/UVpY5KFteT+Y3heK5zY9tmQdaQt3Jn/KlPvOp0M8IGO\nUd6H4oRhIZB7f5Y1Bd2reoYgMQNYsJzsVyo8NnFXJQ4oLSqye4kTb38+EaEZ\nCim3IIWbaRywQczi0KJBNlBh9OGWs/CVcFHgX3vFfdyDhCZf7yoRuKzbgRgt\nmKgp57B0pDqYX+0uowMZmNA9aWTr+ov/mqhLbWjhvxf5oHOrPYkN5nIf57wq\n/DH8ydOnchdwLXCT4pc7ghVZxvtUvr5675+ZTmWoJoPalr7VHS9XPBMeRjeA\ngRqzpmvBohgS7sv7u1Z66jWx5ukrQ81NnmxAGxQTaG2QHHlo7cJgcNCNhJ4O\nZgbm/AZQncjA3dAOXruWTuYTk55zuUHZmC+lh3obHO/piq8g6FVfbhdRUZbK\nS6gvvmAGtHbppkU+IpFbP1uYSSGlHE4YomyfY2hp5AJDS/Zs4iNZNXs2Xi74\nM61ASBRxoNAeTxsrLXwVjXPVIJ11JIEul3zWEHqIZlgdMqAf8+/K2p7ZvKpy\nQnco\r\n=hxzK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJAK4xJWVhwHSAGTd6UUPFAFNGIDVfSykTApDEFpoeWQIhAMIS2cpu9vNqk0TIx3oLeUBgJ6coue62L/tE11IhoLEb"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190719000956_1563495196400_0.9627638767965003"},"_hasShrinkwrap":false},"2.0.0-master.20190809083541":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190809083541","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.2","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprints":">=4.0.0","@atomist/sdm":">=1.6.1","@atomist/sdm-core":">=1.6.1","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprints":"4.0.1-master.20190717095528","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9fbd5531fe83e8ac4c7bac4bc6f5b32b0691e8d1","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190809083541","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-QLq9Om6jJVFPIaTM4ZWNBmpgty10maEs4ZWCmXkxrDsZiCu52GzRrFW3QJIM+edwZIQIShztgrJvnhdjeBbTCg==","shasum":"2d3126490e23c9bda98c3ca12e250e7492fe1571","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190809083541.tgz","fileCount":77,"unpackedSize":303249,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTTEXCRA9TVsSAnZWagAAsp4P/jvd2Xs1kYSYQ2pZgmYG\nsIGD2GKRR5dQ1oCkEGK2uIT+WxMsRqICVyWFwuFTQKSfOxEwtlwQdBBw8DPB\nOaMuPIZNn33YuNIz/vtwPjS/FCgsU4DZseam7ixrOWvb1L1TGQysPDlFbCdE\nPGfkj0MCMkc5oL2/iEGMP7IiNSwlZsHFALFRAmEiuEbaFOXCRT3r3zJoQ+NY\nTfgYU3MfZce6YgYxX5c6hEbE1LM15YkD3+ThHYmYcfnw0z15ZBEJZ5P6Rt+h\nR30/QaEF0KWU/FVOyeTuazBASGe1gMkqXU5Js4mEgApz6AZBqG/7maFMuved\n8k0km7K2dsagxUCp5s8J89QmmJoxtpX+RZUxsO+fY3mtaTwjzfZt5j2mtq25\n0N1TlajvSEKMc68+mf8lXZERcriR4JHEPqZVUaY/RrvBjStJib1uZTaYtRLz\nzvIA2yEqOe3mgnsO0I+RMiCVZD7CRSI+p7HAV9ui+cHsgVnOeAoDCHre2hrB\nb3IfW/Ewg86HPinLWOHy+uRRNK7p+weWOw5/xq5/jGPMV/6wXpPe77fV7Sk7\nOyrSLGAMNkMuB9JoEa1ofJI8e6CfhoHMmXbYKlAiqnv9u+I6lLO0cQNYGt5I\n/CU73v55b3/PGFaexJLnBR8TYX1A6C3AzH/GMsGDMno6QtgqANCwrRFdCh++\nDXKg\r\n=hahJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFpvvMeSwHVZROYxER8CcGlPWkNZAV5ZQnUzGZIWIvN7AiEAxmvUQ6DDZ1e3nf+tkolm2hn1JixHDK5EVVdoGO+i5kE="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190809083541_1565339926759_0.22401549054727266"},"_hasShrinkwrap":false},"2.0.0-master.20190809101008":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190809101008","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.2","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprints":">=4.0.0","@atomist/sdm":">=1.6.1","@atomist/sdm-core":">=1.6.1","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprints":"4.0.1-master.20190717095528","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"fe9f40197d7e6f573d63ee8d9d82ba1caec409fd","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190809101008","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-L+j6NR8PnHAueTeQ6PSu/ymdiF5Yio6o4uMo1dUuLIAqVj0clu7AKm5UWkyQESpvrIUqrLOhp15IgzLyPhfTeg==","shasum":"376e392d2f8cec01f5f95cf37ae0bfb2c5bbb92b","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190809101008.tgz","fileCount":77,"unpackedSize":303400,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTUcpCRA9TVsSAnZWagAAAHQP/AkVhh5w1DXD1bMA8vdO\nUMnSWuDExCaGFicGeiqVjj0+HI6HAWO/UnCPetNjEhq71XKhhkbX85r9RhXE\ncKCOCBWnjVjZldj9OZfg0XLOYfaeu2dtku5coi7ygTWXnkcRcnD1PK7uTUbg\nVL+nIqoKhF78SrMtFlF72Nf1Z5fyok/fHc7MB1LgDj7iYwDboe/iLd8o0VRe\nBcnpSjvq0lPG1QcVpUIOrjLXO1eX9WsUatKvdox6Unz8EqwtahofSA9F2Pqv\n8UAOyeq4uWmH+7DUUSuLnEHEQMLHhUYhi8tacyN+CZKIXN2YVCiLr7daMA0e\nARbp73ldVZri9b046d0FysXuPlwsV0JSvrlmXRxtdp4Lp5p1grpecIFAKmLI\nPFQJuJuTpxdV1RwtOAl8ZcLxigtyq9v7k+nH4vEwaeG8WxoKKQzvzxaqM7q7\nNW6CykPdft3BwlZL838QbMPFAmTzuUsAMFyIh3OneigDhEYdlew1joArthIC\ncHgmgZ59N3EqEk8KbvYixGaeFxmhv4y7ti2LFzrE9kirrYUH1eP53U3I5pQr\nltEMwi827zByMWgMc7SOD8t8QD6z2qPaDT/o4yT65H4Tm8kbsi+P5LrELfjC\n+l6Cj4xaIXVne5/vg/oMS881zwULQNjC0eoDGMZ0MwNO5fN9xJCSnJiyvyT3\natKP\r\n=SxoR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFc/VwbV8rSygr8US13viQj99OkeDXKhW+xFeOT0Q49AAiB34j2a5ipI7/D41KSbzaomQnRYG5PU2H2y7TIdb95obg=="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190809101008_1565345576692_0.8010051767631017"},"_hasShrinkwrap":false},"2.0.0-master.20190810010951":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190810010951","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.2","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprints":">=4.0.0","@atomist/sdm":">=1.6.1","@atomist/sdm-core":">=1.6.1","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprints":"4.0.1-master.20190717095528","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"832fa9d179fd613cf4e9e587149a85c4bb31c88b","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190810010951","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-x/AvZ3AWiwx/SgOGG5tzUCjzBzf1nae6CdKtBkav6tAzRYS4q7hXF/bkgmItlwM6fEBY9GKp3q/pRrtkisJkHw==","shasum":"969475004424537ee441c1fc95c27ce660d3b564","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190810010951.tgz","fileCount":77,"unpackedSize":304030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdThprCRA9TVsSAnZWagAA5twP/iC6Lks2xjVyzGkr64cT\nP6Tj1h2dInCTDTCXmNwKJpvCr8MigglRbFgxNIFSm+gzIiEGr4s7uHAE3Fo2\ncVYSseMP98i5uR/EJYQek1i95a3QVAFldlElutcWdX8gunlSGrKW/jgnmkYe\nzL5vQi7ZGabMVDkhTjkewN+0CTIY9AkvqcNAfnpHIHmLPwAgTNBVDV8yPqa9\n4ItWhEf0yj/Nv0lmU1ckMsF52CjzANAk105RpPShElA8t8Yvu10UXzp/OwNQ\nLs0XQeU0ls9N8JI/WyaYrCyj11Muv5Yopluj1jU6qnwwRAi4/gEjI93cC1BY\nX5POf+V0l3/VWhw4gNW9ZhT4SUniFlfg3uPz77XzuWtVskK1yZyGWljtSBI+\nRpVM5JpHPKGdT5RxRcuYvm0kc5UlN63tDUW0L8CVWlX/MgioJQ732t44AJlC\nVBk2neZ0MDVSw5TUjBbXIm0n0rFVujD8nPuXrloiGOf9t9icA9egic+Kyog3\nkw5zggxLl5MO6jwrA0BrUaJ3A9LT9qXl8qZXH/GVDyrHYJVuh4lpPE5vXh4j\nVK9FMNDqqMeNj8eDHjk1s5FhPMLdLug2AYAaFC+UhiOJHhO/a0B2b48sVKJO\nHVwbICTkKn3lGzbReLJFyq1lMlpM71QT4ch3cx0/HnVnkoH/1kk4vSlTYoVf\nlx8Z\r\n=eZBM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNkiolSHKNhYtiPKivTpfli5TpMkgwVFI0EJ7mm7NpuAIgbyb0M8GqHji0V/YNYOQUZotBDGCmQXrg7bgwRwfvuLw="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190810010951_1565399659164_0.11018435158246342"},"_hasShrinkwrap":false},"2.0.0-master.20190810012404":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190810012404","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.2","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprints":">=4.0.0","@atomist/sdm":">=1.6.1","@atomist/sdm-core":">=1.6.1","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprints":"4.0.1-master.20190717095528","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"fd6f6e30f6cb616b2ce805db204869766484850e","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190810012404","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Noq1wuyN/rCZ/zt2o8cm64sT1Fp6Y2yCXA3PmGt8BtgpFpdVmL5S3o6nyMmjBhy39XG8zeyJWqaFlFWTigSOyg==","shasum":"4c1ee9127293d60c928a3eb4995647dc0fd623f9","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190810012404.tgz","fileCount":77,"unpackedSize":304186,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTh2hCRA9TVsSAnZWagAAsYIP/1rjQo6e91CZ1jlmGV8V\n8ZkSNnZD7CKMoR9r4J+BoPlYeX1tojx3xcE+QauO5xiuhKG19QTZmaQqtV0g\nDehJklxeIyEIx/JMB2R6QjLw5tYRxYXJxMtL0zK0nfiPDOPEv3uVMfg3E3I9\nvtpOy4q8zGgMX0wguOrCGaC+JEnE35S47VgYeQNuVsz8eJ/EQ1M7H3Yawfm7\nyHQz2zLRIuX7WJxY2+ke117tqBGtAh8CBUwcUWEnTuWdIpzVJQL3HJAtwq27\n5MeS4urhM3jCwrE28C0Mioz3jliJSkbn7F0lHhX+lhxpCT+gERo595L5oPvp\nS3uYQUowXeptVAsF0e49T49rcyTaXcU8PbmhBV7+sxfLIrpUjbEubF4rSKE9\nWmLb3kwlQL5JxzBapbl4pW0LViLPhlk1YZvF7hI15sH7IIpVasrNqkuQ4pch\nE7aRoVObt+kvPz9e231mKf/HYFTkTwoOk2dS9BQ3museQlSCPJBn553OsVrf\ntFF/dv060CvIMoLa7sHqqN8oYulUqSdnW+BXZBlPo/Jvh97tUNYn0lnoK7td\nvTO4pgklqynqa7an3tjfeIaqhYWXSu1oIcei6Cj711hqbVVGAK++n50lzIUq\nMosJJ6h3LQKi3iZvvYHZB4uXWB3mnpGVTTeKOxsNovlHbrxYPUTynCRemUIj\ngA7I\r\n=+AZz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFyNxsyd8IdAnCYNKtAGw5PsPR4RcFsfbz3h9FWdfDhAIhAMkQClvgsNZkwiwzdizYAmgvHnq9rozvTzshAiGaUYsC"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190810012404_1565400480936_0.22881928822603093"},"_hasShrinkwrap":false},"2.0.0-master.20190820223220":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190820223220","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":">=1.6.2","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprints":">=4.0.0","@atomist/sdm":">=1.6.1","@atomist/sdm-core":">=1.6.1","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.6.2","@atomist/sdm":"^1.6.1","@atomist/sdm-core":"^1.6.1","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprints":"^4.0.5-master.20190820184139","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","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":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"9474197603bad7b86782558def62f29d684ecc59","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190820223220","_nodeVersion":"12.6.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-mJw1wBaAiFq1OPOAtAwc0vqf6OJs2nUKdglDP1OKw9NvJmCCRKmRjgnuIdilym1sCnOgWB2xMgayrdIrQMA4QQ==","shasum":"24a38a13ed258d4a3c752434c7d99c691f8621e8","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190820223220.tgz","fileCount":74,"unpackedSize":302421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXHXOCRA9TVsSAnZWagAAZ4kQAJDOKuFSiKqd16eoFugz\nlhMNXI4ERTbF8WvqsfklxDe1Vo1xvRv8XVW84u4mLDgs2DEeqlJ2niQRmt5/\nI4RIY8b9VcSYFLTAHk4KessF+lnTA1edbBj7HY6mj+Zo8zcUZM5yr557z0V0\nYyPnKjCWUcWIZ8Qq9zqgSCzWwe9Mlc5v45Y2JAspytb4vkF8uILpjtMvl6Np\n64aKmC/iOsdHkFq0/7MUyb/fe8f7aknWSGxB5gwoY7dfe6bFLP+pBTckdvtu\nFUXPpYqAOu81DziT1JuMrshfQvWGqV1UEN6gO9wfazt3TinuJss4FX/UHXxu\nMJindjveyJnoOCG58QRzwAHBs4VgcygwHfUXXvLIsik89UGYgTrHmL+S7pkt\nxjG0NWmpUYa7pLrGIj0fz9B0is3yhB/xvOMLILvo/dRTh1utgrwKb44C7t+y\nqh81MZJh5NYIjxkGWjN2pcxmEGGhWPW3eEWFmoaWSahXjV6xd/+17SmCUhyO\nFXtCLTAiQ1LeyFZ39jlRYJGQ4Wb7DKNE+uHo4HfqnVRPIU3t1iRbOMAGGpRd\nf5Hx+2+C81lymnXPd+bqbG6L6X/EGYz3knU95OR9eQMVYT6YmtFBF9dAzeth\nqCgX1lpjeVoT0d4UcJtGg+zQ0UgwCW0UK4+P4+SKgwrg9frlqWCkDp/tKF/E\nc/Bn\r\n=QgEP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWoAgp++pLx6ywBkpqHMqKlcPan7xwQWEWtaI5H5kCJgIhAMC9G9SyKX+jpz+Z1aaHrnyWU2vlQOgjfsocuq/g5tyv"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190820223220_1566340557841_0.8088498063317124"},"_hasShrinkwrap":false},"2.0.0-atomist.a260p86nh.sdm-deps.master.20190910092415":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-atomist.a260p86nh.sdm-deps.master.20190910092415","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprint":"^5.0.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprint":"5.0.0-master.20190910075000","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"^8.3.0","tslint":"^5.20.0","typedoc":"^0.15.0","typescript":"^3.6.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"822f3d1bf054498a543ad68db5c1f1d6351ce865","_id":"@atomist/sdm-pack-analysis@2.0.0-atomist.a260p86nh.sdm-deps.master.20190910092415","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-eCiUW4oX55WKACVDkXxjUq/dVkrcfCU75Vynwe2INyy5wuLsg0NreB2SeBM1yseiZIqg61uAYczu+wZDuV73jw==","shasum":"9042f992254461348adc8d7bef4ebce5749960b4","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-atomist.a260p86nh.sdm-deps.master.20190910092415.tgz","fileCount":74,"unpackedSize":303498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd2zJCRA9TVsSAnZWagAAJdsP+wXYszXlmRIWFEqS+bCZ\n9FKuqKhM3eAx3jFOqyb/uCLrXmtRBfvL5VihtCzUDRiT8/oqfRCIO1V49pUJ\nMMCRsqLsglkRDDwKN2cVORB17qufioEfHyCdbJBb4/vc6K3I2pDT6MTCQTPZ\nav39c1LuaQTenSpEYryiNgT0EtIJbA4FKl1Ahzn3pjoQS+uNCsLYLkxUeeDD\nmi/N7eDZeFFIxhL1vCGOSmZONMZLMM0xNuV5c+qACl5PsJSM72cctyOhGpK6\nH7H610LioGLn5BTtBLKnqTeKQ3pFqUnYWOoMxDOXyATf7K8sMGXLtoXUb64C\nItRAuLLfxERPpjh9BW92Dp4yT+Y3n64hJ9F/5Quy4mUJJjkv8MOJ93zFYHcL\n+GZBZGdA1VxeJp72YBygcGPN4bnTFNIMU7lUxybusqL845fXeW4mOap2v2MR\nOs8YmSisa8NaIP/GsiVXMJVg+ev1nJwn+H0QT3r/U0IA2WbkVvm+eYe0BD3F\nZ0bJUlLHb8lHVqT2I8AqnGEs88hfDuTM0rcME7Zc2dXqSid5FRToqTzWjQU6\nFQByg/283vFqMMCLQgu02IEhC59c7ZvFBFWpq/AMfZup9ko8QGN07rUchQqM\nay3Fe6nTVByHHlquROMBS3JGYXZ5A6r5Za0jYFNDDTJbygrHB4q7+6lkJ4+D\n5HMG\r\n=/YiX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB+hy0V0nREigFmPA4SrwwkIuO9nAAOOV39wwAVX0dQTAiEAy5Og5Gu3n4tGQ48iw6zVq5XIEgwCkmTgST94MxPu4aI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-atomist.a260p86nh.sdm-deps.master.20190910092415_1568107720816_0.4091345433149747"},"_hasShrinkwrap":false},"2.0.0-master.20190910094029":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190910094029","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprint":"^5.0.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprint":"5.0.0-master.20190910075000","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"^8.3.0","tslint":"^5.20.0","typedoc":"^0.15.0","typescript":"^3.6.2"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"fa7dfd6048691907b96d0dfee843f33183928691","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190910094029","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-9mlZmX0mcugl+Z4FEQL7aefQHkX44/b/eWAWo40kZhbnWy45QLG3a+yME1EEvuiJalt1TlnaidvWmYPGZ/i1Fw==","shasum":"b2298b1326be41db639148fe8647c7d2fc41ec32","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190910094029.tgz","fileCount":74,"unpackedSize":291303,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd3BJCRA9TVsSAnZWagAAodsP/jiRzzW2b2vABSv1V2H+\noATbzP5a1QZpCxwswHvEV+AeVx+T56Inff4OxsEY/Qfkye7nciFt8ICLfNAi\n8uFRiv3LousxeSLNlf6cgJWaHKATfIQ6TRKCijBT2cNQzafz5XSer7xOXc2y\nDXunEc2BHrzY3BZCV7z98pq4MMJaeTgQVq/ud1jZqRo0oACRycHAACZ5Bod0\nWGYfUk3RediEcl1nQ3W0uD5Rg+vV1COm3uomZesZLY51JMVuyPNvFF+lv9bM\nCyYbgbvCuYIlsSUDzHFeF8iL+7pbok/w5kZiPp8AQDheX379pkiTR2h4VxEu\nXE1YAYCMJsMd9TmiW6+9SEijdf4B75NuC89llRNkiF4K5FMR3myt11PAnvpP\nB6bucYhZ/Gz/lCXI2U6ERJ7fLUodzJxZA2Kj0rY08VWB6z31cUhFjjNyDddy\nW635yYdLcaZDlPDdqSuNVO6SQYn0JYy8XGem5sQkp/YJjybSD0y6VN8GHFqZ\nUZzJsFO4wSx8nnkMKvwrHCuYAmsJRIw+0PZNmqzwRAZPDEibiTH3Bcdv//TT\nJDqaw3qATqBuC0aLK+NmClW+1/bcw7Yu/sew43X7FO0bd3Ccq/YrHzLPlE28\nxl5pqRM9mmPT4tZ9OpeZpamwPpkd5WdF+EFGmeFKqNVyVUvSSNqEIy+LLNtN\nYaBC\r\n=2VH4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD7naMIxXFhRw+iylFxN9oH8yLN2wKNc2GgrZvyzeAapwIgAtvkJ5Mi/LbvnYCnI6DLQNfOG2DrT8iEbGV1HgeB5NI="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190910094029_1568108616583_0.5115315277783701"},"_hasShrinkwrap":false},"2.0.0-atomist.a260p86nh.typescript-version.master.20190915211732":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-atomist.a260p86nh.typescript-version.master.20190915211732","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprint":"^5.0.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprint":"5.0.0-master.20190910075000","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"^8.3.0","tslint":"^5.20.0","typedoc":"^0.15.0","typescript":"^3.6.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"88bfa261c66be5424372ac833e34312d06fc7846","_id":"@atomist/sdm-pack-analysis@2.0.0-atomist.a260p86nh.typescript-version.master.20190915211732","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-kholEcRCfqp53Q7JqTQbPqOmEXYaq82li/1uzaUMmebTeExEyzFbo5c5DHMrRaGToWM1CNhBK7Hql0sIxFZpDw==","shasum":"092dfb3d04679385cb445c6594217330f34ae392","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-atomist.a260p86nh.typescript-version.master.20190915211732.tgz","fileCount":74,"unpackedSize":291340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfqshCRA9TVsSAnZWagAAz5IQAIByCoKh0EURYJHe/nlD\n0cQXGCCYg+ntL/yMlNuIcXO5SsDNjuN/kPQxG9Istrc6jI7pHyu942PEeuUc\nlpLz6gPz9Vu7JYbCmQ0GdiWZpBM3nmPr98kQzcmMCF2fCXd17O99BR9wQL/V\nhiLH0QXdzdOA/T+r/VjXczZpNkVnMjvTuTi2hOcXgwBI0PxocI+tid5LTxaV\nP7WNXAhPLYR9FpkUB2GB3QAyYHDUkxKTR4KQx49K4d957tHpjdm8o91n44o4\n2fNJnFdlc5Gep0RO4/tQdY4GDbAj1J2p6/W2/q6UIX/WdwlmHk8NisVSyQT/\nslVbPv9sPNWG1JJRLr1PHfQfa+/8Ek9hjISn165j7FEwf/J6bj6h55I2X2Vw\ngTah+bIpP2pIyJrO5x8+fkMQ92ttQP3moXmWLWq8biNqSjQvptpqC28Q9//i\nZowwUbhrUcTk/NQ3RFaaENu3JgS3Uac7KHzZShQxMOsoc/N//ttuijE7Wehg\n/PbaABUd/osfb1WkRKG1AZYY5tMkrCY49XHi/UR35/ylK3S1ePs3YuPLSi3y\nBQ/RiOnsC3fHWjKyc6suX1LpgOxJ7TrFuWcqU1kibFaEPrMMCXmAYSwG8qrE\nWb2zr4F+lU+m2STqkzVzDGEegJBTi6bAvg5r2htZMPFTDFPtN4SiW7cNIUq/\nFcey\r\n=SSG1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmnc5aTlJcWFqXxcGlsz8Qzvjj1wzLeHfJzK/NhtY40wIgFwinbJtxLz26IHoa8w7++DiPF8LXIDzX/hp08vRX69I="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-atomist.a260p86nh.typescript-version.master.20190915211732_1568582433319_0.5010622872325499"},"_hasShrinkwrap":false},"2.0.0-master.20190916030253":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190916030253","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprint":"^5.0.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/sdm-pack-docker":"^2.0.2","@atomist/sdm-pack-fingerprint":"5.0.0-master.20190910075000","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"^8.3.0","tslint":"^5.20.0","typedoc":"^0.15.0","typescript":"^3.6.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"4c9259ce28eca34b4442083c7c530d509ffc1811","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190916030253","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-uQDg3HhPbgOtvyPM3Ouq5drCFprE0zG3T7j/LyGpy6fm47SgEARFWacQe2d24AR7oJvSUrKW+Im7eAzavblyZg==","shasum":"d9f77248b2550c6499c94caf6d0299713c760fb1","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190916030253.tgz","fileCount":74,"unpackedSize":291303,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdfvwdCRA9TVsSAnZWagAAuTYP/1DyrJMZpNd0u3/Z4mXi\ntZelJ60QE1QHevLaT2KIGq2C4OZyRMwJZUxxZsH2aS5Yvw7rpIIl286ih5Uw\nXGvIhV95c4MisXD+bisZ2wt6o8qiwvOOo7PjX7z7IDDTzHmScEaI+k6QzAwp\n2Gio68KMLYoQrcOImmFjRW3Y5KBJyOuMEEMvMhvxeNoP0CAZTc8O4dwqTJ0i\ntaS3elmGZlj+BP6uzw1+zNv5oaaES22gz7Lynh03qTMNr8GOhJORDOKIXqrw\n/akAaDNDNWZc1kwA6gSEKDiWFi8aPclMLq6k/t4iC//UbzhRWq2uoS2ljbWI\npMXvPMjKPW8T6jXGfTkH3WRXdnFg2FRSerYAIJhkgLisZFZg9PKq8uFwd60i\niMgrCU0XwGGwzaD+7hJLdmV7QILg/7fWSiqSQ9wbRiFZcRqQw2BoGhIItYmQ\nCEUq2lf+zI28um99sCaAonNwB6yxrR/xkAx3FGCMcj2xbL/xlQ9RPs5lAE87\nVxfTfPKZ71Dhbq9i0hAeBS77zZMGvwxAUEosR9PqtfoJmLXROdZfRD2+88Vf\nAwH8TUcrg5UVIS9XI+q+tIZi0vHJyf1vDd18f7TCQKTvQk/uq0xA1yzSk41u\neAhZ+p29BK7ZjKVnOYIGpo9+JaIeeJ0J9+zS244x1uD+kQIFLouLN2Z4+qrJ\n+Nxq\r\n=xGUp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBbgAzaCd1wFOUO4niVUVNtkUbMn7yDjI3UQUFHIA7q7AiEA0TFQcvpT5QFhxcyPuQ8bdTdClKJ0U+3brJs9aw05D2Q="}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190916030253_1568603164623_0.10201227595608264"},"_hasShrinkwrap":false},"2.0.0-master.20190924210620":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20190924210620","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprint":"^5.0.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"1.8.0-master.20190924042635","@atomist/sdm":"1.8.0-master.20190924042736","@atomist/sdm-core":"1.8.0-master.20190924042954","@atomist/sdm-pack-docker":"2.0.3-master.20190916023924","@atomist/sdm-pack-fingerprint":"5.0.1-master.20190919164505","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"^8.3.0","tslint":"^5.20.0","typedoc":"^0.15.0","typescript":"^3.6.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#support`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"da726023f2c5a71026b4ba79f414d67adf22d54a","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20190924210620","_nodeVersion":"12.8.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-dJScNhXEctzx8OVLLZR9MpR5HrY7Adp/lpnJ8N8Zj9yj0Z4PGL8IHclf3dq3BG6Cn/glSl8rRVGb5gukK4MYlw==","shasum":"c1b6793fb0a185feaf6abeea4d710f023707bb52","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20190924210620.tgz","fileCount":118,"unpackedSize":404205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdioWXCRA9TVsSAnZWagAAmY0P/iQBYq0EanZdnbyVF7Yg\nawGa/+MOvsQMZyg5+JhbENICnktAFxDNC38jbCXwwT4t2mVAzGVdtdFr7VCY\nHKws4dmj8+4IXPn7mD7Sfa3GoJFJQwWormwAuup76NphktcEYRC4Fcoz8cLO\nDXd5gphQ3JVbGH14OMBEyNVOz+xgmnzrL6JomSGKALpYL9KTOV8pMEmnwCkU\nWqG35WWSgKdts0P3QQDC3XrqrS21VS4f/PDJi/XMC1cdUZnNY6wTejvn1ZiZ\nV5pdY+uby4bf2YvPqyQD8n2tlD8zIrsCMOUWFTU1xoEFy8KQz+taVgPhsNu0\ncaQJEwnM2SEMQXgQlWxEd47wNRozIBxLaneNSGXVVF9lJBSZpZD53Wcx1uc3\n2m4hl9qP5Ql97yHfLS2KcusthK1MrflFSpzZxAQRH17ve7+HQ1e9XJhffo1y\nSOD4qgwCKvBJdpNElvBTePbzRrHPPUXI6F1YA6QiUyVxJNmvZduHTPhzE86Y\nPAtFxPs9nJaWFu1rSvNfVmCvYn5+9DKH4tzpyUv/uuduXDLBoD05pyy+M5vL\nvsXToPrCl+VMKqQV7eBN3FFuGCeundN6QkM3Y5Y9GEP1lfa13RgdmDIs4l3f\nHfSwsCUEIpPLqUWq/9q8fVC+1zFDKCGiVIwnkxb1gQZU0BxjPT27dUwSFz3j\n9etj\r\n=1AhW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDvMR2SlleVOMO1FFXsK7/0Wvmaj9eLMjazdG++Q476eAIhAL9vv83G/cTytvLASSM8CYCR7+EqGx7HFAG0PBZ0nyTI"}]},"maintainers":[{"name":"atomist","email":"npm@atomist.com"}],"_npmUser":{"name":"atomist","email":"npm@atomist.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20190924210620_1569359254742_0.04830652598015894"},"_hasShrinkwrap":false},"2.0.0-master.20210108051840":{"name":"@atomist/sdm-pack-analysis","version":"2.0.0-master.20210108051840","description":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"license":"Apache-2.0","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"keywords":["atomist","automation","pack","sdm","seed"],"main":"./index.js","types":"./index.d.ts","dependencies":{"@atomist/microgrammar":"^1.2.0","@types/git-url-parse":"^9.0.0","@types/yamljs":"^0.2.30","fs-extra":"^8.1.0","git-url-parse":"^11.1.2","lodash":"^4.17.14","ts-essentials":"^3.0.0","yamljs":"^0.3.0"},"peerDependencies":{"@atomist/automation-client":"^1.7.0","@atomist/sdm-pack-docker":">=2.0.2","@atomist/sdm-pack-fingerprint":"^5.0.0","@atomist/sdm":"^1.7.0","@atomist/sdm-core":"^1.7.0","@atomist/slack-messages":">=1.1.1"},"devDependencies":{"@atomist/automation-client":"1.8.0-master.20190924042635","@atomist/sdm":"1.8.0-master.20190924042736","@atomist/sdm-core":"1.8.0-master.20190924042954","@atomist/sdm-pack-docker":"2.0.3-master.20190916023924","@atomist/sdm-pack-fingerprint":"5.0.1-master.20190919164505","@atomist/slack-messages":"^1.1.1","@types/mocha":"^5.2.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","rimraf":"^2.6.3","supervisor":"^0.12.0","ts-node":"^8.3.0","tslint":"^5.20.0","typedoc":"^0.15.0","typescript":"^3.6.3"},"directories":{"test":"test"},"scripts":{"autotest":"supervisor --watch index.ts,lib,test --extensions ts --no-restart-on exit --quiet --exec npm -- test","build":"run-s compile test lint doc","clean":"run-p clean:compile clean:test clean:doc clean:run","clean:compile":"rimraf git-info.json \"index.{d.ts,js{,.map}}\" \"{lib,test}/**/*.{d.ts,js{,.map}}\" lib/typings/types.ts","clean:dist":"run-s clean clean:npm","clean:doc":"rimraf doc","clean:npm":"rimraf node_modules","clean:run":"rimraf *-v8.log profile.txt log","clean:test":"rimraf .nyc_output coverage","compile":"run-s gql:gen compile:ts","compile:ts":"tsc --project .","doc":"typedoc --mode modules --excludeExternals --ignoreCompilerErrors --exclude \"**/*.d.ts\" --out doc index.ts lib","gql:gen":"atm-gql-gen","lint":"tslint --config tslint.json --format verbose --project .","lint:fix":"npm run lint -- --fix","test":"mocha --require espower-typescript/guess \"test/**/*.test.ts\"","test:one":"mocha --require espower-typescript/guess \"test/**/${TEST:-*.test.ts}\"","typedoc":"npm run doc"},"engines":{"node":">=8.1.0","npm":">=5.0.0"},"readme":"# @atomist/sdm-pack-analysis\n\n[![atomist sdm goals](https://badge.atomist.com/T29E48P34/atomist/sdm-pack-analysis/861fefe5-af44-4445-b1b7-7f364712e386)](https://app.atomist.com/workspace/T29E48P34)\n[![npm version](https://img.shields.io/npm/v/@atomist/sdm-pack-analysis.svg)](https://www.npmjs.com/package/@atomist/sdm-pack-anaylsis)\n\nThis project defines two stages of project analysis, which can be used to\ndrive delivery decisions and to classify projects.\n\nThe two stages are:\n\n- _Project Analysis_: First phase. Takes the project source code and\nbuilds an analysis that may be persisted. The most important part of\na `ProjectAnalysis` is the `elements` property, whose value is an indexed type which values\nof type `TechnologyElement`. Because a `ProjectAnalysis` is designed to be\nserialized and persisted it contains only data, and no functions.\n- _Interpretation_: Second phase. Requires a `ProjectAnalysis` but not source\ncode, so can be run on persisted analyses. An `Interpretation` is computed\nwhen necessary and not serialized to JSON, so it can specify functions and\ndelivery goals.\n\nAnalysis and interpretation is designed to be extensible. Additional \"scanners\"\nand \"interpreters\" can be added wtihout affecting existing capabilities.\n\nTwo additional concepts are principally relevant to offline use, to classify projects\nand provide a basis for project querying:\n\n- _Seed analysis_: The ability to use multiple `TransformRecipeContributor` implementations\nto contribute parameters and transforms that can enable any project to\nbe used as a seed. This \"contribution\" model ensures that we avoid the Cartesian product\nproblem with seeds: E.g. if we care about AWS Lambda and Kubernetes, Node and Spring,\nwe don't need 4 distinct generators (Lambda/Node, Lambda/Spring, Kube/Node and Kube/Spring),\nbut can use one \"universal\" generator that applies whichever contributions are\nrelevant to the current seed.\n- _Project scoring_: The ability to attach scores to an interpretation for\nvarious dimensions of a project, and to calculate a weighted composite score\nbased on individual scores.\n\nSeed analysis is only performed when a project analysis is performed with the `full` option flag\nset to true. Scanner registrations that return technology elements can also specify\nwhether or not they should fire depending on the invocation options. This is important\nfor scanners that are expensive, such as calculation of the number of lines of code\nin a repository, which requires reading every file. Typically, such analyses\nare performed only infrequently, and persisted for future use.\n\n## Getting started\n\nSee the [Developer Quick Start][atomist-quick] to jump straight to\ncreating an SDM.\n\n[atomist-quick]: https://docs.atomist.com/quick-start/ (Atomist - Developer Quick Start)\n\n## Contributing\n\nContributions to this project from community members are encouraged\nand appreciated. Please review the [Contributing\nGuidelines](CONTRIBUTING.md) for more information. Also see the\n[Development](#development) section in this document.\n\n## Code of conduct\n\nThis project is governed by the [Code of\nConduct](CODE_OF_CONDUCT.md). You are expected to act in accordance\nwith this code by participating. Please report any unacceptable\nbehavior to code-of-conduct@atomist.com.\n\n## Documentation\n\nPlease see [docs.atomist.com][atomist-doc] for\n[developer][atomist-doc-sdm] documentation.\n\n[atomist-doc-sdm]: https://docs.atomist.com/developer/sdm/ (Atomist Documentation - SDM Developer)\n\n## Connect\n\nFollow [@atomist][atomist-twitter] and [The Composition][atomist-blog]\nblog related to SDM.\n\n[atomist-twitter]: https://twitter.com/atomist (Atomist on Twitter)\n[atomist-blog]: https://the-composition.com/ (The Composition - The Official Atomist Blog)\n\n## Support\n\nGeneral support questions should be discussed in the `#help`\nchannel in the [Atomist community Slack workspace][slack].\n\nIf you find a problem, please create an [issue][].\n\n[issue]: https://github.com/atomist-seeds/sdm-pack/issues\n\n## Development\n\nYou will need to install [Node.js][node] to build and test this\nproject.\n\n[node]: https://nodejs.org/ (Node.js)\n\n### Build and test\n\nInstall dependencies.\n\n```\n$ npm install\n```\n\nUse the `build` package script to compile, test, lint, and build the\ndocumentation.\n\n```\n$ npm run build\n```\n\n### Release\n\nReleases are handled via the [Atomist SDM][atomist-sdm].  Just press\nthe 'Approve' button in the Atomist dashboard or Slack.\n\n[atomist-sdm]: https://github.com/atomist/atomist-sdm (Atomist Software Delivery Machine)\n\n---\n\nCreated by [Atomist][atomist].\nNeed Help?  [Join our Slack workspace][slack].\n\n[atomist]: https://atomist.com/ (Atomist - How Teams Deliver Software)\n[slack]: https://join.atomist.com/ (Atomist Community Slack)\n","readmeFilename":"README.md","gitHead":"01a10c7ad0873f77d914ae03b90469f03c942749","_id":"@atomist/sdm-pack-analysis@2.0.0-master.20210108051840","_nodeVersion":"13.7.0","_npmVersion":"6.13.6","dist":{"integrity":"sha512-QM1oTiuKjE6S8PRrswakFkTXoWAxfV3nukxDVim3fYrPMoAx6TQLf/V5qTg9B2DzH/AzdDhrU0BPFFyUk9imNg==","shasum":"f34b33562b22e56c3a35940f5f31712b9c3a0aca","tarball":"https://registry.npmjs.org/@atomist/sdm-pack-analysis/-/sdm-pack-analysis-2.0.0-master.20210108051840.tgz","fileCount":118,"unpackedSize":404204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9+uKCRA9TVsSAnZWagAAYWYP/i8sMJJZk3tzaFj04jLe\nw034ulNgKGnsrD3caZE93d+leul2GBY36A7NaJ8XO0V0OjTztEiIjy2sMFBg\nubD1d/P5NwltpyJBSbIH2yFHGCfv+UH4f3Kja6wt0KsRA9F1jpEQXcypqToe\nzJTsDGxMGkEmVyZlfJVIup+KmzLUkrgZ8ZgzJp7viyZ1PTRA57gvR6v9TXie\nw/Tep2YM2Ho6dvI44ZvCW7GKN0buDm5/aIwYFP04K8E/K3zj633ie1QgOLVC\n3+Pbof4DWj0ChlF+J4fanfFFFndRbKYiFdVJwbFGqlR8d8BAU3JqlRbGN/Ze\njZyEhW7v8tuRiVnmKnHzJN49CRyP1Kbav+9Ua3+6eTxl5G8j1sDgqo0muAQd\nSKdPaTZEKRZCtVuImF5mgCze9VB6aA73wGYBOZcJUaNVoIcLm93+fbiW+7a3\nFKaqGKF8Q1/qjMGbQMTtlWiDv7GPDyxdTagT0ZlGn1OExX5to5LHmnujS1CJ\nuigwHaC8CuSAkL/cPr8vNjea+jK+7euxeQGu42IVVjBgwjglnHILUU9Xl4y8\nHUZghpljTbdW02fmvD4tPiOYT8awt/bbD9Tc9a1VLZ1Yn+ExNUto9FnIggUG\ns6SX1c2aMQ5bw5ey84ckJINUFsW0KEd2CaCn7IAGyCBN8z8t7aK1hl6PkaZz\nLVCS\r\n=deQe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA4wQVg5ox4GYu6bSNcSu833U8Aorcmv5NzGik19XhlgAiEAiXexsXavNAPFI4EzBR9EUxyV/SKAY2j6mcXhM4GQFJA="}]},"_npmUser":{"name":"atomist-bot","email":"npm@atomist.com"},"maintainers":[{"name":"atomist-bot","email":"npm@atomist.com"},{"name":"ddatomist","email":"david@atomist.com"},{"name":"cdupuis","email":"cd@atomist.com"},{"name":"slimslenderslacks","email":"slimslenderslacks@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdm-pack-analysis_2.0.0-master.20210108051840_1610083210515_0.7211907456489806"},"_hasShrinkwrap":false}},"time":{"created":"2019-01-30T02:02:31.307Z","0.1.0-master.20190130020059":"2019-01-30T02:02:31.816Z","modified":"2023-02-23T17:59:27.446Z","0.1.0-master.20190130215550":"2019-01-30T21:57:37.802Z","0.1.0-master.20190130235752":"2019-01-31T00:00:06.823Z","0.1.0-master.20190131024130":"2019-01-31T02:43:22.742Z","0.1.0-master.20190131030116":"2019-01-31T03:02:50.281Z","0.1.0-master.20190131041240":"2019-01-31T04:14:36.643Z","0.1.0-master.20190131213928":"2019-01-31T21:41:06.686Z","0.1.0-master.20190201182348":"2019-02-01T18:25:31.606Z","0.1.0-master.20190201201636":"2019-02-01T20:18:07.130Z","0.1.0-master.20190201204938":"2019-02-01T20:51:32.590Z","0.1.0-master.20190201205939":"2019-02-01T21:01:38.579Z","0.1.0-master.20190201211749":"2019-02-01T21:19:18.137Z","0.1.0-master.20190201232558":"2019-02-01T23:27:41.978Z","0.1.0-master.20190204181500":"2019-02-04T18:16:30.732Z","0.1.0-master.20190204233823":"2019-02-04T23:39:59.336Z","0.1.0-master.20190205011008":"2019-02-05T01:11:45.786Z","0.1.0-master.20190205094459":"2019-02-05T09:46:35.077Z","0.1.0-master.20190205100015":"2019-02-05T10:01:48.683Z","0.1.0-master.20190205100640":"2019-02-05T10:08:09.319Z","0.1.0-master.20190205123237":"2019-02-05T12:34:11.346Z","0.1.0-master.20190205190621":"2019-02-05T19:08:21.583Z","0.1.0-master.20190206085551":"2019-02-06T08:57:32.140Z","0.1.0-master.20190207014324":"2019-02-07T01:45:07.712Z","0.1.0-master.20190207084127":"2019-02-07T08:43:08.322Z","0.1.0-master.20190207084511":"2019-02-07T08:46:53.932Z","0.1.0-master.20190207190714":"2019-02-07T19:09:49.213Z","0.1.0-master.20190207200733":"2019-02-07T20:09:46.447Z","0.1.0-master.20190207224912":"2019-02-07T22:51:08.446Z","0.1.0-master.20190207230901":"2019-02-07T23:11:30.176Z","0.1.0-master.20190208085239":"2019-02-08T08:57:03.980Z","0.1.0-master.20190208102333":"2019-02-08T10:25:25.112Z","0.1.0-master.20190212070704":"2019-02-12T07:08:54.051Z","0.1.0-master.20190212075004":"2019-02-12T07:53:17.965Z","0.1.0-master.20190213021934":"2019-02-13T02:21:34.449Z","0.1.0-master.20190213031218":"2019-02-13T03:14:09.179Z","0.1.0-master.20190213034037":"2019-02-13T03:42:37.252Z","0.1.0-master.20190213071419":"2019-02-13T07:15:56.877Z","0.1.0-master.20190228033035":"2019-02-28T03:32:48.157Z","0.1.0-master.20190303102547":"2019-03-03T10:28:30.121Z","0.1.0-master.20190303112340":"2019-03-03T11:26:17.564Z","0.1.0-master.20190307072613":"2019-03-07T07:28:15.281Z","0.1.0-phase-listener.20190307074932":"2019-03-07T07:51:34.858Z","0.1.0-master.20190308084751":"2019-03-08T08:49:57.591Z","0.1.0-atomist-update-latest-20190320191205.20190320191334":"2019-03-20T19:15:14.467Z","0.1.0-master.20190320191842":"2019-03-20T19:20:40.837Z","0.1.0-master.20190320195035":"2019-03-20T19:52:23.430Z","0.1.0":"2019-03-20T20:00:49.041Z","0.1.1-foreach-test.20190329091516":"2019-03-29T09:17:50.937Z","0.1.1-foreach-test.20190329092349":"2019-03-29T09:25:26.412Z","0.1.1-master.20190329223911":"2019-03-29T22:41:05.225Z","1.0.0-master.20190330063812":"2019-03-30T06:39:59.639Z","1.0.0":"2019-03-30T06:41:32.994Z","1.0.1-master.20190402092909":"2019-04-02T09:30:32.829Z","1.0.1-master.20190403062532":"2019-04-03T06:26:43.327Z","1.0.1-master.20190403064342":"2019-04-03T06:45:07.827Z","1.0.1-master.20190403065626":"2019-04-03T06:57:45.946Z","1.0.1-message-phase.20190410052935":"2019-04-10T05:31:01.599Z","1.0.1-message-phase.20190410084206":"2019-04-10T08:43:16.670Z","1.0.1-message-phase.20190410091303":"2019-04-10T09:14:30.853Z","1.0.1-message-phase.20190410094737":"2019-04-10T09:48:50.510Z","1.0.1-master.20190410102548":"2019-04-10T10:26:56.246Z","1.1.0-master.20190410103215":"2019-04-10T10:33:41.472Z","1.1.0-classifying-scanner.20190411042120":"2019-04-11T04:23:16.457Z","1.1.0-classifying-scanner.20190411054052":"2019-04-11T05:43:03.378Z","1.1.0-classifying-scanner.20190411062449":"2019-04-11T06:26:04.080Z","1.1.0-master.20190411064556":"2019-04-11T06:47:07.669Z","1.1.0-classifying-scanner.20190411075107":"2019-04-11T07:53:01.846Z","1.1.0-master.20190411080306":"2019-04-11T08:05:16.247Z","1.1.0-classifying-scanner.20190411090207":"2019-04-11T09:03:45.643Z","1.1.0-master.20190411122944":"2019-04-11T12:31:27.854Z","1.1.0-master.20190411125037":"2019-04-11T12:52:02.857Z","1.1.0-master.20190411145147":"2019-04-11T14:53:21.547Z","1.1.0-classifying-scanner.20190411162303":"2019-04-11T16:24:29.326Z","1.1.0-master.20190411162648":"2019-04-11T16:28:16.877Z","1.1.0-master.20190413093252":"2019-04-13T09:34:11.927Z","1.1.0-master.20190413125937":"2019-04-13T13:01:00.889Z","1.1.0-master.20190414063123":"2019-04-14T06:32:46.299Z","1.1.0-master.20190414064804":"2019-04-14T06:49:27.405Z","1.1.0-master.20190414162203":"2019-04-14T16:23:19.379Z","1.1.0-master.20190414162530":"2019-04-14T16:26:48.673Z","1.1.0-master.20190414214804":"2019-04-14T21:49:22.801Z","1.1.0-master.20190415205523":"2019-04-15T20:57:04.329Z","1.1.0-master.20190415211240":"2019-04-15T21:13:59.343Z","1.1.0-master.20190415211518":"2019-04-15T21:16:32.501Z","1.1.0-master.20190415212229":"2019-04-15T21:23:49.146Z","1.1.0-master.20190415212943":"2019-04-15T21:31:02.080Z","1.1.0-master.20190415215228":"2019-04-15T21:53:46.549Z","1.1.0-deep2.20190416043139":"2019-04-16T04:32:58.354Z","0.1.0-add-tags-to-analysis.20190417103400":"2019-04-17T10:35:21.047Z","1.1.0-extend-condition.20190417114055":"2019-04-17T11:42:12.005Z","1.1.0-extend-condition.20190417125413":"2019-04-17T12:55:39.128Z","1.1.0-master.20190417222916":"2019-04-17T22:30:29.664Z","1.1.0-deep2.20190423090921":"2019-04-23T09:10:45.859Z","1.1.0-master.20190423091307":"2019-04-23T09:14:30.891Z","1.1.0-with-goals.20190423093531":"2019-04-23T09:36:48.885Z","1.1.0-with-goals.20190423211420":"2019-04-23T21:15:39.417Z","1.1.0-master.20190423211706":"2019-04-23T21:18:27.842Z","1.1.0-master.20190423224213":"2019-04-23T22:43:25.650Z","1.1.0-fingerprint.20190425022304":"2019-04-25T02:24:20.725Z","1.1.0-master.20190425061642":"2019-04-25T06:18:27.223Z","1.1.0-master.20190427103318":"2019-04-27T10:35:34.824Z","1.1.0-master.20190427195419":"2019-04-27T19:55:58.637Z","1.1.0-master.20190427201431":"2019-04-27T20:15:40.576Z","1.1.0-master.20190429060345":"2019-04-29T06:06:08.679Z","1.1.0-master.20190511094352":"2019-05-11T09:45:21.449Z","1.1.0-converge.20190516232710":"2019-05-16T23:29:10.281Z","1.1.0-converge.20190516235627":"2019-05-16T23:57:52.957Z","1.1.0-converge.20190517000304":"2019-05-17T00:08:04.846Z","1.1.0-converge.20190517015006":"2019-05-17T01:51:56.713Z","1.1.0-converge.20190517024239":"2019-05-17T02:43:57.990Z","1.1.0-converge.20190517164926":"2019-05-17T16:50:55.070Z","1.1.0-converge.20190517203306":"2019-05-17T20:34:33.032Z","1.1.0-converge.20190517204209":"2019-05-17T20:43:37.724Z","1.1.0-converge.20190517214636":"2019-05-17T21:48:05.533Z","1.1.0-converge.20190517232022":"2019-05-17T23:22:27.871Z","1.1.0-converge.20190517233212":"2019-05-17T23:33:44.085Z","1.1.0-converge.20190518010211":"2019-05-18T01:03:38.384Z","1.1.0-converge.20190518012201":"2019-05-18T01:23:29.486Z","1.1.0-converge.20190518170814":"2019-05-18T17:09:45.902Z","1.1.0-converge2.20190518192709":"2019-05-18T19:28:29.882Z","1.1.0-converge2.20190518204543":"2019-05-18T20:47:10.900Z","1.1.0-converge2.20190518211106":"2019-05-18T21:12:36.969Z","1.1.0-converge2.20190518213249":"2019-05-18T21:34:21.673Z","1.1.0-ideals-change-the-world.20190519212252":"2019-05-19T21:24:04.195Z","1.1.0-ideals-change-the-world.20190519215236":"2019-05-19T21:54:13.070Z","1.1.0-ideals-change-the-world.20190519215622":"2019-05-19T21:57:55.592Z","1.1.0-ideals-change-the-world.20190519220841":"2019-05-19T22:10:15.179Z","1.1.0-ideals-change-the-world.20190520213913":"2019-05-20T21:40:25.232Z","1.1.0-ideals-change-the-world.20190523231208":"2019-05-23T23:13:29.852Z","1.1.0-master.20190526073726":"2019-05-26T07:38:44.109Z","1.1.0-master.20190526073852":"2019-05-26T07:40:04.178Z","1.1.0-upgrade-fp.20190609074813":"2019-06-09T07:49:28.657Z","1.1.0-upgrade-fp.20190609092539":"2019-06-09T09:26:58.759Z","1.1.0-test-any.20190610023131":"2019-06-10T02:32:48.143Z","1.1.0-fpupgrade.20190610061025":"2019-06-10T06:11:39.701Z","1.1.0-fpupgrade.20190610070018":"2019-06-10T07:01:29.025Z","1.1.0-fpupgrade.20190610071538":"2019-06-10T07:16:58.782Z","1.1.0-fpupgrade.20190610231526":"2019-06-10T23:18:03.450Z","1.1.0-master.20190610233255":"2019-06-10T23:34:38.120Z","1.1.0-master.20190621012001":"2019-06-21T01:21:16.519Z","1.1.0-master.20190625171621":"2019-06-25T17:18:21.971Z","1.1.0-master.20190625172707":"2019-06-25T17:28:27.348Z","1.1.0-master.20190625175337":"2019-06-25T17:54:59.248Z","1.1.0-master.20190701185534":"2019-07-01T18:56:51.398Z","1.1.0-atomist-update-latest-20190709163925.20190709193758":"2019-07-09T19:40:55.697Z","1.1.0-atomist-update-latest-20190709163925.20190709195709":"2019-07-09T19:59:05.076Z","1.1.0-master.20190709200205":"2019-07-09T20:03:25.283Z","1.1.0":"2019-07-09T21:46:09.835Z","1.1.1-master.20190709233449":"2019-07-09T23:36:52.448Z","1.1.1-master.20190710062416":"2019-07-10T06:26:20.589Z","1.1.1":"2019-07-10T06:27:11.322Z","1.1.2-master.20190710064015":"2019-07-10T06:41:50.889Z","1.1.2":"2019-07-10T06:43:47.446Z","1.1.3-master.20190717100948":"2019-07-17T10:12:07.863Z","2.0.0-master.20190717103823":"2019-07-17T10:41:30.778Z","2.0.0-master.20190719000543":"2019-07-19T00:08:03.423Z","2.0.0-master.20190719000956":"2019-07-19T00:13:16.684Z","2.0.0-master.20190809083541":"2019-08-09T08:38:46.939Z","2.0.0-master.20190809101008":"2019-08-09T10:12:56.924Z","2.0.0-master.20190810010951":"2019-08-10T01:14:19.305Z","2.0.0-master.20190810012404":"2019-08-10T01:28:01.089Z","2.0.0-master.20190820223220":"2019-08-20T22:35:58.028Z","2.0.0-atomist.a260p86nh.sdm-deps.master.20190910092415":"2019-09-10T09:28:40.972Z","2.0.0-master.20190910094029":"2019-09-10T09:43:36.764Z","2.0.0-atomist.a260p86nh.typescript-version.master.20190915211732":"2019-09-15T21:20:33.457Z","2.0.0-master.20190916030253":"2019-09-16T03:06:04.809Z","2.0.0-master.20190924210620":"2019-09-24T21:07:34.938Z","2.0.0-master.20210108051840":"2021-01-08T05:20:10.634Z"},"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":"Extension pack for an Atomist SDM to analyze projects and extract technology stacks","homepage":"https://github.com/atomist/sdm-pack-analysis#readme","keywords":["atomist","automation","pack","sdm","seed"],"repository":{"type":"git","url":"git+https://github.com/atomist/sdm-pack-analysis.git"},"author":{"name":"Atomist","email":"support@atomist.com","url":"https://atomist.com/"},"bugs":{"url":"https://github.com/atomist/sdm-pack-analysis/issues"},"license":"Apache-2.0","readme":"","readmeFilename":""}