Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F101821048
v1.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
Fri, Feb 14, 01:41
Size
3 KB
Mime Type
text/x-java
Expires
Sun, Feb 16, 01:41 (2 d)
Engine
blob
Format
Raw Data
Handle
24237325
Attached To
rOACCT Open Access Compliance Check Tool (OACCT)
v1.js
View Options
import
rng
from
'./rng.js'
;
import
stringify
from
'./stringify.js'
;
// **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html
var
_nodeId
;
var
_clockseq
;
// Previous uuid creation time
var
_lastMSecs
=
0
;
var
_lastNSecs
=
0
;
// See https://github.com/uuidjs/uuid for API details
function
v1
(
options
,
buf
,
offset
)
{
var
i
=
buf
&&
offset
||
0
;
var
b
=
buf
||
new
Array
(
16
);
options
=
options
||
{};
var
node
=
options
.
node
||
_nodeId
;
var
clockseq
=
options
.
clockseq
!==
undefined
?
options
.
clockseq
:
_clockseq
;
// node and clockseq need to be initialized to random values if they're not
// specified. We do this lazily to minimize issues related to insufficient
// system entropy. See #189
if
(
node
==
null
||
clockseq
==
null
)
{
var
seedBytes
=
options
.
random
||
(
options
.
rng
||
rng
)();
if
(
node
==
null
)
{
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
node
=
_nodeId
=
[
seedBytes
[
0
]
|
0x01
,
seedBytes
[
1
],
seedBytes
[
2
],
seedBytes
[
3
],
seedBytes
[
4
],
seedBytes
[
5
]];
}
if
(
clockseq
==
null
)
{
// Per 4.2.2, randomize (14 bit) clockseq
clockseq
=
_clockseq
=
(
seedBytes
[
6
]
<<
8
|
seedBytes
[
7
])
&
0x3fff
;
}
}
// UUID timestamps are 100 nano-second units since the Gregorian epoch,
// (1582-10-15 00:00). JSNumbers aren't precise enough for this, so
// time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
// (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
var
msecs
=
options
.
msecs
!==
undefined
?
options
.
msecs
:
Date
.
now
();
// Per 4.2.1.2, use count of uuid's generated during the current clock
// cycle to simulate higher resolution clock
var
nsecs
=
options
.
nsecs
!==
undefined
?
options
.
nsecs
:
_lastNSecs
+
1
;
// Time since last uuid creation (in msecs)
var
dt
=
msecs
-
_lastMSecs
+
(
nsecs
-
_lastNSecs
)
/
10000
;
// Per 4.2.1.2, Bump clockseq on clock regression
if
(
dt
<
0
&&
options
.
clockseq
===
undefined
)
{
clockseq
=
clockseq
+
1
&
0x3fff
;
}
// Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
// time interval
if
((
dt
<
0
||
msecs
>
_lastMSecs
)
&&
options
.
nsecs
===
undefined
)
{
nsecs
=
0
;
}
// Per 4.2.1.2 Throw error if too many uuids are requested
if
(
nsecs
>=
10000
)
{
throw
new
Error
(
"uuid.v1(): Can't create more than 10M uuids/sec"
);
}
_lastMSecs
=
msecs
;
_lastNSecs
=
nsecs
;
_clockseq
=
clockseq
;
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
msecs
+=
12219292800000
;
// `time_low`
var
tl
=
((
msecs
&
0xfffffff
)
*
10000
+
nsecs
)
%
0x100000000
;
b
[
i
++
]
=
tl
>>>
24
&
0xff
;
b
[
i
++
]
=
tl
>>>
16
&
0xff
;
b
[
i
++
]
=
tl
>>>
8
&
0xff
;
b
[
i
++
]
=
tl
&
0xff
;
// `time_mid`
var
tmh
=
msecs
/
0x100000000
*
10000
&
0xfffffff
;
b
[
i
++
]
=
tmh
>>>
8
&
0xff
;
b
[
i
++
]
=
tmh
&
0xff
;
// `time_high_and_version`
b
[
i
++
]
=
tmh
>>>
24
&
0xf
|
0x10
;
// include version
b
[
i
++
]
=
tmh
>>>
16
&
0xff
;
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
b
[
i
++
]
=
clockseq
>>>
8
|
0x80
;
// `clock_seq_low`
b
[
i
++
]
=
clockseq
&
0xff
;
// `node`
for
(
var
n
=
0
;
n
<
6
;
++
n
)
{
b
[
i
+
n
]
=
node
[
n
];
}
return
buf
||
stringify
(
b
);
}
export
default
v1
;
Event Timeline
Log In to Comment