@@ -18,43 +18,50 @@ def web_module_path(name: str) -> Path:
18
18
19
19
20
20
def resolve_module_exports_from_file (file : Path , max_depth : int ) -> Set [str ]:
21
- export_names , references = resolve_module_exports_from_source (file .read_text ())
22
21
if max_depth == 0 :
23
- logger .warning (f"Unable to resolve all exports for { file } " )
24
- else :
25
- for ref in references :
26
- if urlparse (ref ).scheme : # is an absolute URL
27
- export_names .update (resolve_module_exports_from_url (ref , max_depth - 1 ))
28
- elif ref .startswith ("." ):
29
- path = _resolve_relative_file_path (file , ref )
30
- export_names .update (
31
- resolve_module_exports_from_file (path , max_depth - 1 )
32
- )
33
- else :
34
- logger .warning (f"Did not resolve exports for unknown location { ref } " )
22
+ logger .warning (f"Did not resolve all exports for { file } - max depth reached" )
23
+ return set ()
24
+ elif not file .exists ():
25
+ logger .warning (f"Did not resolve exports for unknown file { file } " )
26
+ return set ()
27
+
28
+ export_names , references = resolve_module_exports_from_source (file .read_text ())
29
+
30
+ for ref in references :
31
+ if urlparse (ref ).scheme : # is an absolute URL
32
+ export_names .update (resolve_module_exports_from_url (ref , max_depth - 1 ))
33
+ else :
34
+ path = _resolve_relative_file_path (file , ref )
35
+ export_names .update (resolve_module_exports_from_file (path , max_depth - 1 ))
36
+
35
37
return export_names
36
38
37
39
38
40
def resolve_module_exports_from_url (url : str , max_depth : int ) -> Set [str ]:
39
- export_names , references = resolve_module_exports_from_source (
40
- requests .get (url ).text
41
- )
42
41
if max_depth == 0 :
43
- logger .warning (f"Unable to fully resolve all exports for { url } " )
44
- else :
45
- for ref in references :
46
- url = _resolve_relative_url (url , ref )
47
- export_names .update (resolve_module_exports_from_url (url , max_depth - 1 ))
42
+ logger .warning (f"Did not resolve all exports for { url } - max depth reached" )
43
+ return set ()
44
+
45
+ try :
46
+ text = requests .get (url ).text
47
+ except requests .exceptions .ConnectionError as error :
48
+ reason = "" if error is None else " - {error.errno}"
49
+ logger .warning ("Did not resolve exports for url " + url + reason )
50
+ return set ()
51
+
52
+ export_names , references = resolve_module_exports_from_source (text )
53
+
54
+ for ref in references :
55
+ url = _resolve_relative_url (url , ref )
56
+ export_names .update (resolve_module_exports_from_url (url , max_depth - 1 ))
57
+
48
58
return export_names
49
59
50
60
51
61
def resolve_module_exports_from_source (content : str ) -> Tuple [Set [str ], Set [str ]]:
52
62
names : Set [str ] = set ()
53
63
references : Set [str ] = set ()
54
- for export in _JS_EXPORT_PATTERN .findall (
55
- # strip comments
56
- _JS_LINE_COMMENT .sub ("" , content )
57
- ):
64
+ for export in _JS_EXPORT_PATTERN .findall (content ):
58
65
export = export .rstrip (";" ).strip ()
59
66
# Exporting individual features
60
67
if export .startswith ("let " ):
@@ -112,5 +119,4 @@ def _resolve_relative_url(base_url: str, rel_url: str) -> str:
112
119
return f"{ base_url } /{ rel_url } "
113
120
114
121
115
- _JS_LINE_COMMENT = re .compile (r"//.*$" )
116
122
_JS_EXPORT_PATTERN = re .compile (r";?\s*export(?=\s+|{)(.*?(?:;|}\s*))" , re .MULTILINE )
0 commit comments