Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F101430588
code.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
Mon, Feb 10, 09:44
Size
4 KB
Mime Type
text/x-c++
Expires
Wed, Feb 12, 09:44 (2 d)
Engine
blob
Format
Raw Data
Handle
24145909
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
code.js
View Options
"use strict"
;
Object
.
defineProperty
(
exports
,
"__esModule"
,
{
value
:
true
});
exports
.
regexpCode
=
exports
.
getEsmExportName
=
exports
.
getProperty
=
exports
.
safeStringify
=
exports
.
stringify
=
exports
.
strConcat
=
exports
.
addCodeArg
=
exports
.
str
=
exports
.
_
=
exports
.
nil
=
exports
.
_Code
=
exports
.
Name
=
exports
.
IDENTIFIER
=
exports
.
_CodeOrName
=
void
0
;
class
_CodeOrName
{
}
exports
.
_CodeOrName
=
_CodeOrName
;
exports
.
IDENTIFIER
=
/^[a-z$_][a-z$_0-9]*$/i
;
class
Name
extends
_CodeOrName
{
constructor
(
s
)
{
super
();
if
(
!
exports
.
IDENTIFIER
.
test
(
s
))
throw
new
Error
(
"CodeGen: name must be a valid identifier"
);
this
.
str
=
s
;
}
toString
()
{
return
this
.
str
;
}
emptyStr
()
{
return
false
;
}
get
names
()
{
return
{
[
this
.
str
]
:
1
};
}
}
exports
.
Name
=
Name
;
class
_Code
extends
_CodeOrName
{
constructor
(
code
)
{
super
();
this
.
_items
=
typeof
code
===
"string"
?
[
code
]
:
code
;
}
toString
()
{
return
this
.
str
;
}
emptyStr
()
{
if
(
this
.
_items
.
length
>
1
)
return
false
;
const
item
=
this
.
_items
[
0
];
return
item
===
""
||
item
===
'""'
;
}
get
str
()
{
var
_a
;
return
((
_a
=
this
.
_str
)
!==
null
&&
_a
!==
void
0
?
_a
:
(
this
.
_str
=
this
.
_items
.
reduce
((
s
,
c
)
=>
`
$
{
s
}
$
{
c
}
`
,
""
)));
}
get
names
()
{
var
_a
;
return
((
_a
=
this
.
_names
)
!==
null
&&
_a
!==
void
0
?
_a
:
(
this
.
_names
=
this
.
_items
.
reduce
((
names
,
c
)
=>
{
if
(
c
instanceof
Name
)
names
[
c
.
str
]
=
(
names
[
c
.
str
]
||
0
)
+
1
;
return
names
;
},
{})));
}
}
exports
.
_Code
=
_Code
;
exports
.
nil
=
new
_Code
(
""
);
function
_
(
strs
,
...
args
)
{
const
code
=
[
strs
[
0
]];
let
i
=
0
;
while
(
i
<
args
.
length
)
{
addCodeArg
(
code
,
args
[
i
]);
code
.
push
(
strs
[
++
i
]);
}
return
new
_Code
(
code
);
}
exports
.
_
=
_
;
const
plus
=
new
_Code
(
"+"
);
function
str
(
strs
,
...
args
)
{
const
expr
=
[
safeStringify
(
strs
[
0
])];
let
i
=
0
;
while
(
i
<
args
.
length
)
{
expr
.
push
(
plus
);
addCodeArg
(
expr
,
args
[
i
]);
expr
.
push
(
plus
,
safeStringify
(
strs
[
++
i
]));
}
optimize
(
expr
);
return
new
_Code
(
expr
);
}
exports
.
str
=
str
;
function
addCodeArg
(
code
,
arg
)
{
if
(
arg
instanceof
_Code
)
code
.
push
(...
arg
.
_items
);
else
if
(
arg
instanceof
Name
)
code
.
push
(
arg
);
else
code
.
push
(
interpolate
(
arg
));
}
exports
.
addCodeArg
=
addCodeArg
;
function
optimize
(
expr
)
{
let
i
=
1
;
while
(
i
<
expr
.
length
-
1
)
{
if
(
expr
[
i
]
===
plus
)
{
const
res
=
mergeExprItems
(
expr
[
i
-
1
],
expr
[
i
+
1
]);
if
(
res
!==
undefined
)
{
expr
.
splice
(
i
-
1
,
3
,
res
);
continue
;
}
expr
[
i
++
]
=
"+"
;
}
i
++
;
}
}
function
mergeExprItems
(
a
,
b
)
{
if
(
b
===
'""'
)
return
a
;
if
(
a
===
'""'
)
return
b
;
if
(
typeof
a
==
"string"
)
{
if
(
b
instanceof
Name
||
a
[
a
.
length
-
1
]
!==
'"'
)
return
;
if
(
typeof
b
!=
"string"
)
return
`
$
{
a
.
slice
(
0
,
-
1
)}
$
{
b
}
"`;
if (b[0] === '"
')
return a.slice(0, -1) + b.slice(1);
return;
}
if (typeof b == "string" && b[0] === '
"' && !(a instanceof Name))
return `"
$
{
a
}
$
{
b
.
slice
(
1
)}
`
;
return
;
}
function
strConcat
(
c1
,
c2
)
{
return
c2
.
emptyStr
()
?
c1
:
c1
.
emptyStr
()
?
c2
:
str
`
$
{
c1
}
$
{
c2
}
`
;
}
exports
.
strConcat
=
strConcat
;
// TODO do not allow arrays here
function
interpolate
(
x
)
{
return
typeof
x
==
"number"
||
typeof
x
==
"boolean"
||
x
===
null
?
x
:
safeStringify
(
Array
.
isArray
(
x
)
?
x
.
join
(
","
)
:
x
);
}
function
stringify
(
x
)
{
return
new
_Code
(
safeStringify
(
x
));
}
exports
.
stringify
=
stringify
;
function
safeStringify
(
x
)
{
return
JSON
.
stringify
(
x
)
.
replace
(
/\u2028/g
,
"\\u2028"
)
.
replace
(
/\u2029/g
,
"\\u2029"
);
}
exports
.
safeStringify
=
safeStringify
;
function
getProperty
(
key
)
{
return
typeof
key
==
"string"
&&
exports
.
IDENTIFIER
.
test
(
key
)
?
new
_Code
(
`
.
$
{
key
}
`
)
:
_
`
[
$
{
key
}]
`
;
}
exports
.
getProperty
=
getProperty
;
//Does best effort to format the name properly
function
getEsmExportName
(
key
)
{
if
(
typeof
key
==
"string"
&&
exports
.
IDENTIFIER
.
test
(
key
))
{
return
new
_Code
(
`
$
{
key
}
`
);
}
throw
new
Error
(
`
CodeGen
:
invalid
export
name
:
$
{
key
},
use
explicit
$id
name
mapping
`
);
}
exports
.
getEsmExportName
=
getEsmExportName
;
function
regexpCode
(
rx
)
{
return
new
_Code
(
rx
.
toString
());
}
exports
.
regexpCode
=
regexpCode
;
//# sourceMappingURL=code.js.map
Event Timeline
Log In to Comment