This repository has been archived on 2026-03-06. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw-extensions/wecom/node_modules/win-guid/README.md
T

114 lines
4.0 KiB
Markdown

[![NPM version](https://img.shields.io/npm/v/win-guid.svg)](https://npmjs.org/package/win-guid)
[![Node.js CI](https://github.com/Borewit/win-guid/actions/workflows/nodejs-ci.yml/badge.svg)](https://github.com/Borewit/win-guid/actions/workflows/nodejs-ci.yml)
[![npm downloads](http://img.shields.io/npm/dm/win-guid.svg)](https://npmcharts.com/compare/win-guid?start=365)
# win-guid
A module for encoding and decoding **Windows legacy GUIDs** using the **Windows GUID byte layout**,
a mixed-endianness format used by several long-standing Microsoft and firmware standards, including:
- [Component Object Model (COM)](https://en.wikipedia.org/wiki/Component_Object_Model)
- [Object Linking and Embedding (OLE)](https://en.wikipedia.org/wiki/Object_Linking_and_Embedding)
- [Compound File Binary Format (CFBF, Structured Storage)](https://en.wikipedia.org/wiki/Compound_File_Binary_Format)
- [GUID Partition Table (GPT)](https://en.wikipedia.org/wiki/GUID_Partition_Table)
- [Unified Extensible Firmware Interface (UEFI)](https://en.wikipedia.org/wiki/UEFI)
- [Windows Registry](https://en.wikipedia.org/wiki/Windows_Registry) binary GUID values
- [Active Directory](https://en.wikipedia.org/wiki/Active_Directory) objectGUID values
This is commonly needed when working with Microsoft file and storage formats, such as `.asf`, `.doc`, `.xls`, `.ppt`,
and other binary formats based on OLE/COM Structured Storage (CFBF),
where GUIDs are stored in Windows byte order rather than [RFC 9562](https://www.rfc-editor.org/rfc/rfc9562.html)-style UUID order.
## Windows legacy GUID byte layout vs RFC 9562 UUID byte layout
The table below shows how GUID `00112233-4455-6677-8899-AABBCCDDEEFF` is serialized as an [RFC 9562](https://www.rfc-editor.org/rfc/rfc9562.html) UUID versus a Windows GUID:
| UUID / GUID type | Serialized byte layout (hexadecimal) |
|-------------------------|---------------------------------------------------|
| RFC 9562 UUID layout | `00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF` |
| Windows GUID layout | `33 22 11 00 55 44 77 66 88 99 AA BB CC DD EE FF` |
Windows legacy GUID layout reorders only the first three fields (32-bit, 16-bit, 16-bit). The remaining 8 bytes are stored as-is.
For [RFC 9562](https://www.rfc-editor.org/rfc/rfc9562.html) compliant UUIDs (network byte order), use [uuid](https://github.com/uuidjs/uuid) instead.
## Installation
```bash
npm install win-guid
```
## Usage
### Parse a GUID string
Parses a canonical GUID string:
```js
import { parseWindowsGuid } from "win-guid";
const bytes = parseWindowsGuid("00020906-0000-0000-C000-000000000046");
```
into a 16-byte Uint8Array using Windows GUID byte order.
- Input is validated strictly
- Case-insensitive
- Throws an error on invalid input
### Use the Guid helper class
Creates a GUID from a canonical GUID string.
```js
import { Guid } from "win-guid";
const guid = Guid.fromString("00020906-0000-0000-C000-000000000046");
```
## API
`parseWindowsGuid(guid: string): Uint8Array`
Parses a canonical GUID string:
```js
const bytes = parseWindowsGuid("00020906-0000-0000-C000-000000000046");
```
into a 16-byte `Uint8Array` using Windows GUID byte order.
- Input is validated strictly
- Case-insensitive
- Throws Error on invalid input
`class Guid`
Creates a GUID from a canonical GUID string.
```js
const guid = Guid.fromString("00020906-0000-0000-C000-000000000046");
```
`guid.toString(): string`
Converts the GUID back into the canonical string form.
- Always uppercase
- Round-trips cleanly with fromString
```js
guid.toString();
```
Outputs something like:
```
00020906-0000-0000-C000-000000000046`
```
`guid.bytes: Uint8Array`
Provides access to the raw 16-byte GUID in Windows legacy GUID byte order.
```js
const bytes = guid.bytes;
```
## Licence
This project is licensed under the [MIT License](LICENSE.txt). Feel free to use, modify, and distribute as needed.