diff --git a/src/packagedcode/npm.py b/src/packagedcode/npm.py index 0532d08694e..7618e830c19 100644 --- a/src/packagedcode/npm.py +++ b/src/packagedcode/npm.py @@ -532,7 +532,9 @@ def _parse(cls, json_data, package_only=False): namespace, name = split_scoped_package_name(name) - is_private = json_data.get('private') or False + is_private = False + if json_data.get('private'): + is_private = True if is_private: urls = {} else: diff --git a/tests/packagedcode/data/npm/private/react-devtools-fusebox.package-expected.json b/tests/packagedcode/data/npm/private/react-devtools-fusebox.package-expected.json new file mode 100644 index 00000000000..40ad99a3de5 --- /dev/null +++ b/tests/packagedcode/data/npm/private/react-devtools-fusebox.package-expected.json @@ -0,0 +1,158 @@ +[ + { + "type": "npm", + "namespace": null, + "name": "react-devtools-fusebox", + "version": "0.0.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/react-devtools-fusebox/-/react-devtools-fusebox-0.0.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "matches": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "from_file": null, + "start_line": 1, + "end_line": 1, + "matcher": "1-spdx-id", + "score": 100.0, + "matched_length": 1, + "match_coverage": 100.0, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "- MIT\n", + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": true, + "is_virtual": false, + "extra_data": {}, + "dependencies": [ + { + "purl": "pkg:npm/buffer", + "extracted_requirement": "^6.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:npm/cross-env", + "extracted_requirement": "^7.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:npm/css-loader", + "extracted_requirement": "^6.9.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:npm/mini-css-extract-plugin", + "extracted_requirement": "^2.7.7", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:npm/process", + "extracted_requirement": "^0.11.10", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:npm/webpack", + "extracted_requirement": "^5.82.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:npm/webpack-cli", + "extracted_requirement": "^5.1.1", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:npm/workerize-loader", + "extracted_requirement": "^2.0.2", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": null, + "repository_download_url": null, + "api_data_url": null, + "datasource_id": "npm_package_json", + "purl": "pkg:npm/react-devtools-fusebox@0.0.0" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/npm/private/react-devtools-fusebox.package.json b/tests/packagedcode/data/npm/private/react-devtools-fusebox.package.json new file mode 100644 index 00000000000..bf5456d4cda --- /dev/null +++ b/tests/packagedcode/data/npm/private/react-devtools-fusebox.package.json @@ -0,0 +1,23 @@ +{ + "name": "react-devtools-fusebox", + "version": "0.0.0", + "private": "true", + "license": "MIT", + "files": ["dist"], + "scripts": { + "build:frontend:copy-types": "cp src/*.d.ts dist/", + "build:frontend:local": "cross-env NODE_ENV=development webpack --config webpack.config.frontend.js && yarn build:frontend:copy-types", + "build:frontend": "cross-env NODE_ENV=production webpack --config webpack.config.frontend.js && yarn build:frontend:copy-types", + "build": "yarn build:frontend" + }, + "devDependencies": { + "buffer": "^6.0.3", + "cross-env": "^7.0.3", + "css-loader": "^6.9.1", + "mini-css-extract-plugin": "^2.7.7", + "process": "^0.11.10", + "webpack": "^5.82.1", + "webpack-cli": "^5.1.1", + "workerize-loader": "^2.0.2" + } +} diff --git a/tests/packagedcode/test_npm.py b/tests/packagedcode/test_npm.py index ea4b78ed413..0be0bfe0ca1 100644 --- a/tests/packagedcode/test_npm.py +++ b/tests/packagedcode/test_npm.py @@ -246,6 +246,13 @@ def test_parse_package_json_with_resolutions(self): packages = npm.NpmPackageJsonHandler.parse(test_file) self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + def test_parse_package_json_is_private(self): + test_file = self.get_test_loc('npm/private/react-devtools-fusebox.package.json') + expected_loc = self.get_test_loc( + 'npm/private/react-devtools-fusebox.package-expected.json') + packages = npm.NpmPackageJsonHandler.parse(test_file) + self.check_packages_data(packages, expected_loc, regen=REGEN_TEST_FIXTURES) + def test_is_datafile_package_lock_json_v1(self): test_file = self.get_test_loc('npm/package-lock-v1/package-lock.json') assert npm.NpmPackageLockJsonHandler.is_datafile(test_file)