Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tool list command added json flag to output packages in json format #11165

Merged
merged 7 commits into from
Oct 31, 2020

Conversation

jankapunkt
Copy link
Contributor

Implements feature request #406 by allowing to type a --json option and let the tree output be in JSON format. The entries consist of the package name as key and either String value (version number + top-level or expanded-above) or an Object with the following properties:

- version (String) - always
- local (Boolean) - only if true when package is built from source
- weak (Boolean) - only if true
- newerVersion (String) - only if exists
- dependencies (Object) - only if > 0 and not all weak

In order to also support a more detailed output, there is a --details option. If it's active, the following properties are added, too:

- earliestCompatibleVersion (String) - always
- debugOnly (Boolean) - only if true
- prodOnly (Boolean) - only if true
- testOnly (Boolean) - only if true
- containsPlugins (Boolean) - only if true
- lastUpdated (Date-String) - always
- published (Date-String) - always

How it works / reproduction

  • Create an empty project with the dev tool
  • cd into the project
  • add path/to/meteor add meteortesting:mocha to simulate an external dependency
  • enter path/to/meteor list --json

It should output the following JSON:

{"autopublish":{"version":"1.0.7","local":true},"blaze-html-templates":{"version":"1.1.2","local":true,"dependencies":{"blaze":{"version":"2.3.4","local":true,"dependencies":{"check":{"version":"1.3.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":{"version":"1.1.1","local":true,"dependencies":{"base64":{"version":"1.0.12","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"ecmascript":"0.14.3-(top-level)"}}}},"ecmascript":"0.14.3-(top-level)","htmljs":{"version":"1.0.11","local":true,"dependencies":{"tracker":"1.2.0-(top-level)"}},"observe-sequence":{"version":"1.0.16","local":true,"dependencies":{"diff-sequence":{"version":"1.1.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)"}},"mongo-id":{"version":"1.0.7","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","id-map":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)"}},"random":{"version":"1.2.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}}}},"random":"1.2.0-(expanded-above)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"ordered-dict":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"reactive-var":"1.0.11-(top-level)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"spacebars":{"version":"1.0.15","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)","htmljs":"1.0.11-(expanded-above)","observe-sequence":"1.0.16-(expanded-above)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"templating":{"version":"1.3.2","local":true,"dependencies":{"templating-compiler":{"version":"1.3.3","local":true,"dependencies":{"caching-html-compiler":{"version":"1.1.3","local":true,"dependencies":{"caching-compiler":{"version":"1.2.2","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","random":"1.2.0-(expanded-above)"}},"ecmascript":"0.14.3-(top-level)","templating-tools":{"version":"1.1.2","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","spacebars-compiler":{"version":"1.1.3","local":true,"dependencies":{"blaze-tools":{"version":"1.0.10","local":true,"dependencies":{"htmljs":"1.0.11-(expanded-above)","underscore":{"version":"1.0.10","local":true}}},"html-tools":{"version":"1.0.11","local":true,"dependencies":{"htmljs":"1.0.11-(expanded-above)"}},"htmljs":"1.0.11-(expanded-above)","underscore":{"version":"1.0.10","local":true}}},"underscore":{"version":"1.0.10","local":true}}},"underscore":{"version":"1.0.10","local":true}}},"ecmascript":"0.14.3-(top-level)","templating-tools":"1.1.2-(expanded-above)"}},"templating-runtime":{"version":"1.3.2","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)","spacebars":"1.0.15-(expanded-above)","templating-compiler":"1.3.3-(expanded-above)","underscore":{"version":"1.0.10","local":true}}}}},"ui":{"version":"1.0.13","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)"}}}},"ecmascript":{"version":"0.14.3","local":true,"dependencies":{"babel-compiler":{"version":"7.5.3","local":true,"dependencies":{"ecmascript-runtime":{"version":"0.7.0","local":true,"dependencies":{"ecmascript-runtime-client":{"version":"0.11.0","local":true,"dependencies":{"modern-browsers":{"version":"0.1.5","local":true,"dependencies":{"modules":{"version":"0.15.0","local":true,"dependencies":{"modules-runtime":{"version":"0.12.0","local":true}}}}},"modules":"0.15.0-(expanded-above)","promise":{"version":"0.11.2","local":true,"dependencies":{"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)"}}}},"ecmascript-runtime-server":{"version":"0.10.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}}}},"modern-browsers":"0.1.5-(expanded-above)"}},"babel-runtime":{"version":"1.5.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"dynamic-import":{"version":"0.5.2","local":true,"dependencies":{"fetch":{"version":"0.1.1","local":true,"dependencies":{"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"inter-process-messaging":{"version":"0.1.1","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"ecmascript-runtime":"0.7.0-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"es5-shim":{"version":"4.8.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"insecure":{"version":"1.0.7","local":true},"jquery":{"version":"3.0.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"meteor-base":{"version":"1.4.0","local":true,"dependencies":{"ddp":{"version":"1.4.0","local":true,"dependencies":{"ddp-client":{"version":"2.3.3","local":true,"dependencies":{"callback-hook":{"version":"1.3.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"check":"1.3.1-(expanded-above)","ddp-common":{"version":"1.4.0","local":true,"dependencies":{"check":"1.3.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","random":"1.2.0-(expanded-above)","retry":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","random":"1.2.0-(expanded-above)"}},"tracker":"1.2.0-(top-level)"}},"diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","id-map":"1.1.0-(expanded-above)","mongo-id":"1.0.7-(expanded-above)","random":"1.2.0-(expanded-above)","reload":{"version":"1.3.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"retry":"1.1.0-(expanded-above)","socket-stream-client":{"version":"0.3.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","modern-browsers":"0.1.5-(expanded-above)","retry":"1.1.0-(expanded-above)"}},"tracker":"1.2.0-(top-level)"}},"ddp-server":{"version":"2.3.2","local":true,"dependencies":{"callback-hook":"1.3.0-(expanded-above)","check":"1.3.1-(expanded-above)","ddp-client":"2.3.3-(expanded-above)","ddp-common":"1.4.0-(expanded-above)","diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","mongo-id":"1.0.7-(expanded-above)","random":"1.2.0-(expanded-above)","retry":"1.1.0-(expanded-above)","routepolicy":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","underscore":{"version":"1.0.10","local":true},"webapp":{"version":"1.9.1","local":true,"dependencies":{"boilerplate-generator":{"version":"1.7.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","underscore":{"version":"1.0.10","local":true}}},"ecmascript":"0.14.3-(top-level)","inter-process-messaging":"0.1.1-(expanded-above)","logging":{"version":"1.1.20","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ecmascript-runtime-client":"0.11.0-(expanded-above)","ejson":"1.1.1-(expanded-above)"}},"modern-browsers":"0.1.5-(expanded-above)","routepolicy":"1.1.0-(expanded-above)","underscore":{"version":"1.0.10","local":true},"webapp-hashing":{"version":"1.0.9","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","underscore":{"version":"1.0.10","local":true}}}}}}},"underscore":{"version":"1.0.10","local":true},"webapp":"1.9.1-(expanded-above)"}}}},"es5-shim":"4.8.0-(top-level)","hot-code-push":{"version":"1.0.4","local":true,"dependencies":{"autoupdate":{"version":"1.6.0","local":true,"dependencies":{"check":"1.3.1-(expanded-above)","ddp":"1.4.0-(expanded-above)","ecmascript":"0.14.3-(top-level)","inter-process-messaging":"0.1.1-(expanded-above)","retry":"1.1.0-(expanded-above)","tracker":"1.2.0-(top-level)","webapp":"1.9.1-(expanded-above)"}},"reload":"1.3.0-(expanded-above)"}},"livedata":{"version":"1.0.18","local":true,"dependencies":{"ddp":"1.4.0-(expanded-above)"}},"webapp":"1.9.1-(expanded-above)"}},"meteortesting:mocha":{"version":"2.0.1","dependencies":{"ecmascript":"0.14.3-(top-level)","http":{"version":"1.4.2","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)","url":{"version":"1.3.1","local":true,"dependencies":{"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)"}}}},"meteortesting:browser-tests":{"version":"1.3.4","dependencies":{"ecmascript":"0.14.3-(top-level)"}},"meteortesting:mocha-core":{"version":"8.0.1","newerVersion":"8.1.2","dependencies":{"ecmascript":"0.14.3-(top-level)"}}}},"mobile-experience":{"version":"1.1.0","local":true,"dependencies":{"launch-screen":{"version":"1.2.0","local":true},"mobile-status-bar":{"version":"1.1.0","local":true}}},"mongo":{"version":"1.10.0","local":true,"dependencies":{"allow-deny":{"version":"1.1.0","local":true,"dependencies":{"check":"1.3.1-(expanded-above)","ddp":"1.4.0-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","minimongo":{"version":"1.6.0","local":true,"dependencies":{"diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","geojson-utils":{"version":"1.0.10","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"id-map":"1.1.0-(expanded-above)","mongo-decimal":{"version":"0.1.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)"}},"mongo-id":"1.0.7-(expanded-above)","ordered-dict":"1.1.0-(expanded-above)","random":"1.2.0-(expanded-above)","tracker":"1.2.0-(top-level)"}}}},"binary-heap":{"version":"1.0.11","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","id-map":"1.1.0-(expanded-above)"}},"callback-hook":"1.3.0-(expanded-above)","check":"1.3.1-(expanded-above)","ddp":"1.4.0-(expanded-above)","diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","minimongo":"1.6.0-(expanded-above)","mongo-decimal":"0.1.1-(expanded-above)","mongo-dev-server":{"version":"1.1.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"mongo-id":"1.0.7-(expanded-above)","npm-mongo":{"version":"3.8.0","local":true},"random":"1.2.0-(expanded-above)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"reactive-var":{"version":"1.0.11","local":true,"dependencies":{"tracker":"1.2.0-(top-level)"}},"shell-server":{"version":"0.5.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"standard-minifier-css":{"version":"1.6.0","local":true,"dependencies":{"minifier-css":{"version":"1.5.2","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}}}},"standard-minifier-js":{"version":"2.6.0","local":true,"dependencies":{"babel-compiler":"7.5.3-(expanded-above)","ecmascript":"0.14.3-(top-level)","minifier-js":{"version":"2.6.0","local":true,"dependencies":{"babel-compiler":"7.5.3-(expanded-above)"}}}},"tracker":{"version":"1.2.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"typescript":{"version":"3.7.6","local":true,"dependencies":{"babel-compiler":"7.5.3-(expanded-above)","babel-runtime":"1.5.0-(expanded-above)","dynamic-import":"0.5.2-(expanded-above)","ecmascript-runtime":"0.7.0-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}}}
  • enter path/to/meteor list --json --weak

It should output the following JSON:

{"autopublish":{"version":"1.0.7","local":true},"blaze-html-templates":{"version":"1.1.2","local":true,"dependencies":{"blaze":{"version":"2.3.4","local":true,"dependencies":{"check":{"version":"1.3.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":{"version":"1.1.1","local":true,"dependencies":{"base64":{"version":"1.0.12","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"ecmascript":"0.14.3-(top-level)"}}}},"ecmascript":"0.14.3-(top-level)","htmljs":{"version":"1.0.11","local":true,"dependencies":{"tracker":"1.2.0-(top-level)"}},"jquery":"3.0.0-(top-level)","observe-sequence":{"version":"1.0.16","local":true,"dependencies":{"diff-sequence":{"version":"1.1.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)"}},"mongo-id":{"version":"1.0.7","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","id-map":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)"}},"random":{"version":"1.2.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}}}},"random":"1.2.0-(expanded-above)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"ordered-dict":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"reactive-var":"1.0.11-(top-level)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"spacebars":{"version":"1.0.15","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)","htmljs":"1.0.11-(expanded-above)","observe-sequence":"1.0.16-(expanded-above)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"templating":{"version":"1.3.2","local":true,"dependencies":{"templating-compiler":{"version":"1.3.3","local":true,"dependencies":{"caching-html-compiler":{"version":"1.1.3","local":true,"dependencies":{"caching-compiler":{"version":"1.2.2","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","random":"1.2.0-(expanded-above)"}},"ecmascript":"0.14.3-(top-level)","templating-tools":{"version":"1.1.2","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","spacebars-compiler":{"version":"1.1.3","local":true,"dependencies":{"blaze-tools":{"version":"1.0.10","local":true,"dependencies":{"htmljs":"1.0.11-(expanded-above)","underscore":{"version":"1.0.10","local":true}}},"html-tools":{"version":"1.0.11","local":true,"dependencies":{"htmljs":"1.0.11-(expanded-above)"}},"htmljs":"1.0.11-(expanded-above)","underscore":{"version":"1.0.10","local":true}}},"underscore":{"version":"1.0.10","local":true}}},"underscore":{"version":"1.0.10","local":true}}},"ecmascript":"0.14.3-(top-level)","templating-tools":"1.1.2-(expanded-above)"}},"templating-runtime":{"version":"1.3.2","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)","spacebars":"1.0.15-(expanded-above)","templating-compiler":"1.3.3-(expanded-above)","underscore":{"version":"1.0.10","local":true}}}}},"ui":{"version":"1.0.13","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)"}}}},"ecmascript":{"version":"0.14.3","local":true,"dependencies":{"babel-compiler":{"version":"7.5.3","local":true,"dependencies":{"ecmascript-runtime":{"version":"0.7.0","local":true,"dependencies":{"ecmascript-runtime-client":{"version":"0.11.0","local":true,"dependencies":{"es5-shim":"4.8.0-(top-level)","modern-browsers":{"version":"0.1.5","local":true,"dependencies":{"modules":{"version":"0.15.0","local":true,"dependencies":{"modules-runtime":{"version":"0.12.0","local":true}}}}},"modules":"0.15.0-(expanded-above)","promise":{"version":"0.11.2","local":true,"dependencies":{"context":"[weak]-package-skipped","modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)"}}}},"ecmascript-runtime-server":{"version":"0.10.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}}}},"modern-browsers":"0.1.5-(expanded-above)"}},"babel-runtime":{"version":"1.5.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"dynamic-import":{"version":"0.5.2","local":true,"dependencies":{"fetch":{"version":"0.1.1","local":true,"dependencies":{"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"inter-process-messaging":{"version":"0.1.1","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"ecmascript-runtime":"0.7.0-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"es5-shim":{"version":"4.8.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"insecure":{"version":"1.0.7","local":true},"jquery":{"version":"3.0.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"meteor-base":{"version":"1.4.0","local":true,"dependencies":{"ddp":{"version":"1.4.0","local":true,"dependencies":{"ddp-client":{"version":"2.3.3","local":true,"dependencies":{"callback-hook":{"version":"1.3.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"check":"1.3.1-(expanded-above)","ddp-common":{"version":"1.4.0","local":true,"dependencies":{"check":"1.3.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","random":"1.2.0-(expanded-above)","retry":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","random":"1.2.0-(expanded-above)"}},"tracker":"1.2.0-(top-level)"}},"diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","id-map":"1.1.0-(expanded-above)","mongo-id":"1.0.7-(expanded-above)","random":"1.2.0-(expanded-above)","reload":{"version":"1.3.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"retry":"1.1.0-(expanded-above)","socket-stream-client":{"version":"0.3.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","modern-browsers":"0.1.5-(expanded-above)","retry":"1.1.0-(expanded-above)"}},"tracker":"1.2.0-(top-level)"}},"ddp-server":{"version":"2.3.2","local":true,"dependencies":{"audit-argument-checks":"[weak]-package-skipped","autopublish":{"version":"1.0.7","local":true,"weak":true},"callback-hook":"1.3.0-(expanded-above)","check":"1.3.1-(expanded-above)","ddp-client":"2.3.3-(expanded-above)","ddp-common":"1.4.0-(expanded-above)","ddp-rate-limiter":"[weak]-package-skipped","diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","facts-base":"[weak]-package-skipped","mongo-id":"1.0.7-(expanded-above)","random":"1.2.0-(expanded-above)","retry":"1.1.0-(expanded-above)","routepolicy":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","underscore":{"version":"1.0.10","local":true},"webapp":{"version":"1.9.1","local":true,"dependencies":{"boilerplate-generator":{"version":"1.7.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","underscore":{"version":"1.0.10","local":true}}},"ecmascript":"0.14.3-(top-level)","inter-process-messaging":"0.1.1-(expanded-above)","logging":{"version":"1.1.20","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ecmascript-runtime-client":"0.11.0-(expanded-above)","ejson":"1.1.1-(expanded-above)"}},"modern-browsers":"0.1.5-(expanded-above)","routepolicy":"1.1.0-(expanded-above)","underscore":{"version":"1.0.10","local":true},"webapp-hashing":{"version":"1.0.9","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","underscore":{"version":"1.0.10","local":true}}}}}}},"underscore":{"version":"1.0.10","local":true},"webapp":"1.9.1-(expanded-above)"}}}},"es5-shim":"4.8.0-(top-level)","hot-code-push":{"version":"1.0.4","local":true,"dependencies":{"autoupdate":{"version":"1.6.0","local":true,"dependencies":{"check":"1.3.1-(expanded-above)","ddp":"1.4.0-(expanded-above)","ecmascript":"0.14.3-(top-level)","inter-process-messaging":"0.1.1-(expanded-above)","reload":"1.3.0-(expanded-above)","retry":"1.1.0-(expanded-above)","tracker":"1.2.0-(top-level)","webapp":"1.9.1-(expanded-above)"}},"reload":"1.3.0-(expanded-above)"}},"livedata":{"version":"1.0.18","local":true,"dependencies":{"ddp":"1.4.0-(expanded-above)"}},"webapp":"1.9.1-(expanded-above)"}},"meteortesting:mocha":{"version":"2.0.1","dependencies":{"browser-policy":"[weak]-package-skipped","ecmascript":"0.14.3-(top-level)","http":{"version":"1.4.2","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)","url":{"version":"1.3.1","local":true,"dependencies":{"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)"}}}},"lmieulet:meteor-coverage":"[weak]-package-skipped","meteortesting:browser-tests":{"version":"1.3.4","dependencies":{"ecmascript":"0.14.3-(top-level)"}},"meteortesting:mocha-core":{"version":"8.0.1","newerVersion":"8.1.2","dependencies":{"ecmascript":"0.14.3-(top-level)"}}}},"mobile-experience":{"version":"1.1.0","local":true,"dependencies":{"launch-screen":{"version":"1.2.0","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)","templating":"1.3.2-(expanded-above)"}},"mobile-status-bar":{"version":"1.1.0","local":true}}},"mongo":{"version":"1.10.0","local":true,"dependencies":{"allow-deny":{"version":"1.1.0","local":true,"dependencies":{"check":"1.3.1-(expanded-above)","ddp":"1.4.0-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","minimongo":{"version":"1.6.0","local":true,"dependencies":{"diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","geojson-utils":{"version":"1.0.10","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"id-map":"1.1.0-(expanded-above)","mongo-decimal":{"version":"0.1.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)"}},"mongo-id":"1.0.7-(expanded-above)","ordered-dict":"1.1.0-(expanded-above)","random":"1.2.0-(expanded-above)","tracker":"1.2.0-(top-level)"}}}},"autopublish":{"version":"1.0.7","local":true,"weak":true},"binary-heap":{"version":"1.0.11","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","id-map":"1.1.0-(expanded-above)"}},"callback-hook":"1.3.0-(expanded-above)","check":"1.3.1-(expanded-above)","ddp":"1.4.0-(expanded-above)","diff-sequence":"1.1.1-(expanded-above)","disable-oplog":"[weak]-package-skipped","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","facts-base":"[weak]-package-skipped","insecure":{"version":"1.0.7","local":true,"weak":true},"minimongo":"1.6.0-(expanded-above)","mongo-decimal":"0.1.1-(expanded-above)","mongo-dev-server":{"version":"1.1.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"mongo-id":"1.0.7-(expanded-above)","npm-mongo":{"version":"3.8.0","local":true},"random":"1.2.0-(expanded-above)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true},"webapp":"1.9.1-(expanded-above)"}},"reactive-var":{"version":"1.0.11","local":true,"dependencies":{"tracker":"1.2.0-(top-level)"}},"shell-server":{"version":"0.5.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"standard-minifier-css":{"version":"1.6.0","local":true,"dependencies":{"minifier-css":{"version":"1.5.2","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}}}},"standard-minifier-js":{"version":"2.6.0","local":true,"dependencies":{"babel-compiler":"7.5.3-(expanded-above)","ecmascript":"0.14.3-(top-level)","minifier-js":{"version":"2.6.0","local":true,"dependencies":{"babel-compiler":"7.5.3-(expanded-above)"}}}},"tracker":{"version":"1.2.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"typescript":{"version":"3.7.6","local":true,"dependencies":{"babel-compiler":"7.5.3-(expanded-above)","babel-runtime":"1.5.0-(expanded-above)","dynamic-import":"0.5.2-(expanded-above)","ecmascript-runtime":"0.7.0-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}}}
  • enter path/to/meteor list --json --weak --details

It should output the following JSON:

{"autopublish":{"version":"1.0.7","local":true},"blaze-html-templates":{"version":"1.1.2","local":true,"dependencies":{"blaze":{"version":"2.3.4","local":true,"dependencies":{"check":{"version":"1.3.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":{"version":"1.1.1","local":true,"dependencies":{"base64":{"version":"1.0.12","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"ecmascript":"0.14.3-(top-level)"}}}},"ecmascript":"0.14.3-(top-level)","htmljs":{"version":"1.0.11","local":true,"dependencies":{"tracker":"1.2.0-(top-level)"}},"jquery":"3.0.0-(top-level)","observe-sequence":{"version":"1.0.16","local":true,"dependencies":{"diff-sequence":{"version":"1.1.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)"}},"mongo-id":{"version":"1.0.7","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","id-map":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)"}},"random":{"version":"1.2.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}}}},"random":"1.2.0-(expanded-above)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"ordered-dict":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"reactive-var":"1.0.11-(top-level)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"spacebars":{"version":"1.0.15","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)","htmljs":"1.0.11-(expanded-above)","observe-sequence":"1.0.16-(expanded-above)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true}}},"templating":{"version":"1.3.2","local":true,"dependencies":{"templating-compiler":{"version":"1.3.3","local":true,"containsPlugins":true,"dependencies":{"caching-html-compiler":{"version":"1.1.3","local":true,"dependencies":{"caching-compiler":{"version":"1.2.2","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","random":"1.2.0-(expanded-above)"}},"ecmascript":"0.14.3-(top-level)","templating-tools":{"version":"1.1.2","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","spacebars-compiler":{"version":"1.1.3","local":true,"dependencies":{"blaze-tools":{"version":"1.0.10","local":true,"dependencies":{"htmljs":"1.0.11-(expanded-above)","underscore":{"version":"1.0.10","local":true}}},"html-tools":{"version":"1.0.11","local":true,"dependencies":{"htmljs":"1.0.11-(expanded-above)"}},"htmljs":"1.0.11-(expanded-above)","underscore":{"version":"1.0.10","local":true}}},"underscore":{"version":"1.0.10","local":true}}},"underscore":{"version":"1.0.10","local":true}}},"ecmascript":"0.14.3-(top-level)","templating-tools":"1.1.2-(expanded-above)"}},"templating-runtime":{"version":"1.3.2","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)","spacebars":"1.0.15-(expanded-above)","templating-compiler":"1.3.3-(expanded-above)","underscore":{"version":"1.0.10","local":true}}}}},"ui":{"version":"1.0.13","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)"}}}},"ecmascript":{"version":"0.14.3","local":true,"containsPlugins":true,"dependencies":{"babel-compiler":{"version":"7.5.3","local":true,"dependencies":{"ecmascript-runtime":{"version":"0.7.0","local":true,"dependencies":{"ecmascript-runtime-client":{"version":"0.11.0","local":true,"dependencies":{"es5-shim":"4.8.0-(top-level)","modern-browsers":{"version":"0.1.5","local":true,"dependencies":{"modules":{"version":"0.15.0","local":true,"dependencies":{"modules-runtime":{"version":"0.12.0","local":true}}}}},"modules":"0.15.0-(expanded-above)","promise":{"version":"0.11.2","local":true,"dependencies":{"context":"[weak]-package-skipped","modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)"}}}},"ecmascript-runtime-server":{"version":"0.10.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}}}},"modern-browsers":"0.1.5-(expanded-above)"}},"babel-runtime":{"version":"1.5.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"dynamic-import":{"version":"0.5.2","local":true,"dependencies":{"fetch":{"version":"0.1.1","local":true,"dependencies":{"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"inter-process-messaging":{"version":"0.1.1","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"ecmascript-runtime":"0.7.0-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}},"es5-shim":{"version":"4.8.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"insecure":{"version":"1.0.7","local":true},"jquery":{"version":"3.0.0","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"meteor-base":{"version":"1.4.0","local":true,"dependencies":{"ddp":{"version":"1.4.0","local":true,"dependencies":{"ddp-client":{"version":"2.3.3","local":true,"dependencies":{"callback-hook":{"version":"1.3.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"check":"1.3.1-(expanded-above)","ddp-common":{"version":"1.4.0","local":true,"dependencies":{"check":"1.3.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","random":"1.2.0-(expanded-above)","retry":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","random":"1.2.0-(expanded-above)"}},"tracker":"1.2.0-(top-level)"}},"diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","id-map":"1.1.0-(expanded-above)","mongo-id":"1.0.7-(expanded-above)","random":"1.2.0-(expanded-above)","reload":{"version":"1.3.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"retry":"1.1.0-(expanded-above)","socket-stream-client":{"version":"0.3.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","modern-browsers":"0.1.5-(expanded-above)","retry":"1.1.0-(expanded-above)"}},"tracker":"1.2.0-(top-level)"}},"ddp-server":{"version":"2.3.2","local":true,"dependencies":{"audit-argument-checks":"[weak]-package-skipped","autopublish":{"version":"1.0.7","local":true,"weak":true},"callback-hook":"1.3.0-(expanded-above)","check":"1.3.1-(expanded-above)","ddp-client":"2.3.3-(expanded-above)","ddp-common":"1.4.0-(expanded-above)","ddp-rate-limiter":"[weak]-package-skipped","diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","facts-base":"[weak]-package-skipped","mongo-id":"1.0.7-(expanded-above)","random":"1.2.0-(expanded-above)","retry":"1.1.0-(expanded-above)","routepolicy":{"version":"1.1.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","underscore":{"version":"1.0.10","local":true},"webapp":{"version":"1.9.1","local":true,"dependencies":{"boilerplate-generator":{"version":"1.7.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","underscore":{"version":"1.0.10","local":true}}},"ecmascript":"0.14.3-(top-level)","inter-process-messaging":"0.1.1-(expanded-above)","logging":{"version":"1.1.20","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ecmascript-runtime-client":"0.11.0-(expanded-above)","ejson":"1.1.1-(expanded-above)"}},"modern-browsers":"0.1.5-(expanded-above)","routepolicy":"1.1.0-(expanded-above)","underscore":{"version":"1.0.10","local":true},"webapp-hashing":{"version":"1.0.9","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","underscore":{"version":"1.0.10","local":true}}}}}}},"underscore":{"version":"1.0.10","local":true},"webapp":"1.9.1-(expanded-above)"}}}},"es5-shim":"4.8.0-(top-level)","hot-code-push":{"version":"1.0.4","local":true,"dependencies":{"autoupdate":{"version":"1.6.0","local":true,"dependencies":{"check":"1.3.1-(expanded-above)","ddp":"1.4.0-(expanded-above)","ecmascript":"0.14.3-(top-level)","inter-process-messaging":"0.1.1-(expanded-above)","reload":"1.3.0-(expanded-above)","retry":"1.1.0-(expanded-above)","tracker":"1.2.0-(top-level)","webapp":"1.9.1-(expanded-above)"}},"reload":"1.3.0-(expanded-above)"}},"livedata":{"version":"1.0.18","local":true,"dependencies":{"ddp":"1.4.0-(expanded-above)"}},"webapp":"1.9.1-(expanded-above)"}},"meteortesting:mocha":{"version":"2.0.1","earliestCompatibleVersion":"2.0.0","testOnly":true,"lastUpdated":"2020-06-17T09:07:49.013Z","published":"2020-06-17T09:07:49.013Z","dependencies":{"browser-policy":"[weak]-package-skipped","ecmascript":"0.14.3-(top-level)","http":{"version":"1.4.2","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)","url":{"version":"1.3.1","local":true,"dependencies":{"modern-browsers":"0.1.5-(expanded-above)","modules":"0.15.0-(expanded-above)"}}}},"lmieulet:meteor-coverage":"[weak]-package-skipped","meteortesting:browser-tests":{"version":"1.3.4","earliestCompatibleVersion":"1.0.0","testOnly":true,"lastUpdated":"2020-05-18T05:48:20.483Z","published":"2020-05-18T05:48:20.483Z","dependencies":{"ecmascript":"0.14.3-(top-level)"}},"meteortesting:mocha-core":{"version":"8.0.1","newerVersion":"8.1.2","earliestCompatibleVersion":"8.0.0","testOnly":true,"lastUpdated":"2020-06-17T09:00:19.970Z","published":"2020-06-17T09:00:19.970Z","dependencies":{"ecmascript":"0.14.3-(top-level)"}}}},"mobile-experience":{"version":"1.1.0","local":true,"dependencies":{"launch-screen":{"version":"1.2.0","local":true,"dependencies":{"blaze":"2.3.4-(expanded-above)","templating":"1.3.2-(expanded-above)"}},"mobile-status-bar":{"version":"1.1.0","local":true}}},"mongo":{"version":"1.10.0","local":true,"dependencies":{"allow-deny":{"version":"1.1.0","local":true,"dependencies":{"check":"1.3.1-(expanded-above)","ddp":"1.4.0-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","minimongo":{"version":"1.6.0","local":true,"dependencies":{"diff-sequence":"1.1.1-(expanded-above)","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","geojson-utils":{"version":"1.0.10","local":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"id-map":"1.1.0-(expanded-above)","mongo-decimal":{"version":"0.1.1","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)"}},"mongo-id":"1.0.7-(expanded-above)","ordered-dict":"1.1.0-(expanded-above)","random":"1.2.0-(expanded-above)","tracker":"1.2.0-(top-level)"}}}},"autopublish":{"version":"1.0.7","local":true,"weak":true},"binary-heap":{"version":"1.0.11","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)","id-map":"1.1.0-(expanded-above)"}},"callback-hook":"1.3.0-(expanded-above)","check":"1.3.1-(expanded-above)","ddp":"1.4.0-(expanded-above)","diff-sequence":"1.1.1-(expanded-above)","disable-oplog":"[weak]-package-skipped","ecmascript":"0.14.3-(top-level)","ejson":"1.1.1-(expanded-above)","facts-base":"[weak]-package-skipped","insecure":{"version":"1.0.7","local":true,"weak":true},"minimongo":"1.6.0-(expanded-above)","mongo-decimal":"0.1.1-(expanded-above)","mongo-dev-server":{"version":"1.1.0","local":true,"debugOnly":true,"dependencies":{"modules":"0.15.0-(expanded-above)"}},"mongo-id":"1.0.7-(expanded-above)","npm-mongo":{"version":"3.8.0","local":true},"random":"1.2.0-(expanded-above)","tracker":"1.2.0-(top-level)","underscore":{"version":"1.0.10","local":true},"webapp":"1.9.1-(expanded-above)"}},"reactive-var":{"version":"1.0.11","local":true,"dependencies":{"tracker":"1.2.0-(top-level)"}},"shell-server":{"version":"0.5.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"standard-minifier-css":{"version":"1.6.0","local":true,"containsPlugins":true,"dependencies":{"minifier-css":{"version":"1.5.2","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}}}},"standard-minifier-js":{"version":"2.6.0","local":true,"containsPlugins":true,"dependencies":{"babel-compiler":"7.5.3-(expanded-above)","ecmascript":"0.14.3-(top-level)","minifier-js":{"version":"2.6.0","local":true,"dependencies":{"babel-compiler":"7.5.3-(expanded-above)"}}}},"tracker":{"version":"1.2.0","local":true,"dependencies":{"ecmascript":"0.14.3-(top-level)"}},"typescript":{"version":"3.7.6","local":true,"containsPlugins":true,"dependencies":{"babel-compiler":"7.5.3-(expanded-above)","babel-runtime":"1.5.0-(expanded-above)","dynamic-import":"0.5.2-(expanded-above)","ecmascript-runtime":"0.7.0-(expanded-above)","modules":"0.15.0-(expanded-above)","promise":"0.11.2-(expanded-above)"}}}

Backwards compatibility

This implementation does not alter the behaviour of meteor list or meteor list --tree. Any detected alteration of their behaviour is unintended.

Tests

I am still unsure, where to add tests, since there are not really tests for this command found, besides for the plain meteor list command. Any hint would be appreciated.

Outlook

Could include deprecation flag from #11162 if this is implemented in order to maximize potential CI implementations that scan packages and projects.

Implements feature request meteor#406 by allowing to type a --json option
and let the tree output be in JSON format. The entries consist of
the package name as key and either String value (version number +
top-level or expanded-above) or an Object with the following
properties:

- version (String) - always
- local (Boolean) - only if true when package is built from source
- weak (Boolean) - only if true
- newerVersion (String) - only if exists
- dependencies (Object) - only if > 0 and not all weak

In order to also support a more detailed output, there is a --details
option. If it's active, the following properties are added, too:

- earliestCompatibleVersion (String) - always
- debugOnly (Boolean) - only if true
- prodOnly (Boolean) - only if true
- testOnly (Boolean) - only if true
- containsPlugins (Boolean) - only if true
- lastUpdated (Date-String) - always
- published (Date-String) - always
Copy link
Contributor

@filipenevola filipenevola left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great, just a small suggestion to avoid repetition.

In order to avoid repitition we use a single source of suffixes
for the list --tree and list --json commands.
We want at least test, that there is a minimal integrity with these
commands when running the arguments parsing tests.
@filipenevola
Copy link
Contributor

@jankapunkt do you have a docs PR as well?

@filipenevola filipenevola added this to the Release 1.12 milestone Oct 28, 2020
Comment on lines 1323 to 1320
Console.info(JSON.stringify(jsonOut))
// we can't use Console here, because it pretty prints the output with
// a wrap at 80 chars per line, which causes the json to break if details
// options is active and the package descriptions exceed the limit
console.info(JSON.stringify(jsonOut));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can use Console.noWrap to not wrap the text:

/// - Console.noWrap: anything else that you don't want line-wrapped.
///
/// Here is a contrived example:
/// Console.info(
/// "For more information, please run", Console.command("meteor show"),
/// "or check out the new releases at", Console.url("www.meteor.com"),
/// "or look at", Console.path(filepath), ". You are currently running",
/// "Console.noWrap("Meteor version 1.5") + ".");

@jankapunkt
Copy link
Contributor Author

@jankapunkt do you have a docs PR as well?

@filipenevola not yet but I can add one today

@filipenevola filipenevola added the confirmed We want to fix or implement it label Oct 31, 2020
@filipenevola filipenevola merged commit ab0affe into meteor:devel Oct 31, 2020
@filipenevola
Copy link
Contributor

@jankapunkt please add here when you have the docs PR ready

jankapunkt added a commit to jankapunkt/docs that referenced this pull request Nov 1, 2020
The optional flags were not documented. This adds the flags,
including those (--json, --details), added via
meteor/meteor#11165
@jankapunkt
Copy link
Contributor Author

@filipenevola the docs PR is here: meteor/docs#685

lorensr pushed a commit to meteor/docs that referenced this pull request Nov 2, 2020
The optional flags were not documented. This adds the flags,
including those (--json, --details), added via
meteor/meteor#11165
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
confirmed We want to fix or implement it Project:Tool:Shell
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants