Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F82469090
index.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
Wed, Sep 11, 14:45
Size
3 KB
Mime Type
text/x-Algol68
Expires
Fri, Sep 13, 14:45 (2 d)
Engine
blob
Format
Raw Data
Handle
20704722
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
index.js
View Options
"use strict"
;
Object
.
defineProperty
(
exports
,
"__esModule"
,
{
value
:
true
});
exports
.
default
=
wrapFunction
;
var
_helperFunctionName
=
_interopRequireDefault
(
require
(
"@babel/helper-function-name"
));
var
_template
=
_interopRequireDefault
(
require
(
"@babel/template"
));
var
t
=
_interopRequireWildcard
(
require
(
"@babel/types"
));
function
_getRequireWildcardCache
()
{
if
(
typeof
WeakMap
!==
"function"
)
return
null
;
var
cache
=
new
WeakMap
();
_getRequireWildcardCache
=
function
()
{
return
cache
;
};
return
cache
;
}
function
_interopRequireWildcard
(
obj
)
{
if
(
obj
&&
obj
.
__esModule
)
{
return
obj
;
}
if
(
obj
===
null
||
typeof
obj
!==
"object"
&&
typeof
obj
!==
"function"
)
{
return
{
default
:
obj
};
}
var
cache
=
_getRequireWildcardCache
();
if
(
cache
&&
cache
.
has
(
obj
))
{
return
cache
.
get
(
obj
);
}
var
newObj
=
{};
var
hasPropertyDescriptor
=
Object
.
defineProperty
&&
Object
.
getOwnPropertyDescriptor
;
for
(
var
key
in
obj
)
{
if
(
Object
.
prototype
.
hasOwnProperty
.
call
(
obj
,
key
))
{
var
desc
=
hasPropertyDescriptor
?
Object
.
getOwnPropertyDescriptor
(
obj
,
key
)
:
null
;
if
(
desc
&&
(
desc
.
get
||
desc
.
set
))
{
Object
.
defineProperty
(
newObj
,
key
,
desc
);
}
else
{
newObj
[
key
]
=
obj
[
key
];
}
}
}
newObj
.
default
=
obj
;
if
(
cache
)
{
cache
.
set
(
obj
,
newObj
);
}
return
newObj
;
}
function
_interopRequireDefault
(
obj
)
{
return
obj
&&
obj
.
__esModule
?
obj
:
{
default
:
obj
};
}
const
buildAnonymousExpressionWrapper
=
_template
.
default
.
expression
(
`
(
function
()
{
var
REF
=
FUNCTION
;
return
function
NAME
(
PARAMS
)
{
return
REF
.
apply
(
this
,
arguments
);
};
})()
`
);
const
buildNamedExpressionWrapper
=
_template
.
default
.
expression
(
`
(
function
()
{
var
REF
=
FUNCTION
;
function
NAME
(
PARAMS
)
{
return
REF
.
apply
(
this
,
arguments
);
}
return
NAME
;
})()
`
);
const
buildDeclarationWrapper
=
(
0
,
_template
.
default
)(
`
function
NAME
(
PARAMS
)
{
return
REF
.
apply
(
this
,
arguments
);
}
function
REF
()
{
REF
=
FUNCTION
;
return
REF
.
apply
(
this
,
arguments
);
}
`
);
function
classOrObjectMethod
(
path
,
callId
)
{
const
node
=
path
.
node
;
const
body
=
node
.
body
;
const
container
=
t
.
functionExpression
(
null
,
[],
t
.
blockStatement
(
body
.
body
),
true
);
body
.
body
=
[
t
.
returnStatement
(
t
.
callExpression
(
t
.
callExpression
(
callId
,
[
container
]),
[]))];
node
.
async
=
false
;
node
.
generator
=
false
;
path
.
get
(
"body.body.0.argument.callee.arguments.0"
).
unwrapFunctionEnvironment
();
}
function
plainFunction
(
path
,
callId
)
{
const
node
=
path
.
node
;
const
isDeclaration
=
path
.
isFunctionDeclaration
();
const
functionId
=
node
.
id
;
const
wrapper
=
isDeclaration
?
buildDeclarationWrapper
:
functionId
?
buildNamedExpressionWrapper
:
buildAnonymousExpressionWrapper
;
if
(
path
.
isArrowFunctionExpression
())
{
path
.
arrowFunctionToExpression
();
}
node
.
id
=
null
;
if
(
isDeclaration
)
{
node
.
type
=
"FunctionExpression"
;
}
const
built
=
t
.
callExpression
(
callId
,
[
node
]);
const
container
=
wrapper
({
NAME
:
functionId
||
null
,
REF
:
path
.
scope
.
generateUidIdentifier
(
functionId
?
functionId
.
name
:
"ref"
),
FUNCTION
:
built
,
PARAMS
:
node
.
params
.
reduce
((
acc
,
param
)
=>
{
acc
.
done
=
acc
.
done
||
t
.
isAssignmentPattern
(
param
)
||
t
.
isRestElement
(
param
);
if
(
!
acc
.
done
)
{
acc
.
params
.
push
(
path
.
scope
.
generateUidIdentifier
(
"x"
));
}
return
acc
;
},
{
params
:
[],
done
:
false
}).
params
});
if
(
isDeclaration
)
{
path
.
replaceWith
(
container
[
0
]);
path
.
insertAfter
(
container
[
1
]);
}
else
{
const
retFunction
=
container
.
callee
.
body
.
body
[
1
].
argument
;
if
(
!
functionId
)
{
(
0
,
_helperFunctionName
.
default
)({
node
:
retFunction
,
parent
:
path
.
parent
,
scope
:
path
.
scope
});
}
if
(
!
retFunction
||
retFunction
.
id
||
node
.
params
.
length
)
{
path
.
replaceWith
(
container
);
}
else
{
path
.
replaceWith
(
built
);
}
}
}
function
wrapFunction
(
path
,
callId
)
{
if
(
path
.
isMethod
())
{
classOrObjectMethod
(
path
,
callId
);
}
else
{
plainFunction
(
path
,
callId
);
}
}
Event Timeline
Log In to Comment