MCPcopy
hub / github.com/uuidjs/uuid / v1Bytes

Function v1Bytes

src/v1.ts:145–207  ·  view source on GitHub ↗
(
  rnds: Uint8Array,
  msecs?: number,
  nsecs?: number,
  clockseq?: number,
  node?: Uint8Array,
  buf?: Uint8Array,
  offset = 0,
)

Source from the content-addressed store, hash-verified

143}
144
145function v1Bytes(
146 rnds: Uint8Array,
147 msecs?: number,
148 nsecs?: number,
149 clockseq?: number,
150 node?: Uint8Array,
151 buf?: Uint8Array,
152 offset = 0,
153) {
154 if (rnds.length < 16) {
155 throw new Error('Random bytes length must be >= 16');
156 }
157
158 // Defaults
159 if (!buf) {
160 buf = new Uint8Array(16);
161 offset = 0;
162 } else {
163 if (offset < 0 || offset + 16 > buf.length) {
164 throw new RangeError(
165 `UUID byte range ${offset}:${offset + 15} is out of buffer bounds`,
166 );
167 }
168 }
169
170 msecs ??= Date.now();
171 nsecs ??= 0;
172 clockseq ??= ((rnds[8] << 8) | rnds[9]) & 0x3fff;
173 node ??= rnds.slice(10, 16);
174
175 // Offset to Gregorian epoch
176 // https://www.rfc-editor.org/rfc/rfc9562.html#section-5.1-1
177 msecs += 12219292800000;
178
179 // `time_low`
180 const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
181 buf[offset++] = (tl >>> 24) & 0xff;
182 buf[offset++] = (tl >>> 16) & 0xff;
183 buf[offset++] = (tl >>> 8) & 0xff;
184 buf[offset++] = tl & 0xff;
185
186 // `time_mid`
187 const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;
188 buf[offset++] = (tmh >>> 8) & 0xff;
189 buf[offset++] = tmh & 0xff;
190
191 // `time_high_and_version`
192 buf[offset++] = ((tmh >>> 24) & 0xf) | 0x10; // include version
193 buf[offset++] = (tmh >>> 16) & 0xff;
194
195 // `clock_seq_hi_and_reserved` | variant
196 buf[offset++] = (clockseq >>> 8) | 0x80;
197
198 // `clock_seq_low`
199 buf[offset++] = clockseq & 0xff;
200
201 // `node`
202 for (let n = 0; n < 6; ++n) {

Callers 1

v1Function · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected