update
This commit is contained in:
4
package/node_modules/spdx-expression-parse/AUTHORS
generated
vendored
Normal file
4
package/node_modules/spdx-expression-parse/AUTHORS
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
C. Scott Ananian <cscott@cscott.net> (http://cscott.net)
|
||||
Kyle E. Mitchell <kyle@kemitchell.com> (https://kemitchell.com)
|
||||
Shinnosuke Watanabe <snnskwtnb@gmail.com>
|
||||
Antoine Motet <antoine.motet@gmail.com>
|
22
package/node_modules/spdx-expression-parse/LICENSE
generated
vendored
Normal file
22
package/node_modules/spdx-expression-parse/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2015 Kyle E. Mitchell & other authors listed in AUTHORS
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
8
package/node_modules/spdx-expression-parse/index.js
generated
vendored
Normal file
8
package/node_modules/spdx-expression-parse/index.js
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
'use strict'
|
||||
|
||||
var scan = require('./scan')
|
||||
var parse = require('./parse')
|
||||
|
||||
module.exports = function (source) {
|
||||
return parse(scan(source))
|
||||
}
|
39
package/node_modules/spdx-expression-parse/package.json
generated
vendored
Normal file
39
package/node_modules/spdx-expression-parse/package.json
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"name": "spdx-expression-parse",
|
||||
"description": "parse SPDX license expressions",
|
||||
"version": "4.0.0",
|
||||
"author": "Kyle E. Mitchell <kyle@kemitchell.com> (https://kemitchell.com)",
|
||||
"files": [
|
||||
"AUTHORS",
|
||||
"index.js",
|
||||
"parse.js",
|
||||
"scan.js"
|
||||
],
|
||||
"dependencies": {
|
||||
"spdx-exceptions": "^2.1.0",
|
||||
"spdx-license-ids": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"defence-cli": "^3.0.1",
|
||||
"replace-require-self": "^1.0.0",
|
||||
"standard": "^14.1.0"
|
||||
},
|
||||
"keywords": [
|
||||
"SPDX",
|
||||
"law",
|
||||
"legal",
|
||||
"license",
|
||||
"metadata",
|
||||
"package",
|
||||
"package.json",
|
||||
"standards"
|
||||
],
|
||||
"license": "MIT",
|
||||
"repository": "jslicense/spdx-expression-parse.js",
|
||||
"scripts": {
|
||||
"lint": "standard",
|
||||
"test:readme": "defence -i javascript README.md | replace-require-self | node",
|
||||
"test:suite": "node test.js",
|
||||
"test": "npm run test:suite && npm run test:readme"
|
||||
}
|
||||
}
|
138
package/node_modules/spdx-expression-parse/parse.js
generated
vendored
Normal file
138
package/node_modules/spdx-expression-parse/parse.js
generated
vendored
Normal file
@@ -0,0 +1,138 @@
|
||||
'use strict'
|
||||
|
||||
// The ABNF grammar in the spec is totally ambiguous.
|
||||
//
|
||||
// This parser follows the operator precedence defined in the
|
||||
// `Order of Precedence and Parentheses` section.
|
||||
|
||||
module.exports = function (tokens) {
|
||||
var index = 0
|
||||
|
||||
function hasMore () {
|
||||
return index < tokens.length
|
||||
}
|
||||
|
||||
function token () {
|
||||
return hasMore() ? tokens[index] : null
|
||||
}
|
||||
|
||||
function next () {
|
||||
if (!hasMore()) {
|
||||
throw new Error()
|
||||
}
|
||||
index++
|
||||
}
|
||||
|
||||
function parseOperator (operator) {
|
||||
var t = token()
|
||||
if (t && t.type === 'OPERATOR' && operator === t.string) {
|
||||
next()
|
||||
return t.string
|
||||
}
|
||||
}
|
||||
|
||||
function parseWith () {
|
||||
if (parseOperator('WITH')) {
|
||||
var t = token()
|
||||
if (t && t.type === 'EXCEPTION') {
|
||||
next()
|
||||
return t.string
|
||||
}
|
||||
throw new Error('Expected exception after `WITH`')
|
||||
}
|
||||
}
|
||||
|
||||
function parseLicenseRef () {
|
||||
// TODO: Actually, everything is concatenated into one string
|
||||
// for backward-compatibility but it could be better to return
|
||||
// a nice structure.
|
||||
var begin = index
|
||||
var string = ''
|
||||
var t = token()
|
||||
if (t.type === 'DOCUMENTREF') {
|
||||
next()
|
||||
string += 'DocumentRef-' + t.string + ':'
|
||||
if (!parseOperator(':')) {
|
||||
throw new Error('Expected `:` after `DocumentRef-...`')
|
||||
}
|
||||
}
|
||||
t = token()
|
||||
if (t.type === 'LICENSEREF') {
|
||||
next()
|
||||
string += 'LicenseRef-' + t.string
|
||||
return { license: string }
|
||||
}
|
||||
index = begin
|
||||
}
|
||||
|
||||
function parseLicense () {
|
||||
var t = token()
|
||||
if (t && t.type === 'LICENSE') {
|
||||
next()
|
||||
var node = { license: t.string }
|
||||
if (parseOperator('+')) {
|
||||
node.plus = true
|
||||
}
|
||||
var exception = parseWith()
|
||||
if (exception) {
|
||||
node.exception = exception
|
||||
}
|
||||
return node
|
||||
}
|
||||
}
|
||||
|
||||
function parseParenthesizedExpression () {
|
||||
var left = parseOperator('(')
|
||||
if (!left) {
|
||||
return
|
||||
}
|
||||
|
||||
var expr = parseExpression()
|
||||
|
||||
if (!parseOperator(')')) {
|
||||
throw new Error('Expected `)`')
|
||||
}
|
||||
|
||||
return expr
|
||||
}
|
||||
|
||||
function parseAtom () {
|
||||
return (
|
||||
parseParenthesizedExpression() ||
|
||||
parseLicenseRef() ||
|
||||
parseLicense()
|
||||
)
|
||||
}
|
||||
|
||||
function makeBinaryOpParser (operator, nextParser) {
|
||||
return function parseBinaryOp () {
|
||||
var left = nextParser()
|
||||
if (!left) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!parseOperator(operator)) {
|
||||
return left
|
||||
}
|
||||
|
||||
var right = parseBinaryOp()
|
||||
if (!right) {
|
||||
throw new Error('Expected expression')
|
||||
}
|
||||
return {
|
||||
left: left,
|
||||
conjunction: operator.toLowerCase(),
|
||||
right: right
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var parseAnd = makeBinaryOpParser('AND', parseAtom)
|
||||
var parseExpression = makeBinaryOpParser('OR', parseAnd)
|
||||
|
||||
var node = parseExpression()
|
||||
if (!node || hasMore()) {
|
||||
throw new Error('Syntax error')
|
||||
}
|
||||
return node
|
||||
}
|
131
package/node_modules/spdx-expression-parse/scan.js
generated
vendored
Normal file
131
package/node_modules/spdx-expression-parse/scan.js
generated
vendored
Normal file
@@ -0,0 +1,131 @@
|
||||
'use strict'
|
||||
|
||||
var licenses = []
|
||||
.concat(require('spdx-license-ids'))
|
||||
.concat(require('spdx-license-ids/deprecated'))
|
||||
var exceptions = require('spdx-exceptions')
|
||||
|
||||
module.exports = function (source) {
|
||||
var index = 0
|
||||
|
||||
function hasMore () {
|
||||
return index < source.length
|
||||
}
|
||||
|
||||
// `value` can be a regexp or a string.
|
||||
// If it is recognized, the matching source string is returned and
|
||||
// the index is incremented. Otherwise `undefined` is returned.
|
||||
function read (value) {
|
||||
if (value instanceof RegExp) {
|
||||
var chars = source.slice(index)
|
||||
var match = chars.match(value)
|
||||
if (match) {
|
||||
index += match[0].length
|
||||
return match[0]
|
||||
}
|
||||
} else {
|
||||
if (source.indexOf(value, index) === index) {
|
||||
index += value.length
|
||||
return value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function skipWhitespace () {
|
||||
read(/[ ]*/)
|
||||
}
|
||||
|
||||
function operator () {
|
||||
var string
|
||||
var possibilities = [/^WITH/i, /^AND/i, /^OR/i, '(', ')', ':', '+']
|
||||
for (var i = 0; i < possibilities.length; i++) {
|
||||
string = read(possibilities[i])
|
||||
if (string) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (string === '+' && index > 1 && source[index - 2] === ' ') {
|
||||
throw new Error('Space before `+`')
|
||||
}
|
||||
|
||||
return string && {
|
||||
type: 'OPERATOR',
|
||||
string: string.toUpperCase()
|
||||
}
|
||||
}
|
||||
|
||||
function idstring () {
|
||||
return read(/[A-Za-z0-9-.]+/)
|
||||
}
|
||||
|
||||
function expectIdstring () {
|
||||
var string = idstring()
|
||||
if (!string) {
|
||||
throw new Error('Expected idstring at offset ' + index)
|
||||
}
|
||||
return string
|
||||
}
|
||||
|
||||
function documentRef () {
|
||||
if (read('DocumentRef-')) {
|
||||
var string = expectIdstring()
|
||||
return { type: 'DOCUMENTREF', string: string }
|
||||
}
|
||||
}
|
||||
|
||||
function licenseRef () {
|
||||
if (read('LicenseRef-')) {
|
||||
var string = expectIdstring()
|
||||
return { type: 'LICENSEREF', string: string }
|
||||
}
|
||||
}
|
||||
|
||||
function identifier () {
|
||||
var begin = index
|
||||
var string = idstring()
|
||||
|
||||
if (licenses.indexOf(string) !== -1) {
|
||||
return {
|
||||
type: 'LICENSE',
|
||||
string: string
|
||||
}
|
||||
} else if (exceptions.indexOf(string) !== -1) {
|
||||
return {
|
||||
type: 'EXCEPTION',
|
||||
string: string
|
||||
}
|
||||
}
|
||||
|
||||
index = begin
|
||||
}
|
||||
|
||||
// Tries to read the next token. Returns `undefined` if no token is
|
||||
// recognized.
|
||||
function parseToken () {
|
||||
// Ordering matters
|
||||
return (
|
||||
operator() ||
|
||||
documentRef() ||
|
||||
licenseRef() ||
|
||||
identifier()
|
||||
)
|
||||
}
|
||||
|
||||
var tokens = []
|
||||
while (hasMore()) {
|
||||
skipWhitespace()
|
||||
if (!hasMore()) {
|
||||
break
|
||||
}
|
||||
|
||||
var token = parseToken()
|
||||
if (!token) {
|
||||
throw new Error('Unexpected `' + source[index] +
|
||||
'` at offset ' + index)
|
||||
}
|
||||
|
||||
tokens.push(token)
|
||||
}
|
||||
return tokens
|
||||
}
|
Reference in New Issue
Block a user