@@ -163,95 +163,85 @@ class NpmPackageJsonHandler(BaseNpmHandler):
163
163
documentation_url = 'https://docs.npmjs.com/cli/v8/configuring-npm/package-json'
164
164
165
165
@classmethod
166
- def parse (cls , location ):
167
- with io .open (location , encoding = 'utf-8' ) as loc :
168
- package_data = json .load (loc )
166
+ def _parse (cls , json_data ):
167
+ name = json_data .get ('name' )
168
+ version = json_data .get ('version' )
169
+ homepage_url = json_data .get ('homepage' , '' )
170
+
171
+ # a package.json without name and version can be a private package
172
+
173
+ if homepage_url and isinstance (homepage_url , list ):
174
+ # TODO: should we keep other URLs
175
+ homepage_url = homepage_url [0 ]
176
+ homepage_url = homepage_url .strip () or None
177
+
178
+ namespace , name = split_scoped_package_name (name )
169
179
170
- yield parse_npm_package_json (
171
- package_data ,
180
+ urls = get_urls ( namespace , name , version )
181
+ package = models . PackageData (
172
182
datasource_id = cls .datasource_id ,
173
- default_package_type = cls .default_package_type ,
174
- default_primary_language = cls .default_primary_language
183
+ type = cls .default_package_type ,
184
+ primary_language = cls .default_primary_language ,
185
+ namespace = namespace or None ,
186
+ name = name ,
187
+ version = version or None ,
188
+ description = json_data .get ('description' , '' ).strip () or None ,
189
+ homepage_url = homepage_url ,
190
+ ** urls ,
175
191
)
192
+ vcs_revision = json_data .get ('gitHead' ) or None
193
+
194
+ # mapping of top level package.json items to a function accepting as
195
+ # arguments the package.json element value and returning an iterable of (key,
196
+ # values) to update on a package
197
+ field_mappers = [
198
+ ('author' , partial (party_mapper , party_type = 'author' )),
199
+ ('contributors' , partial (party_mapper , party_type = 'contributor' )),
200
+ ('maintainers' , partial (party_mapper , party_type = 'maintainer' )),
201
+
202
+ ('dependencies' , partial (deps_mapper , field_name = 'dependencies' )),
203
+ ('devDependencies' , partial (deps_mapper , field_name = 'devDependencies' )),
204
+ ('peerDependencies' , partial (deps_mapper , field_name = 'peerDependencies' )),
205
+ ('optionalDependencies' , partial (deps_mapper , field_name = 'optionalDependencies' )),
206
+ ('bundledDependencies' , bundle_deps_mapper ),
207
+ ('repository' , partial (vcs_repository_mapper , vcs_revision = vcs_revision )),
208
+ ('keywords' , keywords_mapper ,),
209
+ ('bugs' , bugs_mapper ),
210
+ ('dist' , dist_mapper ),
211
+ ]
212
+
213
+ for source , func in field_mappers :
214
+ value = json_data .get (source ) or None
215
+ if value :
216
+ if isinstance (value , str ):
217
+ value = value .strip ()
218
+ if value :
219
+ func (value , package )
176
220
177
- @ classmethod
178
- def compute_normalized_license ( cls , package ):
179
- return compute_normalized_license (package .declared_license )
221
+ if not package . download_url :
222
+ # Only add a synthetic download URL if there is none from the dist mapping.
223
+ package . download_url = npm_download_url (package .namespace , package . name , package . version )
180
224
225
+ # licenses are a tad special with many different data structures
226
+ lic = json_data .get ('license' )
227
+ lics = json_data .get ('licenses' )
228
+ package = licenses_mapper (lic , lics , package )
181
229
182
- def parse_npm_package_json (
183
- package_data ,
184
- datasource_id = 'npm_package_json' ,
185
- default_package_type = 'npm' ,
186
- default_primary_language = 'Javascript'
187
- ):
188
- name = package_data .get ('name' )
189
- version = package_data .get ('version' )
190
- homepage_url = package_data .get ('homepage' , '' )
191
-
192
- # a package.json without name and version can be a private package
193
-
194
- if homepage_url and isinstance (homepage_url , list ):
195
- # TODO: should we keep other URLs
196
- homepage_url = homepage_url [0 ]
197
- homepage_url = homepage_url .strip () or None
198
-
199
- namespace , name = split_scoped_package_name (name )
200
-
201
- urls = get_urls (namespace , name , version )
202
- package = models .PackageData (
203
- datasource_id = datasource_id ,
204
- type = default_package_type ,
205
- primary_language = default_primary_language ,
206
- namespace = namespace or None ,
207
- name = name ,
208
- version = version or None ,
209
- description = package_data .get ('description' , '' ).strip () or None ,
210
- homepage_url = homepage_url ,
211
- ** urls ,
212
- )
213
- vcs_revision = package_data .get ('gitHead' ) or None
214
-
215
- # mapping of top level package.json items to a function accepting as
216
- # arguments the package.json element value and returning an iterable of (key,
217
- # values) to update on a package
218
- field_mappers = [
219
- ('author' , partial (party_mapper , party_type = 'author' )),
220
- ('contributors' , partial (party_mapper , party_type = 'contributor' )),
221
- ('maintainers' , partial (party_mapper , party_type = 'maintainer' )),
222
-
223
- ('dependencies' , partial (deps_mapper , field_name = 'dependencies' )),
224
- ('devDependencies' , partial (deps_mapper , field_name = 'devDependencies' )),
225
- ('peerDependencies' , partial (deps_mapper , field_name = 'peerDependencies' )),
226
- ('optionalDependencies' , partial (deps_mapper , field_name = 'optionalDependencies' )),
227
- ('bundledDependencies' , bundle_deps_mapper ),
228
- ('repository' , partial (vcs_repository_mapper , vcs_revision = vcs_revision )),
229
- ('keywords' , keywords_mapper ,),
230
- ('bugs' , bugs_mapper ),
231
- ('dist' , dist_mapper ),
232
- ]
233
-
234
- for source , func in field_mappers :
235
- value = package_data .get (source ) or None
236
- if value :
237
- if isinstance (value , str ):
238
- value = value .strip ()
239
- if value :
240
- func (value , package )
230
+ if not package .license_expression and package .declared_license :
231
+ package .license_expression = compute_normalized_license (package .declared_license )
241
232
242
- if not package .download_url :
243
- # Only add a synthetic download URL if there is none from the dist mapping.
244
- package .download_url = npm_download_url (package .namespace , package .name , package .version )
233
+ return package
245
234
246
- # licenses are a tad special with many different data structures
247
- lic = package_data . get ( 'license' )
248
- lics = package_data . get ( 'licenses' )
249
- package = licenses_mapper ( lic , lics , package )
235
+ @ classmethod
236
+ def parse ( cls , location ):
237
+ with io . open ( location , encoding = 'utf-8' ) as loc :
238
+ json_data = json . load ( loc )
250
239
251
- if not package .license_expression and package .declared_license :
252
- package .license_expression = compute_normalized_license (package .declared_license )
240
+ yield cls ._parse (json_data )
253
241
254
- return package
242
+ @classmethod
243
+ def compute_normalized_license (cls , package ):
244
+ return compute_normalized_license (package .declared_license )
255
245
256
246
257
247
class BaseNpmLockHandler (BaseNpmHandler ):
0 commit comments