FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
TypeScript/src/server/moduleSpecifierCache.ts at main · unknownDev31/TypeScript · GitHub
unknownDev31
TypeScript
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
TypeScript
/
src
/
server
/
moduleSpecifierCache.ts
Copy path
More file actions
More file actions
Latest commit
History
History
History
106 lines (100 loc) · 4.74 KB
Breadcrumbs
TypeScript
/
src
/
server
/
moduleSpecifierCache.ts
Copy path
File metadata and controls
106 lines (100 loc) · 4.74 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import
{
Debug
,
FileWatcher
,
ModulePath
,
ModuleSpecifierCache
,
ModuleSpecifierOptions
,
nodeModulesPathPart
,
Path
,
ResolvedModuleSpecifierInfo
,
UserPreferences
,
}
from
"./_namespaces/ts"
;
/**
@internal
*/
export
interface
ModuleSpecifierResolutionCacheHost
{
watchNodeModulesForPackageJsonChanges
(
directoryPath
:
string
)
:
FileWatcher
;
}
/**
@internal
*/
export
function
createModuleSpecifierCache
(
host
:
ModuleSpecifierResolutionCacheHost
)
:
ModuleSpecifierCache
{
let
containedNodeModulesWatchers
:
Map
<
string
,
FileWatcher
>
|
undefined
;
let
cache
:
Map
<
Path
,
ResolvedModuleSpecifierInfo
>
|
undefined
;
let
currentKey
:
string
|
undefined
;
const
result
:
ModuleSpecifierCache
=
{
get
(
fromFileName
,
toFileName
,
preferences
,
options
)
{
if
(
!
cache
||
currentKey
!==
key
(
fromFileName
,
preferences
,
options
)
)
return
undefined
;
return
cache
.
get
(
toFileName
)
;
}
,
set
(
fromFileName
,
toFileName
,
preferences
,
options
,
modulePaths
,
moduleSpecifiers
)
{
ensureCache
(
fromFileName
,
preferences
,
options
)
.
set
(
toFileName
,
createInfo
(
modulePaths
,
moduleSpecifiers
,
/*isBlockedByPackageJsonDependencies*/
false
)
)
;
// If any module specifiers were generated based off paths in node_modules,
// a package.json file in that package was read and is an input to the cached.
// Instead of watching each individual package.json file, set up a wildcard
// directory watcher for any node_modules referenced and clear the cache when
// it sees any changes.
if
(
moduleSpecifiers
)
{
for
(
const
p
of
modulePaths
)
{
if
(
p
.
isInNodeModules
)
{
// No trailing slash
const
nodeModulesPath
=
p
.
path
.
substring
(
0
,
p
.
path
.
indexOf
(
nodeModulesPathPart
)
+
nodeModulesPathPart
.
length
-
1
)
;
if
(
!
containedNodeModulesWatchers
?.
has
(
nodeModulesPath
)
)
{
(
containedNodeModulesWatchers
||=
new
Map
(
)
)
.
set
(
nodeModulesPath
,
host
.
watchNodeModulesForPackageJsonChanges
(
nodeModulesPath
)
,
)
;
}
}
}
}
}
,
setModulePaths
(
fromFileName
,
toFileName
,
preferences
,
options
,
modulePaths
)
{
const
cache
=
ensureCache
(
fromFileName
,
preferences
,
options
)
;
const
info
=
cache
.
get
(
toFileName
)
;
if
(
info
)
{
info
.
modulePaths
=
modulePaths
;
}
else
{
cache
.
set
(
toFileName
,
createInfo
(
modulePaths
,
/*moduleSpecifiers*/
undefined
,
/*isBlockedByPackageJsonDependencies*/
undefined
)
)
;
}
}
,
setBlockedByPackageJsonDependencies
(
fromFileName
,
toFileName
,
preferences
,
options
,
isBlockedByPackageJsonDependencies
)
{
const
cache
=
ensureCache
(
fromFileName
,
preferences
,
options
)
;
const
info
=
cache
.
get
(
toFileName
)
;
if
(
info
)
{
info
.
isBlockedByPackageJsonDependencies
=
isBlockedByPackageJsonDependencies
;
}
else
{
cache
.
set
(
toFileName
,
createInfo
(
/*modulePaths*/
undefined
,
/*moduleSpecifiers*/
undefined
,
isBlockedByPackageJsonDependencies
)
)
;
}
}
,
clear
(
)
{
containedNodeModulesWatchers
?.
forEach
(
watcher
=>
watcher
.
close
(
)
)
;
cache
?.
clear
(
)
;
containedNodeModulesWatchers
?.
clear
(
)
;
currentKey
=
undefined
;
}
,
count
(
)
{
return
cache
?
cache
.
size
:
0
;
}
}
;
if
(
Debug
.
isDebugging
)
{
Object
.
defineProperty
(
result
,
"__cache"
,
{
get
:
(
)
=>
cache
}
)
;
}
return
result
;
function
ensureCache
(
fromFileName
:
Path
,
preferences
:
UserPreferences
,
options
:
ModuleSpecifierOptions
)
{
const
newKey
=
key
(
fromFileName
,
preferences
,
options
)
;
if
(
cache
&&
(
currentKey
!==
newKey
)
)
{
result
.
clear
(
)
;
}
currentKey
=
newKey
;
return
cache
||=
new
Map
(
)
;
}
function
key
(
fromFileName
:
Path
,
preferences
:
UserPreferences
,
options
:
ModuleSpecifierOptions
)
{
return
`
${
fromFileName
}
,
${
preferences
.
importModuleSpecifierEnding
}
,
${
preferences
.
importModuleSpecifierPreference
}
,
${
options
.
overrideImportMode
}
`
;
}
function
createInfo
(
modulePaths
:
readonly
ModulePath
[
]
|
undefined
,
moduleSpecifiers
:
readonly
string
[
]
|
undefined
,
isBlockedByPackageJsonDependencies
:
boolean
|
undefined
,
)
:
ResolvedModuleSpecifierInfo
{
return
{
modulePaths
,
moduleSpecifiers
,
isBlockedByPackageJsonDependencies
}
;
}
}
Back
|
FazBrowse Home
|
New Git URL