From 6de79fc96a3c939f00ac4b828b21265d0cccc242 Mon Sep 17 00:00:00 2001 From: GabrielMeyer Date: Tue, 9 Apr 2019 10:47:35 +0200 Subject: [PATCH] Implements a crawler to find all directly used packages - Holds a 'default' `README.md` with the default content. - Writes down all found packages with links to their repositories. --- DEVELOPMENT.rst | 4 +++ client/README.md | 69 +++++++++++++++++++++++++++++++++++++ client/package.json | 3 ++ client/src/crawler.js | 80 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 156 insertions(+) create mode 100644 client/src/crawler.js diff --git a/DEVELOPMENT.rst b/DEVELOPMENT.rst index be5ef7023..3a5eaba0d 100644 --- a/DEVELOPMENT.rst +++ b/DEVELOPMENT.rst @@ -166,6 +166,10 @@ To extract translations run:: $ npm run extract +When updating, adding or changing used packages from npm, please update the README.md using following command:: + + $ npm run licenses + OpenSlides in big mode ====================== diff --git a/client/README.md b/client/README.md index b2b771660..ffb7bbae6 100644 --- a/client/README.md +++ b/client/README.md @@ -54,3 +54,72 @@ We are using ngx-translate for translation purposes. Use `npm run extract` to extract strings and update elements an with translation functions. Language files can be found in `/src/assets/i18n`. + +### Used software + +OpenSlides uses the following software or parts of them: + +- [@angular/animations@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/cdk@7.3.3](https://github.com/angular/material2), License: MIT +- [@angular/common@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/compiler@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/core@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/forms@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/http@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/material@7.3.3](https://github.com/angular/material2), License: MIT +- [@angular/platform-browser-dynamic@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/platform-browser@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/pwa@0.13.2](https://github.com/angular/angular-cli), License: MIT +- [@angular/router@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/service-worker@7.2.6](https://github.com/angular/angular), License: MIT +- [@ngx-pwa/local-storage@7.4.1](https://github.com/cyrilletuzi/angular-async-local-storage), License: MIT +- [@ngx-translate/core@11.0.1](https://github.com/ngx-translate/core), License: MIT +- [@ngx-translate/http-loader@4.0.0](https://github.com/ngx-translate/http-loader), License: MIT +- [@tinymce/tinymce-angular@3.0.0](https://github.com/tinymce/tinymce-angular), License: Apache-2.0 +- [core-js@2.6.5](https://github.com/zloirock/core-js), License: MIT +- [css-element-queries@1.1.1](https://github.com/marcj/css-element-queries), License: MIT +- [exceljs@1.8.0](https://github.com/exceljs/exceljs), License: MIT +- [file-saver@2.0.1](https://github.com/eligrey/FileSaver.js), License: MIT +- [hammerjs@2.0.8](https://github.com/hammerjs/hammer.js), License: MIT +- [material-icon-font@0.1.0](https://github.com//petergng/svgFontCreator), License: ISC +- [ng-pick-datetime@7.0.0](https://github.com/DanielYKPan/date-time-picker), License: MIT +- [ngx-file-drop@5.0.5](https://github.com/georgipeltekov/ngx-file-drop), License: MIT +- [ngx-mat-select-search@1.5.2](https://github.com/bithost-gmbh/ngx-mat-select-search), License: MIT +- [ngx-papaparse@3.0.2](https://github.com/alberthaff/ngx-papaparse), License: MIT +- [pdfmake@0.1.53](https://github.com/bpampuch/pdfmake), License: MIT +- [po2json@1.0.0-alpha](https://github.com/mikeedwards/po2json), License: GNU Library General Public License +- [rxjs@6.4.0](https://github.com/reactivex/rxjs), License: Apache-2.0 +- [tinymce@4.9.2](https://github.com/tinymce/tinymce-dist), License: LGPL-2.1 +- [uuid@3.3.2](https://github.com/kelektiv/node-uuid), License: MIT +- [zone.js@0.8.29](https://github.com/angular/zone.js), License: MIT +- [@angular-devkit/build-angular@0.13.2](https://github.com/angular/angular-cli), License: MIT +- [@angular/cli@7.3.2](https://github.com/angular/angular-cli), License: MIT +- [@angular/compiler-cli@7.2.6](https://github.com/angular/angular), License: MIT +- [@angular/language-service@7.2.6](https://github.com/angular/angular), License: MIT +- [@biesbjerg/ngx-translate-extract@2.3.4](https://github.com/biesbjerg/ngx-translate-extract), License: MIT +- [@compodoc/compodoc@1.1.8](https://github.com/compodoc/compodoc), License: MIT +- [@types/jasmine@3.3.9](https://github.com/DefinitelyTyped/DefinitelyTyped), License: MIT +- [@types/jasminewd2@2.0.6](https://github.com/DefinitelyTyped/DefinitelyTyped), License: MIT +- [@types/node@11.9.4](https://github.com/DefinitelyTyped/DefinitelyTyped), License: MIT +- [@types/yargs@12.0.9](https://github.com/DefinitelyTyped/DefinitelyTyped), License: MIT +- [codelyzer@4.5.0](https://github.com/mgechev/codelyzer), License: MIT +- [fs@0.0.1-security](https://github.com/npm/security-holder), License: ISC +- [husky@1.3.1](https://github.com/typicode/husky), License: MIT +- [jasmine-core@3.3.0](https://github.com/jasmine/jasmine), License: MIT +- [jasmine-spec-reporter@4.2.1](https://github.com/bcaudan/jasmine-spec-reporter), License: Apache-2.0 +- [karma-chrome-launcher@2.2.0](https://github.com/karma-runner/karma-chrome-launcher), License: MIT +- [karma-coverage-istanbul-reporter@2.0.5](https://github.com/mattlewis92/karma-coverage-istanbul-reporter), License: MIT +- [karma-jasmine-html-reporter@1.4.0](https://github.com/dfederm/karma-jasmine-html-reporter), License: MIT +- [karma-jasmine@2.0.1](https://github.com/karma-runner/karma-jasmine), License: MIT +- [karma@4.0.0](https://github.com/karma-runner/karma), License: MIT +- [npm-license-crawler@0.2.1](https://github.com/mwittig/npm-license-crawler), License: BSD-3-Clause +- [npm-run-all@4.1.5](https://github.com/mysticatea/npm-run-all), License: MIT +- [prettier@1.17.0](https://github.com/prettier/prettier), License: MIT +- [protractor@5.4.2](https://github.com/angular/protractor), License: MIT +- [source-map-explorer@1.7.0](https://github.com/danvk/source-map-explorer), License: Apache-2.0 +- [terser@3.16.1](https://github.com/fabiosantoscode/terser), License: BSD-2-Clause +- [ts-node@8.0.2](https://github.com/TypeStrong/ts-node), License: MIT +- [tslint@5.12.1](https://github.com/palantir/tslint), License: Apache-2.0 +- [tsutils@3.8.0](https://github.com/ajafff/tsutils), License: MIT +- [typescript@3.2.4](https://github.com/Microsoft/TypeScript), License: Apache-2.0 +- [webpack-bundle-analyzer@3.0.4](https://github.com/webpack-contrib/webpack-bundle-analyzer), License: MIT diff --git a/client/package.json b/client/package.json index 5d05919d5..0b8e4df47 100644 --- a/client/package.json +++ b/client/package.json @@ -16,6 +16,7 @@ "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", + "licenses": "node src/crawler.js", "compodoc": "./node_modules/.bin/compodoc --hideGenerator -p src/tsconfig.app.json -n 'OpenSlides Documentation' -d ../Compodoc -s -w -t -o --port", "extract": "ngx-translate-extract -i ./src -o ./src/assets/i18n/template-en.pot --clean --sort --format pot -m _", "po2json": "./node_modules/.bin/po2json -f mf src/assets/i18n/de.po src/assets/i18n/de.json && ./node_modules/.bin/po2json -f mf src/assets/i18n/cs.po src/assets/i18n/cs.json", @@ -70,6 +71,7 @@ "@types/node": "^11.9.4", "@types/yargs": "^12.0.9", "codelyzer": "~4.5.0", + "fs": "0.0.1-security", "husky": "^1.3.1", "jasmine-core": "~3.3.0", "jasmine-spec-reporter": "~4.2.1", @@ -78,6 +80,7 @@ "karma-coverage-istanbul-reporter": "^2.0.5", "karma-jasmine": "~2.0.1", "karma-jasmine-html-reporter": "^1.4.0", + "npm-license-crawler": "^0.2.1", "npm-run-all": "^4.1.5", "prettier": "^1.17.0", "protractor": "^5.4.2", diff --git a/client/src/crawler.js b/client/src/crawler.js new file mode 100644 index 000000000..63124b1fd --- /dev/null +++ b/client/src/crawler.js @@ -0,0 +1,80 @@ +const crawler = require('npm-license-crawler'); +const fs = require('fs'); + +/** + * Describes the options for dumping the licenses. + */ +const options = { + start: ['.'], + json: 'licenses.json', + onlyDirectDependencies: true +}; + +const production = { + ...options, + production: true +}; + +const development = { + ...options, + development: true +}; + +let data = ''; + +/** + * To the `README.md` the content with used packages and + * their licenses will appended to the end of the default content. + */ +fs.readFile('README.md', { + encoding: 'utf8', + flag: 'r' +}, async (_, copy) => { + let heading = '### Used software'; + const index = copy.search(heading); + + if (index > 0) { + data = copy.slice(0, index) + heading + '\n'; + } else { + data = copy + '\n' + heading + '\n'; + } + + data += '\nOpenSlides uses the following software or parts of them:\n\n'; + +}); + +/** + * Dump the licenses + */ +crawler.dumpLicenses(production, async (_, res) => { + writeToFile(res); + + await crawler.dumpLicenses(development, async (_, res) => { + writeToFile(res); + await fs.writeFile('README.md', data, 'utf8', async () => { + // Here the previously created file will be deleted. + await fs.unlink('licenses.json', () => {}); + }); + }); +}) + +/** + * Function to write down a list of all found packages in the `package.json`. + * + * @param {json} licenses are all found packages in the project. + */ +function writeToFile(licenses) { + let resources = []; + for (let key in licenses) { + resources.push({ + name: key, + repository: licenses[key]['repository'], + license: licenses[key]['licenses'] + }); + } + + for (let entry of resources) { + data += '- [' + entry.name + ']' + '(' + entry.repository + ')' + + ', License: ' + entry.license + '\n'; + } +}