You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					78 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					78 lines
				
				2.0 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.default = _default; | ||
|  | exports.URL = exports.DNS = void 0; | ||
|  | 
 | ||
|  | var _stringify = _interopRequireDefault(require("./stringify.js")); | ||
|  | 
 | ||
|  | var _parse = _interopRequireDefault(require("./parse.js")); | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
|  | 
 | ||
|  | function stringToBytes(str) { | ||
|  |   str = unescape(encodeURIComponent(str)); // UTF8 escape
 | ||
|  | 
 | ||
|  |   const bytes = []; | ||
|  | 
 | ||
|  |   for (let i = 0; i < str.length; ++i) { | ||
|  |     bytes.push(str.charCodeAt(i)); | ||
|  |   } | ||
|  | 
 | ||
|  |   return bytes; | ||
|  | } | ||
|  | 
 | ||
|  | const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; | ||
|  | exports.DNS = DNS; | ||
|  | const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; | ||
|  | exports.URL = URL; | ||
|  | 
 | ||
|  | function _default(name, version, hashfunc) { | ||
|  |   function generateUUID(value, namespace, buf, offset) { | ||
|  |     if (typeof value === 'string') { | ||
|  |       value = stringToBytes(value); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (typeof namespace === 'string') { | ||
|  |       namespace = (0, _parse.default)(namespace); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (namespace.length !== 16) { | ||
|  |       throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); | ||
|  |     } // Compute hash of namespace and value, Per 4.3
 | ||
|  |     // Future: Use spread syntax when supported on all platforms, e.g. `bytes =
 | ||
|  |     // hashfunc([...namespace, ... value])`
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     let bytes = new Uint8Array(16 + value.length); | ||
|  |     bytes.set(namespace); | ||
|  |     bytes.set(value, namespace.length); | ||
|  |     bytes = hashfunc(bytes); | ||
|  |     bytes[6] = bytes[6] & 0x0f | version; | ||
|  |     bytes[8] = bytes[8] & 0x3f | 0x80; | ||
|  | 
 | ||
|  |     if (buf) { | ||
|  |       offset = offset || 0; | ||
|  | 
 | ||
|  |       for (let i = 0; i < 16; ++i) { | ||
|  |         buf[offset + i] = bytes[i]; | ||
|  |       } | ||
|  | 
 | ||
|  |       return buf; | ||
|  |     } | ||
|  | 
 | ||
|  |     return (0, _stringify.default)(bytes); | ||
|  |   } // Function#name is not settable on some platforms (#270)
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   try { | ||
|  |     generateUUID.name = name; // eslint-disable-next-line no-empty
 | ||
|  |   } catch (err) {} // For CommonJS default export support
 | ||
|  | 
 | ||
|  | 
 | ||
|  |   generateUUID.DNS = DNS; | ||
|  |   generateUUID.URL = URL; | ||
|  |   return generateUUID; | ||
|  | } |