@@ -146,7 +146,7 @@ def walk_npm(cls, resource, codebase, depth=0):
146146 yield subchild
147147
148148
149- def get_urls (namespace , name , version ):
149+ def get_urls (namespace , name , version , ** kwargs ):
150150 return dict (
151151 repository_homepage_url = npm_homepage_url (namespace , name , registry = 'https://www.npmjs.com/package' ),
152152 repository_download_url = npm_download_url (namespace , name , version , registry = 'https://registry.npmjs.org' ),
@@ -163,13 +163,10 @@ class NpmPackageJsonHandler(BaseNpmHandler):
163163 documentation_url = 'https://docs.npmjs.com/cli/v8/configuring-npm/package-json'
164164
165165 @classmethod
166- def parse (cls , location ):
167- with io .open (location , encoding = 'utf-8' ) as loc :
168- package_data = json .load (loc )
169-
170- name = package_data .get ('name' )
171- version = package_data .get ('version' )
172- homepage_url = package_data .get ('homepage' , '' )
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' , '' )
173170
174171 # a package.json without name and version can be a private package
175172
@@ -188,11 +185,11 @@ def parse(cls, location):
188185 namespace = namespace or None ,
189186 name = name ,
190187 version = version or None ,
191- description = package_data .get ('description' , '' ).strip () or None ,
188+ description = json_data .get ('description' , '' ).strip () or None ,
192189 homepage_url = homepage_url ,
193190 ** urls ,
194191 )
195- vcs_revision = package_data .get ('gitHead' ) or None
192+ vcs_revision = json_data .get ('gitHead' ) or None
196193
197194 # mapping of top level package.json items to a function accepting as
198195 # arguments the package.json element value and returning an iterable of (key,
@@ -214,7 +211,7 @@ def parse(cls, location):
214211 ]
215212
216213 for source , func in field_mappers :
217- value = package_data .get (source ) or None
214+ value = json_data .get (source ) or None
218215 if value :
219216 if isinstance (value , str ):
220217 value = value .strip ()
@@ -226,14 +223,21 @@ def parse(cls, location):
226223 package .download_url = npm_download_url (package .namespace , package .name , package .version )
227224
228225 # licenses are a tad special with many different data structures
229- lic = package_data .get ('license' )
230- lics = package_data .get ('licenses' )
226+ lic = json_data .get ('license' )
227+ lics = json_data .get ('licenses' )
231228 package = licenses_mapper (lic , lics , package )
232229
233230 if not package .license_expression and package .declared_license :
234231 package .license_expression = compute_normalized_license (package .declared_license )
235232
236- yield package
233+ return package
234+
235+ @classmethod
236+ def parse (cls , location ):
237+ with io .open (location , encoding = 'utf-8' ) as loc :
238+ json_data = json .load (loc )
239+
240+ yield cls ._parse (json_data )
237241
238242 @classmethod
239243 def compute_normalized_license (cls , package ):
0 commit comments