Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F102583510
apply-extends.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Feb 22, 05:54
Size
2 KB
Mime Type
text/x-java
Expires
Mon, Feb 24, 05:54 (1 d, 14 h)
Engine
blob
Format
Raw Data
Handle
24365126
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
apply-extends.js
View Options
import
{
YError
}
from
'../yerror.js'
;
let
previouslyVisitedConfigs
=
[];
let
shim
;
export
function
applyExtends
(
config
,
cwd
,
mergeExtends
,
_shim
)
{
shim
=
_shim
;
let
defaultConfig
=
{};
if
(
Object
.
prototype
.
hasOwnProperty
.
call
(
config
,
'extends'
))
{
if
(
typeof
config
.
extends
!==
'string'
)
return
defaultConfig
;
const
isPath
=
/\.json|\..*rc$/
.
test
(
config
.
extends
);
let
pathToDefault
=
null
;
if
(
!
isPath
)
{
try
{
pathToDefault
=
require
.
resolve
(
config
.
extends
);
}
catch
(
_err
)
{
return
config
;
}
}
else
{
pathToDefault
=
getPathToDefaultConfig
(
cwd
,
config
.
extends
);
}
checkForCircularExtends
(
pathToDefault
);
previouslyVisitedConfigs
.
push
(
pathToDefault
);
defaultConfig
=
isPath
?
JSON
.
parse
(
shim
.
readFileSync
(
pathToDefault
,
'utf8'
))
:
require
(
config
.
extends
);
delete
config
.
extends
;
defaultConfig
=
applyExtends
(
defaultConfig
,
shim
.
path
.
dirname
(
pathToDefault
),
mergeExtends
,
shim
);
}
previouslyVisitedConfigs
=
[];
return
mergeExtends
?
mergeDeep
(
defaultConfig
,
config
)
:
Object
.
assign
({},
defaultConfig
,
config
);
}
function
checkForCircularExtends
(
cfgPath
)
{
if
(
previouslyVisitedConfigs
.
indexOf
(
cfgPath
)
>
-
1
)
{
throw
new
YError
(
`
Circular
extended
configurations
:
'${cfgPath}'
.
`
);
}
}
function
getPathToDefaultConfig
(
cwd
,
pathToExtend
)
{
return
shim
.
path
.
resolve
(
cwd
,
pathToExtend
);
}
function
mergeDeep
(
config1
,
config2
)
{
const
target
=
{};
function
isObject
(
obj
)
{
return
obj
&&
typeof
obj
===
'object'
&&
!
Array
.
isArray
(
obj
);
}
Object
.
assign
(
target
,
config1
);
for
(
const
key
of
Object
.
keys
(
config2
))
{
if
(
isObject
(
config2
[
key
])
&&
isObject
(
target
[
key
]))
{
target
[
key
]
=
mergeDeep
(
config1
[
key
],
config2
[
key
]);
}
else
{
target
[
key
]
=
config2
[
key
];
}
}
return
target
;
}
Event Timeline
Log In to Comment