Merge pull request #926 from dangoor/dangoor/replace-other
Replace OTHER with a LicenseRef
This commit is contained in:
@@ -55,6 +55,16 @@ describe('satisfiesAny', () => {
|
|||||||
candidate: 'MIT OR ISC',
|
candidate: 'MIT OR ISC',
|
||||||
licenses: ['MiT'],
|
licenses: ['MiT'],
|
||||||
expected: false
|
expected: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'MIT AND OTHER',
|
||||||
|
licenses: ['MIT'],
|
||||||
|
expected: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'MIT OR OTHER',
|
||||||
|
licenses: ['MIT', 'LicenseRef-clearlydefined-OTHER'],
|
||||||
|
expected: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -130,6 +140,16 @@ describe('satisfiesAll', () => {
|
|||||||
candidate: 'MIT OR ISC',
|
candidate: 'MIT OR ISC',
|
||||||
licenses: ['MiT'],
|
licenses: ['MiT'],
|
||||||
expected: false
|
expected: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'MIT AND OTHER',
|
||||||
|
licenses: ['MIT'],
|
||||||
|
expected: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'MIT AND OTHER',
|
||||||
|
licenses: ['MIT', 'LicenseRef-clearlydefined-OTHER'],
|
||||||
|
expected: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -210,6 +230,16 @@ describe('satisfies', () => {
|
|||||||
candidate: '',
|
candidate: '',
|
||||||
allowList: ['BSD-3-Clause', 'ISC', 'MIT'],
|
allowList: ['BSD-3-Clause', 'ISC', 'MIT'],
|
||||||
expected: false
|
expected: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'MIT OR OTHER',
|
||||||
|
allowList: ['MIT', 'LicenseRef-clearlydefined-OTHER'],
|
||||||
|
expected: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: '(Apache-2.0 AND OTHER) OR (MIT AND OTHER)',
|
||||||
|
allowList: ['Apache-2.0', 'LicenseRef-clearlydefined-OTHER'],
|
||||||
|
expected: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -246,6 +276,10 @@ describe('isValid', () => {
|
|||||||
{
|
{
|
||||||
candidate: '',
|
candidate: '',
|
||||||
expected: false
|
expected: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'MIT AND OTHER',
|
||||||
|
expected: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
for (const unit of units) {
|
for (const unit of units) {
|
||||||
@@ -255,3 +289,38 @@ describe('isValid', () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('cleanInvalidSPDX', () => {
|
||||||
|
const units = [
|
||||||
|
{
|
||||||
|
candidate: 'MIT',
|
||||||
|
expected: 'MIT'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'OTHER',
|
||||||
|
expected: 'LicenseRef-clearlydefined-OTHER'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'LicenseRef-clearlydefined-OTHER',
|
||||||
|
expected: 'LicenseRef-clearlydefined-OTHER'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'OTHER AND MIT',
|
||||||
|
expected: 'LicenseRef-clearlydefined-OTHER AND MIT'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'MIT AND OTHER',
|
||||||
|
expected: 'MIT AND LicenseRef-clearlydefined-OTHER'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
candidate: 'MIT AND SomethingElse-OTHER',
|
||||||
|
expected: 'MIT AND SomethingElse-OTHER'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
for (const unit of units) {
|
||||||
|
const got: string = spdx.cleanInvalidSPDX(unit.candidate)
|
||||||
|
test(`should return ${unit.expected} for ("${unit.candidate}")`, () => {
|
||||||
|
expect(got).toBe(unit.expected)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|||||||
+24
-2
@@ -1380,7 +1380,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.isValid = exports.satisfiesAll = exports.satisfiesAny = exports.satisfies = void 0;
|
exports.cleanInvalidSPDX = exports.isValid = exports.satisfiesAll = exports.satisfiesAny = exports.satisfies = void 0;
|
||||||
const spdxlib = __importStar(__nccwpck_require__(1452));
|
const spdxlib = __importStar(__nccwpck_require__(1452));
|
||||||
const spdx_satisfies_1 = __importDefault(__nccwpck_require__(5131));
|
const spdx_satisfies_1 = __importDefault(__nccwpck_require__(5131));
|
||||||
const spdx_expression_parse_1 = __importDefault(__nccwpck_require__(3326));
|
const spdx_expression_parse_1 = __importDefault(__nccwpck_require__(3326));
|
||||||
@@ -1393,6 +1393,7 @@ const spdx_expression_parse_1 = __importDefault(__nccwpck_require__(3326));
|
|||||||
// accepts a pair of well-formed SPDX expressions. the
|
// accepts a pair of well-formed SPDX expressions. the
|
||||||
// candidate is tested against the constraint
|
// candidate is tested against the constraint
|
||||||
function satisfies(candidateExpr, allowList) {
|
function satisfies(candidateExpr, allowList) {
|
||||||
|
candidateExpr = cleanInvalidSPDX(candidateExpr);
|
||||||
try {
|
try {
|
||||||
return (0, spdx_satisfies_1.default)(candidateExpr, allowList);
|
return (0, spdx_satisfies_1.default)(candidateExpr, allowList);
|
||||||
}
|
}
|
||||||
@@ -1403,6 +1404,7 @@ function satisfies(candidateExpr, allowList) {
|
|||||||
exports.satisfies = satisfies;
|
exports.satisfies = satisfies;
|
||||||
// accepts an SPDX expression and a non-empty list of licenses (not expressions)
|
// accepts an SPDX expression and a non-empty list of licenses (not expressions)
|
||||||
function satisfiesAny(candidateExpr, licenses) {
|
function satisfiesAny(candidateExpr, licenses) {
|
||||||
|
candidateExpr = cleanInvalidSPDX(candidateExpr);
|
||||||
try {
|
try {
|
||||||
return spdxlib.satisfiesAny(candidateExpr, licenses);
|
return spdxlib.satisfiesAny(candidateExpr, licenses);
|
||||||
}
|
}
|
||||||
@@ -1413,6 +1415,7 @@ function satisfiesAny(candidateExpr, licenses) {
|
|||||||
exports.satisfiesAny = satisfiesAny;
|
exports.satisfiesAny = satisfiesAny;
|
||||||
// accepts an SPDX expression and a non-empty list of licenses (not expressions)
|
// accepts an SPDX expression and a non-empty list of licenses (not expressions)
|
||||||
function satisfiesAll(candidateExpr, licenses) {
|
function satisfiesAll(candidateExpr, licenses) {
|
||||||
|
candidateExpr = cleanInvalidSPDX(candidateExpr);
|
||||||
try {
|
try {
|
||||||
return spdxlib.satisfiesAll(candidateExpr, licenses);
|
return spdxlib.satisfiesAll(candidateExpr, licenses);
|
||||||
}
|
}
|
||||||
@@ -1423,6 +1426,7 @@ function satisfiesAll(candidateExpr, licenses) {
|
|||||||
exports.satisfiesAll = satisfiesAll;
|
exports.satisfiesAll = satisfiesAll;
|
||||||
// accepts any SPDX expression
|
// accepts any SPDX expression
|
||||||
function isValid(spdxExpr) {
|
function isValid(spdxExpr) {
|
||||||
|
spdxExpr = cleanInvalidSPDX(spdxExpr);
|
||||||
try {
|
try {
|
||||||
(0, spdx_expression_parse_1.default)(spdxExpr);
|
(0, spdx_expression_parse_1.default)(spdxExpr);
|
||||||
return true;
|
return true;
|
||||||
@@ -1432,6 +1436,13 @@ function isValid(spdxExpr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.isValid = isValid;
|
exports.isValid = isValid;
|
||||||
|
const replaceOtherRegex = /(?<![\w-])OTHER(?![\w-])/g;
|
||||||
|
// adjusts license expressions to not include the invalid `OTHER`
|
||||||
|
// which ClearlyDefined adds to license strings
|
||||||
|
function cleanInvalidSPDX(spdxExpr) {
|
||||||
|
return spdxExpr.replace(replaceOtherRegex, 'LicenseRef-clearlydefined-OTHER');
|
||||||
|
}
|
||||||
|
exports.cleanInvalidSPDX = cleanInvalidSPDX;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
@@ -50493,7 +50504,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.isValid = exports.satisfiesAll = exports.satisfiesAny = exports.satisfies = void 0;
|
exports.cleanInvalidSPDX = exports.isValid = exports.satisfiesAll = exports.satisfiesAny = exports.satisfies = void 0;
|
||||||
const spdxlib = __importStar(__nccwpck_require__(1452));
|
const spdxlib = __importStar(__nccwpck_require__(1452));
|
||||||
const spdx_satisfies_1 = __importDefault(__nccwpck_require__(5131));
|
const spdx_satisfies_1 = __importDefault(__nccwpck_require__(5131));
|
||||||
const spdx_expression_parse_1 = __importDefault(__nccwpck_require__(3326));
|
const spdx_expression_parse_1 = __importDefault(__nccwpck_require__(3326));
|
||||||
@@ -50506,6 +50517,7 @@ const spdx_expression_parse_1 = __importDefault(__nccwpck_require__(3326));
|
|||||||
// accepts a pair of well-formed SPDX expressions. the
|
// accepts a pair of well-formed SPDX expressions. the
|
||||||
// candidate is tested against the constraint
|
// candidate is tested against the constraint
|
||||||
function satisfies(candidateExpr, allowList) {
|
function satisfies(candidateExpr, allowList) {
|
||||||
|
candidateExpr = cleanInvalidSPDX(candidateExpr);
|
||||||
try {
|
try {
|
||||||
return (0, spdx_satisfies_1.default)(candidateExpr, allowList);
|
return (0, spdx_satisfies_1.default)(candidateExpr, allowList);
|
||||||
}
|
}
|
||||||
@@ -50516,6 +50528,7 @@ function satisfies(candidateExpr, allowList) {
|
|||||||
exports.satisfies = satisfies;
|
exports.satisfies = satisfies;
|
||||||
// accepts an SPDX expression and a non-empty list of licenses (not expressions)
|
// accepts an SPDX expression and a non-empty list of licenses (not expressions)
|
||||||
function satisfiesAny(candidateExpr, licenses) {
|
function satisfiesAny(candidateExpr, licenses) {
|
||||||
|
candidateExpr = cleanInvalidSPDX(candidateExpr);
|
||||||
try {
|
try {
|
||||||
return spdxlib.satisfiesAny(candidateExpr, licenses);
|
return spdxlib.satisfiesAny(candidateExpr, licenses);
|
||||||
}
|
}
|
||||||
@@ -50526,6 +50539,7 @@ function satisfiesAny(candidateExpr, licenses) {
|
|||||||
exports.satisfiesAny = satisfiesAny;
|
exports.satisfiesAny = satisfiesAny;
|
||||||
// accepts an SPDX expression and a non-empty list of licenses (not expressions)
|
// accepts an SPDX expression and a non-empty list of licenses (not expressions)
|
||||||
function satisfiesAll(candidateExpr, licenses) {
|
function satisfiesAll(candidateExpr, licenses) {
|
||||||
|
candidateExpr = cleanInvalidSPDX(candidateExpr);
|
||||||
try {
|
try {
|
||||||
return spdxlib.satisfiesAll(candidateExpr, licenses);
|
return spdxlib.satisfiesAll(candidateExpr, licenses);
|
||||||
}
|
}
|
||||||
@@ -50536,6 +50550,7 @@ function satisfiesAll(candidateExpr, licenses) {
|
|||||||
exports.satisfiesAll = satisfiesAll;
|
exports.satisfiesAll = satisfiesAll;
|
||||||
// accepts any SPDX expression
|
// accepts any SPDX expression
|
||||||
function isValid(spdxExpr) {
|
function isValid(spdxExpr) {
|
||||||
|
spdxExpr = cleanInvalidSPDX(spdxExpr);
|
||||||
try {
|
try {
|
||||||
(0, spdx_expression_parse_1.default)(spdxExpr);
|
(0, spdx_expression_parse_1.default)(spdxExpr);
|
||||||
return true;
|
return true;
|
||||||
@@ -50545,6 +50560,13 @@ function isValid(spdxExpr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.isValid = isValid;
|
exports.isValid = isValid;
|
||||||
|
const replaceOtherRegex = /(?<![\w-])OTHER(?![\w-])/g;
|
||||||
|
// adjusts license expressions to not include the invalid `OTHER`
|
||||||
|
// which ClearlyDefined adds to license strings
|
||||||
|
function cleanInvalidSPDX(spdxExpr) {
|
||||||
|
return spdxExpr.replace(replaceOtherRegex, 'LicenseRef-clearlydefined-OTHER');
|
||||||
|
}
|
||||||
|
exports.cleanInvalidSPDX = cleanInvalidSPDX;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
+12
@@ -12,6 +12,7 @@ import parse from 'spdx-expression-parse'
|
|||||||
// accepts a pair of well-formed SPDX expressions. the
|
// accepts a pair of well-formed SPDX expressions. the
|
||||||
// candidate is tested against the constraint
|
// candidate is tested against the constraint
|
||||||
export function satisfies(candidateExpr: string, allowList: string[]): boolean {
|
export function satisfies(candidateExpr: string, allowList: string[]): boolean {
|
||||||
|
candidateExpr = cleanInvalidSPDX(candidateExpr)
|
||||||
try {
|
try {
|
||||||
return spdxSatisfies(candidateExpr, allowList)
|
return spdxSatisfies(candidateExpr, allowList)
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
@@ -24,6 +25,7 @@ export function satisfiesAny(
|
|||||||
candidateExpr: string,
|
candidateExpr: string,
|
||||||
licenses: string[]
|
licenses: string[]
|
||||||
): boolean {
|
): boolean {
|
||||||
|
candidateExpr = cleanInvalidSPDX(candidateExpr)
|
||||||
try {
|
try {
|
||||||
return spdxlib.satisfiesAny(candidateExpr, licenses)
|
return spdxlib.satisfiesAny(candidateExpr, licenses)
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
@@ -36,6 +38,7 @@ export function satisfiesAll(
|
|||||||
candidateExpr: string,
|
candidateExpr: string,
|
||||||
licenses: string[]
|
licenses: string[]
|
||||||
): boolean {
|
): boolean {
|
||||||
|
candidateExpr = cleanInvalidSPDX(candidateExpr)
|
||||||
try {
|
try {
|
||||||
return spdxlib.satisfiesAll(candidateExpr, licenses)
|
return spdxlib.satisfiesAll(candidateExpr, licenses)
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
@@ -45,6 +48,7 @@ export function satisfiesAll(
|
|||||||
|
|
||||||
// accepts any SPDX expression
|
// accepts any SPDX expression
|
||||||
export function isValid(spdxExpr: string): boolean {
|
export function isValid(spdxExpr: string): boolean {
|
||||||
|
spdxExpr = cleanInvalidSPDX(spdxExpr)
|
||||||
try {
|
try {
|
||||||
parse(spdxExpr)
|
parse(spdxExpr)
|
||||||
return true
|
return true
|
||||||
@@ -52,3 +56,11 @@ export function isValid(spdxExpr: string): boolean {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const replaceOtherRegex = /(?<![\w-])OTHER(?![\w-])/g
|
||||||
|
|
||||||
|
// adjusts license expressions to not include the invalid `OTHER`
|
||||||
|
// which ClearlyDefined adds to license strings
|
||||||
|
export function cleanInvalidSPDX(spdxExpr: string): string {
|
||||||
|
return spdxExpr.replace(replaceOtherRegex, 'LicenseRef-clearlydefined-OTHER')
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user