From 69b5100406af0b82262d626e9aef450eddeee8d9 Mon Sep 17 00:00:00 2001 From: wangchong1995924 <15229716099@163.com> Date: Fri, 21 Aug 2020 11:11:08 +0800 Subject: [PATCH 1/3] package init --- nodejs-spdx-expression-parse.spec | 4 ++++ nodejs-spdx-expression-parse.yaml | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 nodejs-spdx-expression-parse.spec create mode 100644 nodejs-spdx-expression-parse.yaml diff --git a/nodejs-spdx-expression-parse.spec b/nodejs-spdx-expression-parse.spec new file mode 100644 index 0000000..225b435 --- /dev/null +++ b/nodejs-spdx-expression-parse.spec @@ -0,0 +1,4 @@ + +%changelog +* Fri Aug 21 2020 wangchong - -1 +- package init diff --git a/nodejs-spdx-expression-parse.yaml b/nodejs-spdx-expression-parse.yaml new file mode 100644 index 0000000..4e5a19c --- /dev/null +++ b/nodejs-spdx-expression-parse.yaml @@ -0,0 +1,4 @@ +version-control: github +src_repo: sctp/lksctp-tools +tag_prefix: ^v +seperator: . From 77e3850c8159dc1c565412e3b31dd3b577a153a6 Mon Sep 17 00:00:00 2001 From: wangchong1995924 <15229716099@163.com> Date: Fri, 21 Aug 2020 15:43:04 +0800 Subject: [PATCH 2/3] package init --- generate-parser.js | 87 ++++++++++++++++++++++++++++++ nodejs-spdx-expression-parse.spec | 49 ++++++++++++++++- nodejs-spdx-expression-parse.yaml | 2 +- spdx-expression-parse-1.0.2.tgz | Bin 0 -> 9344 bytes 4 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 generate-parser.js create mode 100644 spdx-expression-parse-1.0.2.tgz diff --git a/generate-parser.js b/generate-parser.js new file mode 100644 index 0000000..bcb2e4e --- /dev/null +++ b/generate-parser.js @@ -0,0 +1,87 @@ +var Generator = require('jison').Generator +var options = { + type: 'slr', + moduleType: 'commonjs', + moduleName: 'spdxparse' } + +var words = [ 'AND', 'OR', 'WITH' ] + +var quote = function(argument) { + return '\'' + argument + '\'' } + +var regexEscape = function(s) { + return s.replace(/[\^\\$*+?.()|{}\[\]\/]/g, '\\$&') } + +var handleLicensesAndExceptions = function() { + var ids = require('spdx-license-ids') + var exceptions = require('spdx-exceptions') + + // Sort tokens longest-first (both license ids and exception strings) + var tokens = ids.concat(exceptions) + tokens.sort(function(a, b) { return ( b.length - a.length ) }) + return tokens.map(function(t) { + var type = ( (ids.indexOf(t) >= 0) ? 'LICENSE' : 'EXCEPTION' ) + return [ regexEscape(t), ( 'return ' + quote(type) ) ] }) } + +var grammar = { + lex: { + macros: { }, + rules: [ + [ '$', 'return ' + quote('EOS') ], + [ '\\s+', '/* skip whitespace */' ], + [ '\\+', 'return ' + quote('PLUS') ], + [ '\\(', 'return ' + quote('OPEN') ], + [ '\\)', 'return ' + quote('CLOSE') ], + [ ':', 'return ' + quote('COLON') ], + [ 'DocumentRef-([0-9A-Za-z-+.]+)', + 'return ' + quote('DOCUMENTREF') ], + [ 'LicenseRef-([0-9A-Za-z-+.]+)', + 'return ' + quote('LICENSEREF') ] ] + .concat(words.map(function(word) { + return [ word, 'return ' + quote(word) ] })) + .concat(handleLicensesAndExceptions()) }, + operators: [ + [ 'left', 'OR' ], + [ 'left', 'AND' ], + [ 'right', 'PLUS', 'WITH' ] ], + tokens: [ + 'CLOSE', + 'COLON', + 'EXCEPTION', + 'LICENSE', + 'LICENSEREF', + 'OPEN', + 'PLUS' ] + .concat(words) + .join(' '), + start: 'start', + bnf: { + start: [ + [ 'expression EOS', 'return $$ = $1' ] ], + simpleExpression: [ + [ 'LICENSE', + '$$ = { license: yytext }' ], + [ 'LICENSE PLUS', + '$$ = { license: $1, plus: true }' ], + [ 'LICENSEREF', + '$$ = { license: yytext }' ], + [ 'DOCUMENTREF COLON LICENSEREF', + '$$ = { license: yytext }' ] ], + expression: [ + [ 'simpleExpression', + '$$ = $1' ], + [ 'simpleExpression WITH EXCEPTION', + [ '$$ = { exception: $3 }', + '$$.license = $1.license', + 'if ($1.hasOwnProperty(\'plus\')) {', + ' $$.plus = $1.plus', + '}' ] + .join('\n') ], + [ 'expression AND expression', + '$$ = { conjunction: \'and\', left: $1, right: $3 }' ], + [ 'expression OR expression', + '$$ = { conjunction: \'or\', left: $1, right: $3 }' ], + [ 'OPEN expression CLOSE', + '$$ = $2' ] ] } } + +console.log(new Generator(grammar, options).generate()) diff --git a/nodejs-spdx-expression-parse.spec b/nodejs-spdx-expression-parse.spec index 225b435..2778bbf 100644 --- a/nodejs-spdx-expression-parse.spec +++ b/nodejs-spdx-expression-parse.spec @@ -1,4 +1,51 @@ +%{?nodejs_find_provides_and_requires} +%global packagename spdx-expression-parse +%global enable_tests 1 +Name: nodejs-spdx-expression-parse +Version: 1.0.2 +Release: 1 +Summary: Parse SPDX license expressions +License: MIT and CC-BY +URL: https://github.com/kemitchell/spdx-expression-parse.js.git +Source0: https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-%{version}.tgz +Source1: https://raw.githubusercontent.com/kemitchell/spdx-expression-parse.js/v%{version}/generate-parser.js +ExclusiveArch: %{nodejs_arches} noarch +BuildArch: noarch +BuildRequires: nodejs-packaging uglify-js npm(jison) npm(spdx-license-ids) +BuildRequires: npm(spdx-exceptions) +%if 0%{?enable_tests} +%endif +Requires: nodejs +%description +Parse SPDX license expressions + +%prep +%setup -q -n package +cp -p %{SOURCE1} . +rm parser.generated.js + +%build +%nodejs_symlink_deps --check +%__nodejs generate-parser.js | %{_bindir}/uglifyjs > parser.generated.js + +%install +mkdir -p %{buildroot}%{nodejs_sitelib}/%{packagename} +cp -pr package.json *.js \ + %{buildroot}%{nodejs_sitelib}/%{packagename} +%nodejs_symlink_deps + +%check +%{__nodejs} -e 'require("./")' +%if 0%{?enable_tests} +echo "There are no tests..." +%endif + +%files +%{!?_licensedir:%global license %doc} +%doc *.md +%license LICENSE +%{nodejs_sitelib}/%{packagename} %changelog -* Fri Aug 21 2020 wangchong - -1 +* Fri Aug 21 2020 wangchong - 1.0.2-1 - package init diff --git a/nodejs-spdx-expression-parse.yaml b/nodejs-spdx-expression-parse.yaml index 4e5a19c..7237a42 100644 --- a/nodejs-spdx-expression-parse.yaml +++ b/nodejs-spdx-expression-parse.yaml @@ -1,4 +1,4 @@ version-control: github -src_repo: sctp/lksctp-tools +src_repo: kemitchell/spdx-expression-parse.js tag_prefix: ^v seperator: . diff --git a/spdx-expression-parse-1.0.2.tgz b/spdx-expression-parse-1.0.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..32ed7918c048abc15a600919aab163b82786dd6a GIT binary patch literal 9344 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 Date: Fri, 21 Aug 2020 16:01:09 +0800 Subject: [PATCH 3/3] fix the warning --- generate-parser.js | 87 ------------------------------- nodejs-spdx-expression-parse.spec | 10 ++-- nodejs-spdx-expression-parse.yaml | 2 +- 3 files changed, 4 insertions(+), 95 deletions(-) delete mode 100644 generate-parser.js diff --git a/generate-parser.js b/generate-parser.js deleted file mode 100644 index bcb2e4e..0000000 --- a/generate-parser.js +++ /dev/null @@ -1,87 +0,0 @@ -var Generator = require('jison').Generator -var options = { - type: 'slr', - moduleType: 'commonjs', - moduleName: 'spdxparse' } - -var words = [ 'AND', 'OR', 'WITH' ] - -var quote = function(argument) { - return '\'' + argument + '\'' } - -var regexEscape = function(s) { - return s.replace(/[\^\\$*+?.()|{}\[\]\/]/g, '\\$&') } - -var handleLicensesAndExceptions = function() { - var ids = require('spdx-license-ids') - var exceptions = require('spdx-exceptions') - - // Sort tokens longest-first (both license ids and exception strings) - var tokens = ids.concat(exceptions) - tokens.sort(function(a, b) { return ( b.length - a.length ) }) - return tokens.map(function(t) { - var type = ( (ids.indexOf(t) >= 0) ? 'LICENSE' : 'EXCEPTION' ) - return [ regexEscape(t), ( 'return ' + quote(type) ) ] }) } - -var grammar = { - lex: { - macros: { }, - rules: [ - [ '$', 'return ' + quote('EOS') ], - [ '\\s+', '/* skip whitespace */' ], - [ '\\+', 'return ' + quote('PLUS') ], - [ '\\(', 'return ' + quote('OPEN') ], - [ '\\)', 'return ' + quote('CLOSE') ], - [ ':', 'return ' + quote('COLON') ], - [ 'DocumentRef-([0-9A-Za-z-+.]+)', - 'return ' + quote('DOCUMENTREF') ], - [ 'LicenseRef-([0-9A-Za-z-+.]+)', - 'return ' + quote('LICENSEREF') ] ] - .concat(words.map(function(word) { - return [ word, 'return ' + quote(word) ] })) - .concat(handleLicensesAndExceptions()) }, - operators: [ - [ 'left', 'OR' ], - [ 'left', 'AND' ], - [ 'right', 'PLUS', 'WITH' ] ], - tokens: [ - 'CLOSE', - 'COLON', - 'EXCEPTION', - 'LICENSE', - 'LICENSEREF', - 'OPEN', - 'PLUS' ] - .concat(words) - .join(' '), - start: 'start', - bnf: { - start: [ - [ 'expression EOS', 'return $$ = $1' ] ], - simpleExpression: [ - [ 'LICENSE', - '$$ = { license: yytext }' ], - [ 'LICENSE PLUS', - '$$ = { license: $1, plus: true }' ], - [ 'LICENSEREF', - '$$ = { license: yytext }' ], - [ 'DOCUMENTREF COLON LICENSEREF', - '$$ = { license: yytext }' ] ], - expression: [ - [ 'simpleExpression', - '$$ = $1' ], - [ 'simpleExpression WITH EXCEPTION', - [ '$$ = { exception: $3 }', - '$$.license = $1.license', - 'if ($1.hasOwnProperty(\'plus\')) {', - ' $$.plus = $1.plus', - '}' ] - .join('\n') ], - [ 'expression AND expression', - '$$ = { conjunction: \'and\', left: $1, right: $3 }' ], - [ 'expression OR expression', - '$$ = { conjunction: \'or\', left: $1, right: $3 }' ], - [ 'OPEN expression CLOSE', - '$$ = $2' ] ] } } - -console.log(new Generator(grammar, options).generate()) diff --git a/nodejs-spdx-expression-parse.spec b/nodejs-spdx-expression-parse.spec index 2778bbf..63e47ec 100644 --- a/nodejs-spdx-expression-parse.spec +++ b/nodejs-spdx-expression-parse.spec @@ -8,25 +8,21 @@ Summary: Parse SPDX license expressions License: MIT and CC-BY URL: https://github.com/kemitchell/spdx-expression-parse.js.git Source0: https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-%{version}.tgz -Source1: https://raw.githubusercontent.com/kemitchell/spdx-expression-parse.js/v%{version}/generate-parser.js ExclusiveArch: %{nodejs_arches} noarch BuildArch: noarch -BuildRequires: nodejs-packaging uglify-js npm(jison) npm(spdx-license-ids) -BuildRequires: npm(spdx-exceptions) +BuildRequires: nodejs-packaging uglify-js npm(jison) npm(spdx-license-ids) +BuildRequires: npm(spdx-exceptions) %if 0%{?enable_tests} %endif -Requires: nodejs +Requires: nodejs %description Parse SPDX license expressions %prep %setup -q -n package -cp -p %{SOURCE1} . -rm parser.generated.js %build %nodejs_symlink_deps --check -%__nodejs generate-parser.js | %{_bindir}/uglifyjs > parser.generated.js %install mkdir -p %{buildroot}%{nodejs_sitelib}/%{packagename} diff --git a/nodejs-spdx-expression-parse.yaml b/nodejs-spdx-expression-parse.yaml index 7237a42..ec5fce1 100644 --- a/nodejs-spdx-expression-parse.yaml +++ b/nodejs-spdx-expression-parse.yaml @@ -1,4 +1,4 @@ -version-control: github +version_control: github src_repo: kemitchell/spdx-expression-parse.js tag_prefix: ^v seperator: .