@@ -238,7 +238,7 @@ def get_allof_constraints(cls, clause):
238238 return allof_constraints
239239
240240
241- def get_npm_version_constraint_for_tilde_and_caret (string , cls ):
241+ def get_npm_version_constraints_from_semver_npm_spec (string , cls ):
242242 """
243243 Return a VersionConstraint for the provided ``string``.
244244 """
@@ -254,7 +254,6 @@ def get_npm_version_constraint_for_tilde_and_caret(string, cls):
254254 anyof_constraints .extend (alloc )
255255 else :
256256 raise ValueError (f"Unknown clause type: { spec !r} " )
257-
258257 return anyof_constraints
259258
260259
@@ -289,39 +288,56 @@ def from_native(cls, string):
289288 )
290289
291290 constraints = []
292- comparator = ""
293291 vrc = cls .version_class
294292 # A constraint item can be a comparator or a version or a version with comparator
295293 # If it's empty continue
296294 # If it's in `vers_by_native_comparators`, append it with the comparator and continue
297295 # If it's a version, make version constraint from the version and use the comparator from the previous item and make comparator empty
298296 # If it's a version with comparator, use split_req to get version and comparator to form constraint and make comparator empty
299- for constraint_item in string .split (" " ):
300- if not constraint_item or constraint_item == "||" :
301- continue
302- if "" .join ([comparator , constraint_item ]) in cls .vers_by_native_comparators :
303- comparator = "" .join ([comparator , constraint_item ])
304- comparator = cls .vers_by_native_comparators [comparator ]
297+
298+ for range in string .split ("||" ):
299+ if " - " in range :
300+ constraints .extend (get_npm_version_constraints_from_semver_npm_spec (range , cls ))
305301 continue
306- if comparator :
307- constraint_item = constraint_item . lstrip ( "vV" )
308- constraints . append (
309- VersionConstraint ( comparator = comparator , version = vrc ( constraint_item ))
310- )
311- else :
312- if constraint_item . startswith ( "~" ) or constraint_item . startswith ( "^" ):
313- constraints . extend (
314- get_npm_version_constraint_for_tilde_and_caret ( constraint_item , cls )
315- )
316- else :
317- comparator , version_constraint = split_req (
318- constraint_item , cls . vers_by_native_comparators , default = "="
319- )
320- version_constraint = version_constraint .lstrip ("vV" )
302+ comparator = ""
303+ for constraint in range . split ( " " ):
304+ if not constraint :
305+ continue
306+ if "" . join ([ comparator , constraint ]) in cls . vers_by_native_comparators :
307+ comparator = "" . join ([ comparator , constraint ])
308+ comparator = cls . vers_by_native_comparators [ comparator ]
309+ continue
310+ if comparator :
311+ if ".x" in constraint :
312+ constraints . extend (
313+ get_npm_version_constraints_from_semver_npm_spec ( constraint , cls )
314+ )
315+ continue
316+ constraint = constraint .lstrip ("vV" )
321317 constraints .append (
322- VersionConstraint (comparator = comparator , version = vrc (version_constraint ))
318+ VersionConstraint (comparator = comparator , version = vrc (constraint ))
323319 )
324- comparator = ""
320+ else :
321+ if ".x" in constraint :
322+ constraints .extend (
323+ get_npm_version_constraints_from_semver_npm_spec (constraint , cls )
324+ )
325+ continue
326+ if constraint .startswith ("~" ) or constraint .startswith ("^" ):
327+ constraints .extend (
328+ get_npm_version_constraints_from_semver_npm_spec (constraint , cls )
329+ )
330+ else :
331+ comparator , version_constraint = split_req (
332+ constraint , cls .vers_by_native_comparators , default = "="
333+ )
334+ version_constraint = version_constraint .lstrip ("vV" )
335+ constraints .append (
336+ VersionConstraint (
337+ comparator = comparator , version = vrc (version_constraint )
338+ )
339+ )
340+ comparator = ""
325341 return cls (constraints = constraints )
326342
327343
0 commit comments