From 6e9d34e90a4a64b91fa07433f17c30bb1dfc06f9 Mon Sep 17 00:00:00 2001 From: zhanghua1831 Date: Fri, 28 Aug 2020 11:57:10 +0800 Subject: [PATCH] package init --- examples.test.js | 377 +++++++++++++++++++++++++++++++++++++++ nodejs-spdx-correct.spec | 48 +++++ nodejs-spdx-correct.yaml | 4 + spdx-correct-1.0.2.tgz | Bin 0 -> 5319 bytes 4 files changed, 429 insertions(+) create mode 100644 examples.test.js create mode 100644 nodejs-spdx-correct.spec create mode 100644 nodejs-spdx-correct.yaml create mode 100644 spdx-correct-1.0.2.tgz diff --git a/examples.test.js b/examples.test.js new file mode 100644 index 0000000..716761b --- /dev/null +++ b/examples.test.js @@ -0,0 +1,377 @@ +var test = require('tape'); +var parse = require('spdx-expression-parse'); +var correct = require('./'); + +function valid(string) { + try { + parse(string); + return true; + } catch (e) { + return false; + } +} + +var examples = { + ' Apache License V2': 'Apache-2.0', + ' BSD-3-Clause': 'BSD-3-Clause', + ' GPL-3.0+': 'GPL-3.0', + '"BD-2-Clause"': 'BSD-2-Clause', + '"BSD-2-Clause"': 'BSD-2-Clause', + '"MIT"': 'MIT', + '(LGPL)': 'LGPL-3.0', + '2 clause BSD': 'BSD-2-Clause', + '2-clause-BSD': 'BSD-2-Clause', + '3-Clause BSD': 'BSD-3-Clause', + '3-Clause-BSD': 'BSD-3-Clause', + '3-clause BSD': 'BSD-3-Clause', + 'AGPL 3': 'AGPL-3.0', + 'AGPL 3.0':'AGPL-3.0', + 'AGPL v3': 'AGPL-3.0', + 'AGPL': 'AGPL-3.0', + 'AGPL, Copyright 2014 uh-sem-blee, Co.': 'AGPL-3.0', + 'AGPL-3': 'AGPL-3.0', + 'AGPL3': 'AGPL-3.0', + 'AGPLV3': 'AGPL-3.0', + 'AGPLv3': 'AGPL-3.0', + 'AGPLv3+': 'AGPL-3.0', + 'AOL/MIT': 'MIT', + 'APACHE 2': 'Apache-2.0', + 'APACHE 2.0': 'Apache-2.0', + 'APACHE V2.0': 'Apache-2.0', + 'APACHE': 'Apache-2.0', + 'APACHE-2': 'Apache-2.0', + 'APACHE-2.0': 'Apache-2.0', + 'APACHE-V2': 'Apache-2.0', + 'APACHE2': 'Apache-2.0', + 'APACHE2.0': 'Apache-2.0', + 'APACHE20': 'Apache-2.0', + 'APACHE2_0': 'Apache-2.0', + 'APGLv3': 'AGPL-3.0', + 'APL 2.0': 'Apache-2.0', + 'APL': 'Apache-2.0', + 'APL2': 'Apache-2.0', + 'APLv2': 'Apache-2.0', + 'Affero GPL or Commercial': 'AGPL-3.0', + 'Affero GPL v3': 'AGPL-3.0', + 'Affero GPL3': 'AGPL-3.0', + 'Affero General Public License v3': 'AGPL-3.0', + 'Affero-GPL': 'AGPL-3.0', + 'Apache ': 'Apache-2.0', + 'Apache 2 License': 'Apache-2.0', + 'Apache 2': 'Apache-2.0', + 'Apache 2.0 License': 'Apache-2.0', + 'Apache 2.0 http://www.apache.org/licenses/': 'Apache-2.0', + 'Apache 2.0': 'Apache-2.0', + 'Apache Licence 2.0': 'Apache-2.0', + 'Apache Licence v2': 'Apache-2.0', + 'Apache License 2': 'Apache-2.0', + 'Apache License 2.': 'Apache-2.0', + 'Apache License 2.0': 'Apache-2.0', + 'Apache License V2': 'Apache-2.0', + 'Apache License V2.0': 'Apache-2.0', + 'Apache License Version 2.0': 'Apache-2.0', + 'Apache License Version 2.0,': 'Apache-2.0', + 'Apache License v2': 'Apache-2.0', + 'Apache License v2.0': 'Apache-2.0', + 'Apache License version 2.0': 'Apache-2.0', + 'Apache License': 'Apache-2.0', + 'Apache License, 2.0': 'Apache-2.0', + 'Apache License, Version 2.0': 'Apache-2.0', + 'Apache License, Version 2.0, http://www.apache.org/licenses/LICENSE-2.0': 'Apache-2.0', + 'Apache License, v2.0': 'Apache-2.0', + 'Apache License, version 2': 'Apache-2.0', + 'Apache Public License v2': 'Apache-2.0', + 'Apache Public License, Version 2': 'Apache-2.0', + 'Apache Software License 2.0': 'Apache-2.0', + 'Apache Software License Version 2': 'Apache-2.0', + 'Apache V2': 'Apache-2.0', + 'Apache V2.0': 'Apache-2.0', + 'Apache Version 2': 'Apache-2.0', + 'Apache Version 2.0': 'Apache-2.0', + 'Apache lisence V2': 'Apache-2.0', + 'Apache lisense 2.0': 'Apache-2.0', + 'Apache v. 2': 'Apache-2.0', + 'Apache v2 License': 'Apache-2.0', + 'Apache v2': 'Apache-2.0', + 'Apache v2.0': 'Apache-2.0', + 'Apache version 2': 'Apache-2.0', + 'Apache version 2.0': 'Apache-2.0', + 'Apache': 'Apache-2.0', + 'Apache, Version 2.0': 'Apache-2.0', + 'Apache, v2.0': 'Apache-2.0', + 'Apache-2': 'Apache-2.0', + 'Apache-2.0': 'Apache-2.0', + 'Apache-License-2.0': 'Apache-2.0', + 'Apache-V2': 'Apache-2.0', + 'Apache-v2': 'Apache-2.0', + 'Apache-v2.0': 'Apache-2.0', + 'Apache2': 'Apache-2.0', + 'Apache2.0': 'Apache-2.0', + 'Apache20': 'Apache-2.0', + 'ApacheV2': 'Apache-2.0', + 'Apache_2_0': 'Apache-2.0', + 'Apachev2': 'Apache-2.0', + 'Artistic 2.0': 'Artistic-2.0', + 'Artistic License 2.0': 'Artistic-2.0', + 'Artistic License': 'Artistic-2.0', + 'Artistic': 'Artistic-2.0', + 'Attribution-NonCommercial': 'CC-BY-NC-4.0', + 'BEER': 'Beerware', + 'BEERWARE': 'Beerware', + 'BOOST': 'BSL-1.0', + 'BS3 3-Clause': 'BSD-3-Clause', + 'BSD 2-Clause license': 'BSD-2-Clause', + 'BSD 2-Clause': 'BSD-2-Clause', + 'BSD 2-clause': 'BSD-2-Clause', + 'BSD 3 Clause': 'BSD-3-Clause', + 'BSD 3': 'BSD-3-Clause', + 'BSD 3-Clause': 'BSD-3-Clause', + 'BSD 3-clause': 'BSD-3-Clause', + 'BSD clause 3': 'BSD-3-Clause', + 'BSD': 'BSD-2-Clause', + 'BSD-2 Clause': 'BSD-2-Clause', + 'BSD-2-Clauseno': 'BSD-2-Clause', + 'BSD-2-clause': 'BSD-2-Clause', + 'BSD-3 Clause': 'BSD-3-Clause', + 'BSD-3': 'BSD-3-Clause', + 'BSD-3-Claude': 'BSD-3-Clause', + 'BSD2-License': 'BSD-2-Clause', + 'BSD3': 'BSD-3-Clause', + 'BSD3-Clause': 'BSD-3-Clause', + 'Beer-Ware': 'Beerware', + 'BeerWare': 'Beerware', + 'Beerware': 'Beerware', + 'Boost': 'BSL-1.0', + 'CC BY 3.0': 'CC-BY-3.0', + 'CC BY 4.0': 'CC-BY-4.0', + 'CC-BY 3.0': 'CC-BY-3.0', + 'CC-BY 4.0 International': 'CC-BY-4.0', + 'Cc-by-3.0': 'CC-BY-3.0', + 'DWTFYW License': 'WTFPL', + 'DWTFYW': 'WTFPL', + 'DWTFYWPL': 'WTFPL', + 'Do what the fuck you want to public license': 'WTFPL', + 'Eclipse Public License (EPL)': 'EPL-1.0', + 'Eclipse Public License + Eclipse Distribution License': 'EPL-1.0', + 'Eclipse Public License 1.0': 'EPL-1.0', + 'Eclipse Public License': 'EPL-1.0', + 'Eclipse Public License, Eclipse Distribution License': 'EPL-1.0', + 'Eclipse': 'EPL-1.0', + 'GLP': 'GPL-3.0', + 'GLPv3': 'GPL-3.0', + 'GNU Affero GPL 3.0': 'AGPL-3.0', + 'GNU Affero GPLv3': 'AGPL-3.0', + 'GNU GENERAL PUBLIC LICENSE Version 2': 'GPL-2.0', + 'GNU GENERAL PUBLIC LICENSE': 'GPL-3.0', + 'GNU GLP v3.0': 'GPL-3.0', + 'GNU GPL 3': 'GPL-3.0', + 'GNU GPL 3.0': 'GPL-3.0', + 'GNU GPL V2': 'GPL-2.0', + 'GNU GPL V3.0': 'GPL-3.0', + 'GNU GPL v2': 'GPL-2.0', + 'GNU GPL v2.0': 'GPL-2.0', + 'GNU GPL v3': 'GPL-3.0', + 'GNU GPL v3.0': 'GPL-3.0', + 'GNU GPL ver 3': 'GPL-3.0', + 'GNU GPL': 'GPL-3.0', + 'GNU GPLv2': 'GPL-2.0', + 'GNU GPLv3': 'GPL-3.0', + 'GNU GPLv3+': 'GPL-3.0', + 'GNU General Public License v2.0': 'GPL-2.0', + 'GNU General Public License v3': 'GPL-3.0', + 'GNU General Public License': 'GPL-3.0', + 'GNU General Public License, version 2': 'GPL-2.0', + 'GNU General Public': 'GPL-3.0', + 'GNU LESSER GENERAL PUBLIC LICENSE': 'GPL-3.0', + 'GNU LGPL v3.0': 'GPL-3.0', + 'GNU License v3': 'GPL-3.0', + 'GNU V3': 'GPL-3.0', + 'GNU v2': 'GPL-2.0', + 'GNU': 'GPL-3.0', + 'GNU-GPL': 'GPL-3.0', + 'GNU/GPL': 'GPL-3.0', + 'GNU/GPLv2': 'GPL-2.0', + 'GPL 2': 'GPL-2.0', + 'GPL 2.0': 'GPL-2.0', + 'GPL 3': 'GPL-3.0', + 'GPL 3.0': 'GPL-3.0', + 'GPL V2': 'GPL-2.0', + 'GPL V3': 'GPL-3.0', + 'GPL V3.0': 'GPL-3.0', + 'GPL Version 3': 'GPL-3.0', + 'GPL v.2': 'GPL-2.0', + 'GPL v2': 'GPL-2.0', + 'GPL v3': 'GPL-3.0', + 'GPL v3+': 'GPL-3.0', + 'GPL v3.0': 'GPL-3.0', + 'GPL': 'GPL-3.0', + 'GPL-2': 'GPL-2.0', + 'GPL-2.0-': 'GPL-2.0', + 'GPL-3': 'GPL-3.0', + 'GPL-V3': 'GPL-3.0', + 'GPL2': 'GPL-2.0', + 'GPL2+': 'GPL-2.0', + 'GPL3': 'GPL-3.0', + 'GPL3.0': 'GPL-3.0', + 'GPL3.0+': 'GPL-3.0', + 'GPLV2': 'GPL-2.0', + 'GPLV3': 'GPL-3.0', + 'GPLv2': 'GPL-2.0', + 'GPLv2+': 'GPL-2.0', + 'GPLv3': 'GPL-3.0', + 'GPLv3+': 'GPL-3.0', + 'GPLv3.0': 'GPL-3.0', + 'GUN': 'GPL-3.0', + 'Gnu public license v2.0': 'GPL-2.0', + 'Gpl v3': 'GPL-3.0', + 'Gpl': 'GPL-3.0', + 'Gpl-2.0': 'GPL-2.0', + 'Gpl-3.0': 'GPL-3.0', + 'Gpl2': 'GPL-2.0', + 'Http://opensource.org/licenses/MIT': 'MIT', + 'Http://unlicense.org': 'Unlicense', + 'Http://wtfpl.org/': 'WTFPL', + 'Http://www.apache.org/licenses/LICENSE-2.0': 'Apache-2.0', + 'Http://www.mozilla.org/MPL/2.0/': 'MPL-2.0', + 'Http://www.opensource.org/licenses/MIT': 'MIT', + 'ISD': 'ISC', + 'IST': 'ISC', + 'Isc': 'ISC', + 'LGLP3': 'LGPL-3.0', + 'LGPL 2.1': 'LGPL-2.1', + 'LGPL 3': 'LGPL-3.0', + 'LGPL 3.0': 'LGPL-3.0', + 'LGPL Version 3.0': 'LGPL-3.0', + 'LGPL v2': 'LGPL-2.0', + 'LGPL v3': 'LGPL-3.0', + 'LGPL': 'LGPL-3.0', + 'LGPL-2': 'LGPL-2.0', + 'LGPL-3': 'LGPL-3.0', + 'LGPL.v3': 'LGPL-3.0', + 'LGPL2': 'LGPL-2.0', + 'LGPL2.1': 'LGPL-2.1', + 'LGPL3': 'LGPL-3.0', + 'LGPL3+': 'LGPL-3.0', + 'LGPL3.0': 'LGPL-3.0', + 'LGPL:': 'LGPL-3.0', + 'LGPLv2.1': 'LGPL-2.1', + 'LGPLv3': 'LGPL-3.0', + 'LGPLv3+': 'LGPL-3.0', + 'LICENSE-MIT': 'MIT', + 'Licenses/GPL-3.0': 'GPL-3.0', + 'M.I.T': 'MIT', + 'M.I.T.': 'MIT', + 'MIT ': 'MIT', + 'MIT (http://mootools.net/license.txt)': 'MIT', + 'MIT (https://github.com/AlekseyLeshko/say-me/blob/master/LICENSE)': 'MIT', + 'MIT (https://github.com/AlekseyLeshko/testimonial.js/blob/master/LICENSE)': 'MIT', + 'MIT (https://github.com/brentertz/scapegoat/blob/master/LICENSE-MIT)': 'MIT', + 'MIT / http://rem.mit-license.org': 'MIT', + 'MIT / http://www.highcharts.com/license/': 'MIT', + 'MIT 1.0': 'MIT', + 'MIT ': 'MIT', + 'MIT ': 'MIT', + 'MIT ': 'MIT', + 'MIT @chetandhembre': 'MIT', + 'MIT Copyright (c) 2015 Austin Eldridge': 'MIT', + 'MIT LICENSE': 'MIT', + 'MIT Licence': 'MIT', + 'MIT License (MIT)': 'MIT', + 'MIT License (http://opensource.org/licenses/MIT)': 'MIT', + 'MIT License - http://opensource.org/licenses/MIT': 'MIT', + 'MIT License': 'MIT', + 'MIT License, http://www.opensource.org/licenses/MIT': 'MIT', + 'MIT License, see LICENSE.md for details': 'MIT', + 'MIT License. Copyright First Rally. All rights reserved.': 'MIT', + 'MIT License.': 'MIT', + 'MIT Licensed. http://www.opensource.org/licenses/mit-license.php': 'MIT', + 'MIT Lisence': 'MIT', + 'MIT licence': 'MIT', + 'MIT license (MIT)': 'MIT', + 'MIT license': 'MIT', + 'MIT, Copyright (c) 2013 Michael Schoonmaker': 'MIT', + 'MIT, http://opensource.org/licenses/MIT': 'MIT', + 'MIT-LICENSE': 'MIT', + 'MIT-License': 'MIT', + 'MIT-Style': 'MIT', + 'MIT-like': 'MIT', + 'MIT/X': 'MIT', + 'MIT/X11': 'MIT', + 'MIT2': 'MIT', + 'MITISC': 'MIT', + 'MIT]': 'MIT', + 'MIT_License': 'MIT', + 'MITt': 'MIT', + 'MPL 2': 'MPL-2.0', + 'MPL 2.0':'MPL-2.0', + 'MPL V2': 'MPL-2.0', + 'MPL v2': 'MPL-2.0', + 'MPL v2.0': 'MPL-2.0', + 'MPL': 'MPL-2.0', + 'MPL-2': 'MPL-2.0', + 'MPL/2.0': 'MPL-2.0', + 'MPL2': 'MPL-2.0', + 'MPL2.0': 'MPL-2.0', + 'MPLV2': 'MPL-2.0', + 'MPLv2': 'MPL-2.0', + 'MPLv2.0': 'MPL-2.0', + 'MTI': 'MIT', + 'MiT': 'MIT', + 'Mit': 'MIT', + 'Mozilla Public License 1.1': 'MPL-1.1', + 'Mozilla Public License 2.0': 'MPL-2.0', + 'Mozilla Public License version 2': 'MPL-2.0', + 'Mozilla Public License': 'MPL-2.0', + 'Mozilla Public License, v. 2.0': 'MPL-2.0', + 'Mozilla Public License, version 2.0': 'MPL-2.0', + 'Public Domain (UNLISCENSE)': 'Unlicense', + 'Public Domain (Unlicense)': 'Unlicense', + 'Public Domain ': 'Unlicense', + 'Public domain(unlicense)': 'Unlicense', + 'Public-domain (Unlicense)': 'Unlicense', + 'Standard 3-clause BSD': 'BSD-3-Clause', + 'The Unlicense': 'Unlicense', + 'UNLICENSE': 'Unlicense', + 'UNLICENSED': 'Unlicense', + 'UNLICNSE': 'Unlicense', + 'Unlicence': 'Unlicense', + 'Unlicense (http://unlicense.org/)': 'Unlicense', + 'Unlicense (see http://unlicense.org/)': 'Unlicense', + 'Unlicense': 'Unlicense', + 'Unlicensed': 'Unlicense', + 'WTF': 'WTFPL', + 'WTFGPL': 'WTFPL', + 'WTFPL 2': 'WTFPL', + 'WTFPL ': 'WTFPL', + 'WTFPLv2': 'WTFPL', + 'WTHPL v1.0.0': 'WTFPL', + 'Wtfpl (wtfpl.net)': 'WTFPL', + 'Wtfpl': 'WTFPL', + 'ZLIB': 'Zlib', + 'Zlib': 'Zlib', + 'Zlib/libpng': 'Zlib', + 'mit':'MIT', + '© 2014 WTFPL – Do What the Fuck You Want to Public License.': 'WTFPL' +}; + +test('examples', function(test) { + Object.keys(examples) + .forEach(function(input) { + var corrected = examples[input]; + test.test(input, function(test) { + test.equal( + correct(input), + corrected, + 'corrects "' + input + '" to "' + corrected + '"' + ); + if (corrected !== null) { + test.ok( + valid(corrected), + '"' + corrected + '" is a valid SPDX identifier' + ); + } + test.end(); + }); + }); + test.end(); +}); diff --git a/nodejs-spdx-correct.spec b/nodejs-spdx-correct.spec new file mode 100644 index 0000000..3aed291 --- /dev/null +++ b/nodejs-spdx-correct.spec @@ -0,0 +1,48 @@ +%{?nodejs_find_provides_and_requires} +%global packagename spdx-correct +%global enable_tests 1 +Name: nodejs-spdx-correct +Version: 1.0.2 +Release: 1 +Summary: Correct invalid SPDX identifiers +License: ASL 2.0 +URL: https://github.com/jslicense/spdx-correct.js +Source0: https://registry.npmjs.org/spdx-correct/-/spdx-correct-%{version}.tgz +Source1: https://raw.githubusercontent.com/jslicense/spdx-correct.js/v%{version}/examples.test.js +ExclusiveArch: %{nodejs_arches} noarch +BuildArch: noarch +BuildRequires: nodejs-packaging +%if 0%{?enable_tests} +BuildRequires: npm(tape) npm(spdx-expression-parse) +%endif +%description +correct invalid SPDX identifiers + +%prep +%setup -q -n package +cp -p %{SOURCE1} . + +%build + +%install +mkdir -p %{buildroot}%{nodejs_sitelib}/%{packagename} +cp -pr package.json *.js \ + %{buildroot}%{nodejs_sitelib}/%{packagename} +%nodejs_symlink_deps + +%check +%nodejs_symlink_deps --check +%{__nodejs} -e 'require("./")' +%if 0%{?enable_tests} +%__nodejs examples.test.js +%endif + +%files +%{!?_licensedir:%global license %doc} +%doc *.md +%license LICENSE +%{nodejs_sitelib}/%{packagename} + +%changelog +* Wed Aug 12 2020 zhanghua - 1.0.2-1 +- package init diff --git a/nodejs-spdx-correct.yaml b/nodejs-spdx-correct.yaml new file mode 100644 index 0000000..864fbac --- /dev/null +++ b/nodejs-spdx-correct.yaml @@ -0,0 +1,4 @@ +version_control: github +src_repo: jslicense/spdx-correct.js +tag_pattern: "^v" +seperator: "." diff --git a/spdx-correct-1.0.2.tgz b/spdx-correct-1.0.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9ef530495cac8cd467126a33eb4b126dcd089552 GIT binary patch literal 5319 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