Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F99207540
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, Jan 22, 09:38
Size
3 KB
Mime Type
text/x-Algol68
Expires
Fri, Jan 24, 09:38 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
23742574
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
index.js
View Options
'use strict'
;
const
UPPERCASE
=
/[\p{Lu}]/u;
const
LOWERCASE
=
/[\p{Ll}]/u;
const
LEADING_CAPITAL
=
/^[\p{Lu}](?![\p{Lu}])/gu;
const
IDENTIFIER
=
/([\p{Alpha}\p{N}_]|$)/u;
const
SEPARATORS
=
/[_.\- ]+/
;
const
LEADING_SEPARATORS
=
new
RegExp
(
'^'
+
SEPARATORS
.
source
);
const
SEPARATORS_AND_IDENTIFIER
=
new
RegExp
(
SEPARATORS
.
source
+
IDENTIFIER
.
source
,
'gu'
);
const
NUMBERS_AND_IDENTIFIER
=
new
RegExp
(
'\\d+'
+
IDENTIFIER
.
source
,
'gu'
);
const
preserveCamelCase
=
(
string
,
toLowerCase
,
toUpperCase
)
=>
{
let
isLastCharLower
=
false
;
let
isLastCharUpper
=
false
;
let
isLastLastCharUpper
=
false
;
for
(
let
i
=
0
;
i
<
string
.
length
;
i
++
)
{
const
character
=
string
[
i
];
if
(
isLastCharLower
&&
UPPERCASE
.
test
(
character
))
{
string
=
string
.
slice
(
0
,
i
)
+
'-'
+
string
.
slice
(
i
);
isLastCharLower
=
false
;
isLastLastCharUpper
=
isLastCharUpper
;
isLastCharUpper
=
true
;
i
++
;
}
else
if
(
isLastCharUpper
&&
isLastLastCharUpper
&&
LOWERCASE
.
test
(
character
))
{
string
=
string
.
slice
(
0
,
i
-
1
)
+
'-'
+
string
.
slice
(
i
-
1
);
isLastLastCharUpper
=
isLastCharUpper
;
isLastCharUpper
=
false
;
isLastCharLower
=
true
;
}
else
{
isLastCharLower
=
toLowerCase
(
character
)
===
character
&&
toUpperCase
(
character
)
!==
character
;
isLastLastCharUpper
=
isLastCharUpper
;
isLastCharUpper
=
toUpperCase
(
character
)
===
character
&&
toLowerCase
(
character
)
!==
character
;
}
}
return
string
;
};
const
preserveConsecutiveUppercase
=
(
input
,
toLowerCase
)
=>
{
LEADING_CAPITAL
.
lastIndex
=
0
;
return
input
.
replace
(
LEADING_CAPITAL
,
m1
=>
toLowerCase
(
m1
));
};
const
postProcess
=
(
input
,
toUpperCase
)
=>
{
SEPARATORS_AND_IDENTIFIER
.
lastIndex
=
0
;
NUMBERS_AND_IDENTIFIER
.
lastIndex
=
0
;
return
input
.
replace
(
SEPARATORS_AND_IDENTIFIER
,
(
_
,
identifier
)
=>
toUpperCase
(
identifier
))
.
replace
(
NUMBERS_AND_IDENTIFIER
,
m
=>
toUpperCase
(
m
));
};
const
camelCase
=
(
input
,
options
)
=>
{
if
(
!
(
typeof
input
===
'string'
||
Array
.
isArray
(
input
)))
{
throw
new
TypeError
(
'Expected the input to be `string | string[]`'
);
}
options
=
{
pascalCase
:
false
,
preserveConsecutiveUppercase
:
false
,
...
options
};
if
(
Array
.
isArray
(
input
))
{
input
=
input
.
map
(
x
=>
x
.
trim
())
.
filter
(
x
=>
x
.
length
)
.
join
(
'-'
);
}
else
{
input
=
input
.
trim
();
}
if
(
input
.
length
===
0
)
{
return
''
;
}
const
toLowerCase
=
options
.
locale
===
false
?
string
=>
string
.
toLowerCase
()
:
string
=>
string
.
toLocaleLowerCase
(
options
.
locale
);
const
toUpperCase
=
options
.
locale
===
false
?
string
=>
string
.
toUpperCase
()
:
string
=>
string
.
toLocaleUpperCase
(
options
.
locale
);
if
(
input
.
length
===
1
)
{
return
options
.
pascalCase
?
toUpperCase
(
input
)
:
toLowerCase
(
input
);
}
const
hasUpperCase
=
input
!==
toLowerCase
(
input
);
if
(
hasUpperCase
)
{
input
=
preserveCamelCase
(
input
,
toLowerCase
,
toUpperCase
);
}
input
=
input
.
replace
(
LEADING_SEPARATORS
,
''
);
if
(
options
.
preserveConsecutiveUppercase
)
{
input
=
preserveConsecutiveUppercase
(
input
,
toLowerCase
);
}
else
{
input
=
toLowerCase
(
input
);
}
if
(
options
.
pascalCase
)
{
input
=
toUpperCase
(
input
.
charAt
(
0
))
+
input
.
slice
(
1
);
}
return
postProcess
(
input
,
toUpperCase
);
};
module
.
exports
=
camelCase
;
// TODO: Remove this for the next major release
module
.
exports
.
default
=
camelCase
;
Event Timeline
Log In to Comment