@marcuspuchalla/nachos 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/{chunk-RVG2BY32.cjs → chunk-3Z45RBZP.cjs} +96 -42
  3. package/dist/chunk-3Z45RBZP.cjs.map +1 -0
  4. package/dist/{chunk-UMAX5MX5.js → chunk-EDXZTSIA.js} +33 -5
  5. package/dist/chunk-EDXZTSIA.js.map +1 -0
  6. package/dist/{chunk-S4RXO6IB.cjs → chunk-HMUA5KLG.cjs} +48 -20
  7. package/dist/chunk-HMUA5KLG.cjs.map +1 -0
  8. package/dist/{chunk-ZDZ2B5PE.js → chunk-JESIF5IF.js} +7 -3
  9. package/dist/chunk-JESIF5IF.js.map +1 -0
  10. package/dist/{chunk-5IWW5H47.js → chunk-LWNWC2O7.js} +68 -14
  11. package/dist/chunk-LWNWC2O7.js.map +1 -0
  12. package/dist/{chunk-PD72MVTX.cjs → chunk-P6A2OOIY.cjs} +7 -3
  13. package/dist/chunk-P6A2OOIY.cjs.map +1 -0
  14. package/dist/encoder/index.cjs +14 -14
  15. package/dist/encoder/index.d.cts +5 -4
  16. package/dist/encoder/index.d.ts +5 -4
  17. package/dist/encoder/index.js +2 -2
  18. package/dist/index.cjs +46 -27
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +15 -5
  21. package/dist/index.d.ts +15 -5
  22. package/dist/index.js +25 -5
  23. package/dist/index.js.map +1 -1
  24. package/dist/metafile-cjs.json +1 -1
  25. package/dist/metafile-esm.json +1 -1
  26. package/dist/parser/index.cjs +21 -21
  27. package/dist/parser/index.d.cts +2 -2
  28. package/dist/parser/index.d.ts +2 -2
  29. package/dist/parser/index.js +2 -2
  30. package/dist/{types-DvNlfbKB.d.cts → types-eG2qalpr.d.cts} +27 -1
  31. package/dist/{types-DvNlfbKB.d.ts → types-eG2qalpr.d.ts} +27 -1
  32. package/dist/{useCborSimpleEncoder-BoKEmjP9.d.ts → useCborSimpleEncoder-CamvS-_N.d.ts} +7 -1
  33. package/dist/{useCborSimpleEncoder-C_OHxoB8.d.cts → useCborSimpleEncoder-DXgPx62d.d.cts} +7 -1
  34. package/dist/{useCborTag-QpZR-Er2.d.cts → useCborTag-D4d7xG3-.d.cts} +1 -1
  35. package/dist/{useCborTag-BD6Sqp7p.d.ts → useCborTag-TYst1KR6.d.ts} +1 -1
  36. package/package.json +1 -1
  37. package/src/__tests__/audit-fixes.test.ts +141 -0
  38. package/src/encoder/composables/useCborCollectionEncoder.ts +3 -2
  39. package/src/encoder/composables/useCborEncoder.ts +19 -0
  40. package/src/encoder/composables/useCborSimpleEncoder.ts +6 -2
  41. package/src/encoder/types.ts +9 -2
  42. package/src/encoder/utils.ts +33 -1
  43. package/src/index.ts +10 -0
  44. package/src/parser/__tests__/utils-errors.test.ts +11 -3
  45. package/src/parser/composables/useCborCollection.ts +7 -4
  46. package/src/parser/composables/useCborDiagnostic.ts +28 -0
  47. package/src/parser/composables/useCborParser.ts +63 -13
  48. package/src/parser/composables/useCborTag.ts +8 -1
  49. package/src/parser/types.ts +32 -1
  50. package/src/parser/utils.ts +41 -0
  51. package/dist/chunk-5IWW5H47.js.map +0 -1
  52. package/dist/chunk-PD72MVTX.cjs.map +0 -1
  53. package/dist/chunk-RVG2BY32.cjs.map +0 -1
  54. package/dist/chunk-S4RXO6IB.cjs.map +0 -1
  55. package/dist/chunk-UMAX5MX5.js.map +0 -1
  56. package/dist/chunk-ZDZ2B5PE.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/parser/types.ts","../src/parser/composables/useCborStringTypes.ts"],"names":["CborMajorType","CborAdditionalInfo","CborSimpleValue","CborTag"],"mappings":"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","file":"chunk-P6A2OOIY.cjs","sourcesContent":["/**\n * CBOR Parser Type Definitions\n * Following RFC 8949 specification\n */\n\n/**\n * Parser resource limits for DoS protection\n */\nexport interface ParserLimits {\n /** Maximum input size in bytes (default: 10 MB) */\n maxInputSize?: number\n /** Maximum output size in bytes (default: 100 MB) */\n maxOutputSize?: number\n /** Maximum string length in bytes (default: 1 MB) */\n maxStringLength?: number\n /** Maximum array length (default: 10,000) */\n maxArrayLength?: number\n /** Maximum map size (default: 10,000) */\n maxMapSize?: number\n /** Maximum nesting depth for arrays/maps (default: 100) */\n maxDepth?: number\n /** Maximum tag nesting depth (default: 100) - Prevents RUSTSEC-2019-0025 */\n maxTagDepth?: number\n /** Maximum bignum size in bytes for tags 2/3 (default: 1024 bytes = 8192 bits) - Prevents CVE-2020-28491 */\n maxBignumBytes?: number\n /** Maximum parse time in milliseconds (default: 1000) */\n maxParseTime?: number\n}\n\n/**\n * Duplicate map key handling modes\n * Following RFC 8949 Section 5.6 guidance\n */\nexport type DupMapKeyMode = 'allow' | 'warn' | 'reject'\n\n/**\n * Map key ordering for canonical/deterministic encoding and validation.\n *\n * - 'length-first': RFC 7049 Section 3.9 \"Old Canonical CBOR\" — shorter encoded\n * keys sort first, ties broken bytewise. This is what Cardano CIP-21 mandates\n * for transaction serialization, and is the default in this library.\n * - 'bytewise': RFC 8949 Section 4.2.1 \"Core Deterministic Encoding\" — pure\n * bytewise lexicographic order of the encoded keys (the modern generic default).\n *\n * @see https://cips.cardano.org/cip/CIP-21\n * @see https://www.rfc-editor.org/rfc/rfc8949.html#section-4.2.1\n */\nexport type MapKeyOrder = 'length-first' | 'bytewise'\n\n/**\n * Parser options for controlling behavior\n */\nexport interface ParseOptions {\n /** Enable strict Cardano mode (all validations) */\n strict?: boolean\n /** Validate canonical encoding (shortest form, sorted maps) */\n validateCanonical?: boolean\n /** Allow indefinite-length encoding (false in strict mode) */\n allowIndefinite?: boolean\n /**\n * Duplicate map key handling (RFC 8949 Section 5.6)\n * - 'allow': Allow duplicates (default, permissive)\n * - 'warn': Warn on duplicates but continue parsing\n * - 'reject': Throw error on duplicate keys (strict mode)\n */\n dupMapKeyMode?: DupMapKeyMode\n /** Validate UTF-8 strictly (reject overlongs) */\n validateUtf8Strict?: boolean\n /** Validate set uniqueness (Tag 258 - reject duplicates) */\n validateSetUniqueness?: boolean\n /** Validate semantic tag constraints (Tag 4, Tag 5 array structure) */\n validateTagSemantics?: boolean\n /** Validate Plutus constructor semantics (Tags 102, 121-127, 1280-1400) */\n validatePlutusSemantics?: boolean\n /**\n * Map key ordering enforced when validateCanonical is set.\n * Defaults to 'length-first' (Cardano CIP-21 / RFC 7049 Section 3.9).\n * Use 'bytewise' for RFC 8949 Section 4.2.1 core deterministic order.\n */\n mapKeyOrder?: MapKeyOrder\n /**\n * Reject trailing bytes after the top-level data item (well-formedness).\n * Defaults to true for backward compatibility (decode returns bytesRead so\n * callers can detect leftover data); automatically false-tightened, i.e. set\n * to reject, in strict mode. Set explicitly to override.\n */\n allowTrailingData?: boolean\n /** Resource limits */\n limits?: ParserLimits\n}\n\n/**\n * Default resource limits for parser\n */\nexport const DEFAULT_LIMITS: Required<ParserLimits> = {\n maxInputSize: 10 * 1024 * 1024, // 10 MB\n maxOutputSize: 100 * 1024 * 1024, // 100 MB\n maxStringLength: 1024 * 1024, // 1 MB\n maxArrayLength: 10000,\n maxMapSize: 10000,\n maxDepth: 100, // Collection nesting depth (increased for compatibility)\n maxTagDepth: 100, // Tag nesting depth (RUSTSEC-2019-0025 mitigation)\n maxBignumBytes: 1024, // 1 KB = 8192 bits (CVE-2020-28491 mitigation)\n maxParseTime: 1000 // 1 second\n}\n\n/**\n * Default parse options\n */\nexport const DEFAULT_OPTIONS: Required<ParseOptions> = {\n strict: false,\n validateCanonical: false,\n allowIndefinite: true,\n // Default to 'warn' so duplicate keys are never silently collapsed in the Map\n // view. Duplicates remain byte-perfect for round-trips via ALL_ENTRIES_SYMBOL.\n dupMapKeyMode: 'warn',\n validateUtf8Strict: false,\n validateSetUniqueness: false,\n validateTagSemantics: false,\n validatePlutusSemantics: false,\n mapKeyOrder: 'length-first',\n allowTrailingData: true,\n limits: DEFAULT_LIMITS\n}\n\n/**\n * Parsing context that tracks state during CBOR decoding\n */\nexport interface CborContext {\n /** Raw byte buffer */\n buffer: Uint8Array\n /** Current byte offset */\n offset: number\n /** Source map entries for visualization */\n sourceMap: SourceMapEntry[]\n /** Current nesting depth for arrays/maps (for limit checking) */\n currentDepth?: number\n /** Current tag nesting depth (for tag limit checking) */\n currentTagDepth?: number\n /** Parse start time (for timeout checking) */\n startTime?: number\n /** Bytes allocated (for output size tracking) */\n bytesAllocated?: number\n /** Parser options */\n options?: ParseOptions\n}\n\n/**\n * Result of parsing a CBOR value\n */\nexport interface ParseResult {\n /** Decoded CBOR value */\n value: CborValue\n /** Number of bytes consumed */\n bytesRead: number\n}\n\n/**\n * Parse result with source mapping information\n */\nexport interface ParseResultWithMap extends ParseResult {\n /** Source map for hex/JSON linking */\n sourceMap: SourceMapEntry[]\n}\n\n/**\n * Source map entry for bi-directional visualization\n */\nexport interface SourceMapEntry {\n /** JSON Pointer path (RFC 6901) */\n path: string\n /** Starting byte offset */\n start: number\n /** Ending byte offset (exclusive) */\n end: number\n /** CBOR major type (0-7) */\n majorType: number\n /** Human-readable type description */\n type: string\n /** Parent entry path (for nested structures like tags) */\n parent?: string\n /** Child entry paths (for container types) */\n children?: string[]\n /** Whether this entry represents a header (initial byte + length info) */\n isHeader?: boolean\n /** Whether this entry represents content (payload data) */\n isContent?: boolean\n /** Byte offset where header ends and content begins */\n headerEnd?: number\n /** JSON Pointer path to the content portion (for split header/content entries) */\n contentPath?: string\n}\n\n/**\n * CBOR byte string (can be definite or indefinite length)\n */\nexport interface CborByteString {\n readonly type: 'cbor-byte-string'\n readonly bytes: Uint8Array\n readonly chunks?: Uint8Array[] // Original chunks for indefinite byte strings\n [INDEFINITE_SYMBOL]?: boolean\n}\n\n/**\n * CBOR text string (can be definite or indefinite length)\n */\nexport interface CborTextString {\n readonly type: 'cbor-text-string'\n readonly text: string\n readonly chunks?: string[] // Original chunks for indefinite text strings\n [INDEFINITE_SYMBOL]?: boolean\n}\n\n/**\n * All possible CBOR values\n */\nexport type CborValue =\n | number\n | bigint\n | string\n | boolean\n | null\n | undefined\n | Uint8Array\n | CborByteString\n | CborTextString\n | CborValue[]\n | CborMap\n | TaggedValue\n | SimpleValue\n\n/**\n * Symbol to mark arrays/maps as indefinite-length encoded\n * This allows round-trip preservation of encoding style\n */\nexport const INDEFINITE_SYMBOL = Symbol('cbor.indefinite')\n\n/**\n * Symbol used to store all map entries including duplicates\n * This allows byte-perfect round-trip when CBOR maps have duplicate keys\n * Stores: Array<[key: CborValue, value: CborValue]>\n */\nexport const ALL_ENTRIES_SYMBOL = Symbol('cbor.allEntries')\n\n/**\n * CBOR map type (Map with any CBOR value as keys)\n *\n * Uses JavaScript Map to preserve key types (integers, Uint8Arrays, etc.)\n * This is essential for:\n * - Cardano transactions (use integer keys 0-18)\n * - Round-trip encoding (must preserve exact key types)\n * - CBOR specification compliance (maps can have any type as keys)\n *\n * @example\n * ```typescript\n * // Cardano transaction body\n * new Map([\n * [0, inputs], // Integer key\n * [1, outputs], // Integer key\n * [2, 1000000] // Integer key (fee)\n * ])\n * ```\n */\nexport type CborMap = Map<CborValue, CborValue> & { [INDEFINITE_SYMBOL]?: boolean }\n\n/**\n * CBOR array type with optional indefinite-length marker\n */\nexport type CborArray = CborValue[] & { [INDEFINITE_SYMBOL]?: boolean }\n\n/**\n * Tagged CBOR value (Major Type 6)\n */\nexport interface TaggedValue {\n tag: number\n value: CborValue\n plutus?: PlutusConstr // Decoded Plutus constructor (for tags 102, 121-127, 1280-1400)\n}\n\n/**\n * Simple CBOR value (Major Type 7, unassigned simple values)\n */\nexport interface SimpleValue {\n simpleValue: number\n}\n\n/**\n * Plutus Data types for Cardano smart contracts\n */\nexport type PlutusData =\n | PlutusConstr\n | PlutusMap\n | PlutusList\n | PlutusInt\n | PlutusBytes\n\n/**\n * Plutus Constructor (algebraic data type)\n */\nexport interface PlutusConstr {\n constructor: number\n fields: PlutusData[]\n}\n\n/**\n * Plutus Map (key-value pairs)\n */\nexport interface PlutusMap {\n entries: Array<[PlutusData, PlutusData]>\n}\n\n/**\n * Plutus List (sequential collection)\n */\nexport type PlutusList = PlutusData[]\n\n/**\n * Plutus Integer (arbitrary precision)\n */\nexport type PlutusInt = number | bigint\n\n/**\n * Plutus Bytes (bounded byte string, max 64 bytes)\n */\nexport type PlutusBytes = Uint8Array\n\n/**\n * CBOR Major Types (0-7)\n */\nexport enum CborMajorType {\n UNSIGNED_INT = 0,\n NEGATIVE_INT = 1,\n BYTE_STRING = 2,\n TEXT_STRING = 3,\n ARRAY = 4,\n MAP = 5,\n TAG = 6,\n SIMPLE = 7\n}\n\n/**\n * Additional Information values\n */\nexport enum CborAdditionalInfo {\n DIRECT = 23, // Values 0-23\n ONE_BYTE = 24, // 1 byte follows\n TWO_BYTES = 25, // 2 bytes follow\n FOUR_BYTES = 26, // 4 bytes follow\n EIGHT_BYTES = 27, // 8 bytes follow\n INDEFINITE = 31 // Indefinite length\n}\n\n/**\n * Simple values (Major Type 7)\n */\nexport enum CborSimpleValue {\n FALSE = 20,\n TRUE = 21,\n NULL = 22,\n UNDEFINED = 23,\n FLOAT16 = 25,\n FLOAT32 = 26,\n FLOAT64 = 27,\n BREAK = 31\n}\n\n/**\n * Common semantic tags\n */\nexport enum CborTag {\n DATE_TIME_STRING = 0,\n EPOCH_DATE_TIME = 1,\n POSITIVE_BIGNUM = 2,\n NEGATIVE_BIGNUM = 3,\n DECIMAL_FRACTION = 4,\n BIGFLOAT = 5,\n BASE64URL = 21,\n BASE64 = 22,\n BASE16 = 23,\n CBOR_ENCODED = 24,\n URI = 32,\n BASE64URL_NO_PAD = 33,\n BASE64_NO_PAD = 34,\n REGEXP = 35,\n MIME_MESSAGE = 36\n}\n\n/**\n * Parse error types\n */\nexport interface ParseError {\n type: 'INVALID_HEX' | 'UNEXPECTED_EOF' | 'INVALID_CBOR' | 'UNSUPPORTED_TYPE'\n message: string\n offset?: number\n}\n\n/**\n * Result type for operations that can fail\n */\nexport type Result<T, E> =\n | { success: true; value: T }\n | { success: false; error: E }\n","/**\n * CBOR String Type Helpers\n * Composables for working with CborByteString and CborTextString\n */\n\nimport type { CborByteString, CborTextString } from '../types'\nimport { INDEFINITE_SYMBOL } from '../types'\n\n/**\n * Composable for creating and working with CBOR byte strings\n */\nexport function useCborByteString() {\n /**\n * Create a CBOR byte string\n *\n * @param bytes - The byte data\n * @param indefinite - Whether this was encoded with indefinite length\n * @param chunks - Original chunks for indefinite byte strings\n * @returns CborByteString object\n */\n const create = (bytes: Uint8Array, indefinite = false, chunks?: Uint8Array[]): CborByteString => {\n const result: CborByteString = {\n type: 'cbor-byte-string',\n bytes,\n ...(chunks && { chunks })\n }\n\n if (indefinite) {\n (result as any)[INDEFINITE_SYMBOL] = true\n }\n\n return result\n }\n\n /**\n * Check if a byte string was encoded with indefinite length\n */\n const isIndefinite = (value: CborByteString | Uint8Array): boolean => {\n return (value as any)[INDEFINITE_SYMBOL] === true\n }\n\n /**\n * Extract raw bytes from a CborByteString or Uint8Array\n */\n const toBytes = (value: CborByteString | Uint8Array): Uint8Array => {\n if (value instanceof Uint8Array) {\n return value\n }\n return value.bytes\n }\n\n /**\n * Check if a value is a CborByteString\n */\n const isCborByteString = (value: any): value is CborByteString => {\n return typeof value === 'object' &&\n value !== null &&\n value.type === 'cbor-byte-string' &&\n value.bytes instanceof Uint8Array\n }\n\n return {\n create,\n isIndefinite,\n toBytes,\n isCborByteString\n }\n}\n\n/**\n * Composable for creating and working with CBOR text strings\n */\nexport function useCborTextString() {\n /**\n * Create a CBOR text string\n *\n * @param text - The text data\n * @param indefinite - Whether this was encoded with indefinite length\n * @param chunks - Original chunks for indefinite text strings\n * @returns CborTextString object\n */\n const create = (text: string, indefinite = false, chunks?: string[]): CborTextString => {\n const result: CborTextString = {\n type: 'cbor-text-string',\n text,\n ...(chunks && { chunks })\n }\n\n if (indefinite) {\n (result as any)[INDEFINITE_SYMBOL] = true\n }\n\n return result\n }\n\n /**\n * Check if a text string was encoded with indefinite length\n */\n const isIndefinite = (value: CborTextString | string): boolean => {\n return (value as any)[INDEFINITE_SYMBOL] === true\n }\n\n /**\n * Extract raw string from a CborTextString or string\n */\n const toString = (value: CborTextString | string): string => {\n if (typeof value === 'string') {\n return value\n }\n return value.text\n }\n\n /**\n * Check if a value is a CborTextString\n */\n const isCborTextString = (value: any): value is CborTextString => {\n return typeof value === 'object' &&\n value !== null &&\n value.type === 'cbor-text-string' &&\n typeof value.text === 'string'\n }\n\n return {\n create,\n isIndefinite,\n toString,\n isCborTextString\n }\n}\n"]}
@@ -1,57 +1,57 @@
1
1
  'use strict';
2
2
 
3
- var chunkS4RXO6IB_cjs = require('../chunk-S4RXO6IB.cjs');
4
- require('../chunk-PD72MVTX.cjs');
3
+ var chunkHMUA5KLG_cjs = require('../chunk-HMUA5KLG.cjs');
4
+ require('../chunk-P6A2OOIY.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "DEFAULT_ENCODE_OPTIONS", {
9
9
  enumerable: true,
10
- get: function () { return chunkS4RXO6IB_cjs.DEFAULT_ENCODE_OPTIONS; }
10
+ get: function () { return chunkHMUA5KLG_cjs.DEFAULT_ENCODE_OPTIONS; }
11
11
  });
12
12
  Object.defineProperty(exports, "bytesToHex", {
13
13
  enumerable: true,
14
- get: function () { return chunkS4RXO6IB_cjs.bytesToHex; }
14
+ get: function () { return chunkHMUA5KLG_cjs.bytesToHex; }
15
15
  });
16
16
  Object.defineProperty(exports, "compareBytes", {
17
17
  enumerable: true,
18
- get: function () { return chunkS4RXO6IB_cjs.compareBytes; }
18
+ get: function () { return chunkHMUA5KLG_cjs.compareBytes; }
19
19
  });
20
20
  Object.defineProperty(exports, "concatenateUint8Arrays", {
21
21
  enumerable: true,
22
- get: function () { return chunkS4RXO6IB_cjs.concatenateUint8Arrays; }
22
+ get: function () { return chunkHMUA5KLG_cjs.concatenateUint8Arrays; }
23
23
  });
24
24
  Object.defineProperty(exports, "useCborCollectionEncoder", {
25
25
  enumerable: true,
26
- get: function () { return chunkS4RXO6IB_cjs.useCborCollectionEncoder; }
26
+ get: function () { return chunkHMUA5KLG_cjs.useCborCollectionEncoder; }
27
27
  });
28
28
  Object.defineProperty(exports, "useCborEncoder", {
29
29
  enumerable: true,
30
- get: function () { return chunkS4RXO6IB_cjs.useCborEncoder; }
30
+ get: function () { return chunkHMUA5KLG_cjs.useCborEncoder; }
31
31
  });
32
32
  Object.defineProperty(exports, "useCborIntegerEncoder", {
33
33
  enumerable: true,
34
- get: function () { return chunkS4RXO6IB_cjs.useCborIntegerEncoder; }
34
+ get: function () { return chunkHMUA5KLG_cjs.useCborIntegerEncoder; }
35
35
  });
36
36
  Object.defineProperty(exports, "useCborSimpleEncoder", {
37
37
  enumerable: true,
38
- get: function () { return chunkS4RXO6IB_cjs.useCborSimpleEncoder; }
38
+ get: function () { return chunkHMUA5KLG_cjs.useCborSimpleEncoder; }
39
39
  });
40
40
  Object.defineProperty(exports, "useCborStringEncoder", {
41
41
  enumerable: true,
42
- get: function () { return chunkS4RXO6IB_cjs.useCborStringEncoder; }
42
+ get: function () { return chunkHMUA5KLG_cjs.useCborStringEncoder; }
43
43
  });
44
44
  Object.defineProperty(exports, "useCborTagEncoder", {
45
45
  enumerable: true,
46
- get: function () { return chunkS4RXO6IB_cjs.useCborTagEncoder; }
46
+ get: function () { return chunkHMUA5KLG_cjs.useCborTagEncoder; }
47
47
  });
48
48
  Object.defineProperty(exports, "writeBigUint", {
49
49
  enumerable: true,
50
- get: function () { return chunkS4RXO6IB_cjs.writeBigUint; }
50
+ get: function () { return chunkHMUA5KLG_cjs.writeBigUint; }
51
51
  });
52
52
  Object.defineProperty(exports, "writeUint", {
53
53
  enumerable: true,
54
- get: function () { return chunkS4RXO6IB_cjs.writeUint; }
54
+ get: function () { return chunkHMUA5KLG_cjs.writeUint; }
55
55
  });
56
56
  //# sourceMappingURL=index.cjs.map
57
57
  //# sourceMappingURL=index.cjs.map
@@ -1,6 +1,6 @@
1
- import { E as EncodableValue, b as EncodeResult, T as TaggedValue } from '../useCborSimpleEncoder-C_OHxoB8.cjs';
2
- export { D as DEFAULT_ENCODE_OPTIONS, g as EncodeContext, a as EncodeOptions, e as useCborCollectionEncoder, u as useCborEncoder, c as useCborIntegerEncoder, f as useCborSimpleEncoder, d as useCborStringEncoder } from '../useCborSimpleEncoder-C_OHxoB8.cjs';
3
- import '../types-DvNlfbKB.cjs';
1
+ import { E as EncodableValue, b as EncodeResult, T as TaggedValue } from '../useCborSimpleEncoder-DXgPx62d.cjs';
2
+ export { D as DEFAULT_ENCODE_OPTIONS, g as EncodeContext, a as EncodeOptions, e as useCborCollectionEncoder, u as useCborEncoder, c as useCborIntegerEncoder, f as useCborSimpleEncoder, d as useCborStringEncoder } from '../useCborSimpleEncoder-DXgPx62d.cjs';
3
+ import '../types-eG2qalpr.cjs';
4
4
 
5
5
  /**
6
6
  * CBOR Tag Encoder Composable
@@ -57,7 +57,8 @@ declare function bytesToHex(bytes: Uint8Array): string;
57
57
  */
58
58
  declare function concatenateUint8Arrays(arrays: Uint8Array[]): Uint8Array;
59
59
  /**
60
- * Compare two Uint8Arrays bytewise (for canonical map sorting)
60
+ * Compare two Uint8Arrays length-first (RFC 7049 §3.9 / Cardano CIP-21 ordering).
61
+ * Shorter keys sort first; equal-length keys are compared bytewise.
61
62
  */
62
63
  declare function compareBytes(a: Uint8Array, b: Uint8Array): number;
63
64
  /**
@@ -1,6 +1,6 @@
1
- import { E as EncodableValue, b as EncodeResult, T as TaggedValue } from '../useCborSimpleEncoder-BoKEmjP9.js';
2
- export { D as DEFAULT_ENCODE_OPTIONS, g as EncodeContext, a as EncodeOptions, e as useCborCollectionEncoder, u as useCborEncoder, c as useCborIntegerEncoder, f as useCborSimpleEncoder, d as useCborStringEncoder } from '../useCborSimpleEncoder-BoKEmjP9.js';
3
- import '../types-DvNlfbKB.js';
1
+ import { E as EncodableValue, b as EncodeResult, T as TaggedValue } from '../useCborSimpleEncoder-CamvS-_N.js';
2
+ export { D as DEFAULT_ENCODE_OPTIONS, g as EncodeContext, a as EncodeOptions, e as useCborCollectionEncoder, u as useCborEncoder, c as useCborIntegerEncoder, f as useCborSimpleEncoder, d as useCborStringEncoder } from '../useCborSimpleEncoder-CamvS-_N.js';
3
+ import '../types-eG2qalpr.js';
4
4
 
5
5
  /**
6
6
  * CBOR Tag Encoder Composable
@@ -57,7 +57,8 @@ declare function bytesToHex(bytes: Uint8Array): string;
57
57
  */
58
58
  declare function concatenateUint8Arrays(arrays: Uint8Array[]): Uint8Array;
59
59
  /**
60
- * Compare two Uint8Arrays bytewise (for canonical map sorting)
60
+ * Compare two Uint8Arrays length-first (RFC 7049 §3.9 / Cardano CIP-21 ordering).
61
+ * Shorter keys sort first; equal-length keys are compared bytewise.
61
62
  */
62
63
  declare function compareBytes(a: Uint8Array, b: Uint8Array): number;
63
64
  /**
@@ -1,4 +1,4 @@
1
- export { DEFAULT_ENCODE_OPTIONS, bytesToHex, compareBytes, concatenateUint8Arrays, useCborCollectionEncoder, useCborEncoder, useCborIntegerEncoder, useCborSimpleEncoder, useCborStringEncoder, useCborTagEncoder, writeBigUint, writeUint } from '../chunk-UMAX5MX5.js';
2
- import '../chunk-ZDZ2B5PE.js';
1
+ export { DEFAULT_ENCODE_OPTIONS, bytesToHex, compareBytes, concatenateUint8Arrays, useCborCollectionEncoder, useCborEncoder, useCborIntegerEncoder, useCborSimpleEncoder, useCborStringEncoder, useCborTagEncoder, writeBigUint, writeUint } from '../chunk-EDXZTSIA.js';
2
+ import '../chunk-JESIF5IF.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.cjs CHANGED
@@ -1,10 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkRVG2BY32_cjs = require('./chunk-RVG2BY32.cjs');
4
- var chunkS4RXO6IB_cjs = require('./chunk-S4RXO6IB.cjs');
5
- var chunkPD72MVTX_cjs = require('./chunk-PD72MVTX.cjs');
3
+ var chunk3Z45RBZP_cjs = require('./chunk-3Z45RBZP.cjs');
4
+ var chunkHMUA5KLG_cjs = require('./chunk-HMUA5KLG.cjs');
5
+ var chunkP6A2OOIY_cjs = require('./chunk-P6A2OOIY.cjs');
6
6
 
7
7
  // src/parser/composables/useCborDiagnostic.ts
8
+ function isIndefiniteValue(value) {
9
+ return typeof value === "object" && value !== null && value[chunkP6A2OOIY_cjs.INDEFINITE_SYMBOL] === true;
10
+ }
8
11
  function isTaggedValue(value) {
9
12
  return typeof value === "object" && value !== null && "tag" in value && "value" in value && typeof value.tag === "number";
10
13
  }
@@ -70,6 +73,20 @@ function useCborDiagnostic() {
70
73
  if (value instanceof Uint8Array) {
71
74
  return `h'${bytesToHex(value)}'`;
72
75
  }
76
+ if (typeof value === "object" && value !== null && "type" in value) {
77
+ const t = value.type;
78
+ if (t === "cbor-byte-string") {
79
+ const bs = value;
80
+ return isIndefiniteValue(value) ? `(_ h'${bytesToHex(bs.bytes)}')` : `h'${bytesToHex(bs.bytes)}'`;
81
+ }
82
+ if (t === "cbor-text-string") {
83
+ const ts = value;
84
+ return isIndefiniteValue(value) ? `(_ "${escapeString(ts.text)}")` : `"${escapeString(ts.text)}"`;
85
+ }
86
+ }
87
+ if (typeof value === "object" && value !== null && "simpleValue" in value && typeof value.simpleValue === "number") {
88
+ return `simple(${value.simpleValue})`;
89
+ }
73
90
  if (isTaggedValue(value)) {
74
91
  const taggedContent = formatValue(
75
92
  value.value,
@@ -82,6 +99,7 @@ function useCborDiagnostic() {
82
99
  return `${value.tag}(${taggedContent})`;
83
100
  }
84
101
  if (Array.isArray(value)) {
102
+ indefinite = indefinite || isIndefiniteValue(value);
85
103
  if (value.length === 0) {
86
104
  return indefinite ? "[_ ]" : "[]";
87
105
  }
@@ -102,6 +120,7 @@ ${closeIndent}]`;
102
120
  }
103
121
  }
104
122
  if (value instanceof Map) {
123
+ indefinite = indefinite || isIndefiniteValue(value);
105
124
  if (value.size === 0) {
106
125
  return indefinite ? "{_ }" : "{}";
107
126
  }
@@ -412,27 +431,27 @@ var PathBuilder = {
412
431
 
413
432
  // src/index.ts
414
433
  function decode(input, options) {
415
- const { parse } = chunkRVG2BY32_cjs.useCborParser();
434
+ const { parse } = chunk3Z45RBZP_cjs.useCborParser();
416
435
  return parse(input, options);
417
436
  }
418
437
  function decodeWithSourceMap(input, options) {
419
- const { parseWithSourceMap } = chunkRVG2BY32_cjs.useCborParser();
438
+ const { parseWithSourceMap } = chunk3Z45RBZP_cjs.useCborParser();
420
439
  return parseWithSourceMap(input, options);
421
440
  }
422
441
  function encode(value, options) {
423
- const { encode: encodeValue } = chunkS4RXO6IB_cjs.useCborEncoder(options);
442
+ const { encode: encodeValue } = chunkHMUA5KLG_cjs.useCborEncoder(options);
424
443
  return encodeValue(value);
425
444
  }
426
445
  function encodeToHex(value, options) {
427
- const { encodeToHex: encodeValueToHex } = chunkS4RXO6IB_cjs.useCborEncoder(options);
446
+ const { encodeToHex: encodeValueToHex } = chunkHMUA5KLG_cjs.useCborEncoder(options);
428
447
  return encodeValueToHex(value);
429
448
  }
430
449
  function encodeToBytes(value, options) {
431
- const { encodeToBytes: encodeValueToBytes } = chunkS4RXO6IB_cjs.useCborEncoder(options);
450
+ const { encodeToBytes: encodeValueToBytes } = chunkHMUA5KLG_cjs.useCborEncoder(options);
432
451
  return encodeValueToBytes(value);
433
452
  }
434
453
  function encodeSequence(values, options) {
435
- const { encodeSequence: encodeSeq } = chunkS4RXO6IB_cjs.useCborEncoder(options);
454
+ const { encodeSequence: encodeSeq } = chunkHMUA5KLG_cjs.useCborEncoder(options);
436
455
  return encodeSeq(values);
437
456
  }
438
457
  var CborDecoder = class {
@@ -520,75 +539,75 @@ function decodeToDiagnostic(hexString, options) {
520
539
 
521
540
  Object.defineProperty(exports, "useCborCollection", {
522
541
  enumerable: true,
523
- get: function () { return chunkRVG2BY32_cjs.useCborCollection; }
542
+ get: function () { return chunk3Z45RBZP_cjs.useCborCollection; }
524
543
  });
525
544
  Object.defineProperty(exports, "useCborFloat", {
526
545
  enumerable: true,
527
- get: function () { return chunkRVG2BY32_cjs.useCborFloat; }
546
+ get: function () { return chunk3Z45RBZP_cjs.useCborFloat; }
528
547
  });
529
548
  Object.defineProperty(exports, "useCborInteger", {
530
549
  enumerable: true,
531
- get: function () { return chunkRVG2BY32_cjs.useCborInteger; }
550
+ get: function () { return chunk3Z45RBZP_cjs.useCborInteger; }
532
551
  });
533
552
  Object.defineProperty(exports, "useCborParser", {
534
553
  enumerable: true,
535
- get: function () { return chunkRVG2BY32_cjs.useCborParser; }
554
+ get: function () { return chunk3Z45RBZP_cjs.useCborParser; }
536
555
  });
537
556
  Object.defineProperty(exports, "useCborString", {
538
557
  enumerable: true,
539
- get: function () { return chunkRVG2BY32_cjs.useCborString; }
558
+ get: function () { return chunk3Z45RBZP_cjs.useCborString; }
540
559
  });
541
560
  Object.defineProperty(exports, "useCborTag", {
542
561
  enumerable: true,
543
- get: function () { return chunkRVG2BY32_cjs.useCborTag; }
562
+ get: function () { return chunk3Z45RBZP_cjs.useCborTag; }
544
563
  });
545
564
  Object.defineProperty(exports, "DEFAULT_ENCODE_OPTIONS", {
546
565
  enumerable: true,
547
- get: function () { return chunkS4RXO6IB_cjs.DEFAULT_ENCODE_OPTIONS; }
566
+ get: function () { return chunkHMUA5KLG_cjs.DEFAULT_ENCODE_OPTIONS; }
548
567
  });
549
568
  Object.defineProperty(exports, "useCborCollectionEncoder", {
550
569
  enumerable: true,
551
- get: function () { return chunkS4RXO6IB_cjs.useCborCollectionEncoder; }
570
+ get: function () { return chunkHMUA5KLG_cjs.useCborCollectionEncoder; }
552
571
  });
553
572
  Object.defineProperty(exports, "useCborEncoder", {
554
573
  enumerable: true,
555
- get: function () { return chunkS4RXO6IB_cjs.useCborEncoder; }
574
+ get: function () { return chunkHMUA5KLG_cjs.useCborEncoder; }
556
575
  });
557
576
  Object.defineProperty(exports, "useCborIntegerEncoder", {
558
577
  enumerable: true,
559
- get: function () { return chunkS4RXO6IB_cjs.useCborIntegerEncoder; }
578
+ get: function () { return chunkHMUA5KLG_cjs.useCborIntegerEncoder; }
560
579
  });
561
580
  Object.defineProperty(exports, "useCborSimpleEncoder", {
562
581
  enumerable: true,
563
- get: function () { return chunkS4RXO6IB_cjs.useCborSimpleEncoder; }
582
+ get: function () { return chunkHMUA5KLG_cjs.useCborSimpleEncoder; }
564
583
  });
565
584
  Object.defineProperty(exports, "useCborStringEncoder", {
566
585
  enumerable: true,
567
- get: function () { return chunkS4RXO6IB_cjs.useCborStringEncoder; }
586
+ get: function () { return chunkHMUA5KLG_cjs.useCborStringEncoder; }
568
587
  });
569
588
  Object.defineProperty(exports, "CborAdditionalInfo", {
570
589
  enumerable: true,
571
- get: function () { return chunkPD72MVTX_cjs.CborAdditionalInfo; }
590
+ get: function () { return chunkP6A2OOIY_cjs.CborAdditionalInfo; }
572
591
  });
573
592
  Object.defineProperty(exports, "CborMajorType", {
574
593
  enumerable: true,
575
- get: function () { return chunkPD72MVTX_cjs.CborMajorType; }
594
+ get: function () { return chunkP6A2OOIY_cjs.CborMajorType; }
576
595
  });
577
596
  Object.defineProperty(exports, "CborSimpleValue", {
578
597
  enumerable: true,
579
- get: function () { return chunkPD72MVTX_cjs.CborSimpleValue; }
598
+ get: function () { return chunkP6A2OOIY_cjs.CborSimpleValue; }
580
599
  });
581
600
  Object.defineProperty(exports, "CborTag", {
582
601
  enumerable: true,
583
- get: function () { return chunkPD72MVTX_cjs.CborTag; }
602
+ get: function () { return chunkP6A2OOIY_cjs.CborTag; }
584
603
  });
585
604
  Object.defineProperty(exports, "DEFAULT_LIMITS", {
586
605
  enumerable: true,
587
- get: function () { return chunkPD72MVTX_cjs.DEFAULT_LIMITS; }
606
+ get: function () { return chunkP6A2OOIY_cjs.DEFAULT_LIMITS; }
588
607
  });
589
608
  Object.defineProperty(exports, "DEFAULT_OPTIONS", {
590
609
  enumerable: true,
591
- get: function () { return chunkPD72MVTX_cjs.DEFAULT_OPTIONS; }
610
+ get: function () { return chunkP6A2OOIY_cjs.DEFAULT_OPTIONS; }
592
611
  });
593
612
  exports.CborDecoder = CborDecoder;
594
613
  exports.CborEncoder = CborEncoder;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/parser/composables/useCborDiagnostic.ts","../src/parser/utils/pathBuilder.ts","../src/index.ts"],"names":["toDiagnostic","useCborParser","useCborEncoder"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * useCborDiagnostic - RFC 8949 Appendix B Diagnostic Notation\n *\n * Converts CBOR values to human-readable diagnostic notation as defined\n * in RFC 8949 (Concise Binary Object Representation).\n *\n * @example\n * ```typescript\n * const { toDiagnostic } = useCborDiagnostic()\n *\n * toDiagnostic(100) // \"100\"\n * toDiagnostic(new Uint8Array([1,2])) // \"h'0102'\"\n * toDiagnostic([1, 2, 3]) // \"[1, 2, 3]\"\n * toDiagnostic({a: 1}) // '{\"a\": 1}'\n * ```\n */\n\n/**\n * Options for diagnostic notation output\n */\nexport interface DiagnosticOptions {\n /** Pretty print with indentation (default: false) */\n pretty?: boolean\n /** Indentation string for pretty printing (default: ' ') */\n indent?: string\n /** Maximum depth for nested structures (default: 100) */\n maxDepth?: number\n /** Mark as indefinite-length (default: false) */\n indefinite?: boolean\n /** Show byte offsets as comments (default: false) */\n showOffsets?: boolean\n}\n\n/**\n * Tagged value interface (CBOR Major Type 6)\n */\ninterface TaggedValue {\n tag: number\n value: unknown\n}\n\n/**\n * Check if value is a tagged value\n */\nfunction isTaggedValue(value: unknown): value is TaggedValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'tag' in value &&\n 'value' in value &&\n typeof (value as TaggedValue).tag === 'number'\n )\n}\n\n/**\n * Check if value is a plain object (not array, not special type)\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Uint8Array) &&\n !(value instanceof Map) &&\n !(value instanceof Set) &&\n !isTaggedValue(value) &&\n value.constructor === Object\n )\n}\n\n/**\n * Escape string for diagnostic notation (JSON-style escaping)\n */\nfunction escapeString(str: string): string {\n return str\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t')\n .replace(/[\\x00-\\x1f\\x7f-\\x9f]/g, (char) => {\n const code = char.charCodeAt(0)\n return `\\\\u${code.toString(16).padStart(4, '0')}`\n })\n}\n\n/**\n * Convert Uint8Array to hex string\n */\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n/**\n * Composable for CBOR diagnostic notation\n */\nexport function useCborDiagnostic() {\n /**\n * Convert a CBOR value to RFC 8949 diagnostic notation\n *\n * @param value - The CBOR value to convert\n * @param options - Formatting options\n * @returns Diagnostic notation string\n */\n const toDiagnostic = (\n value: unknown,\n options: DiagnosticOptions = {}\n ): string => {\n const {\n pretty = false,\n indent = ' ',\n maxDepth = 100,\n indefinite = false\n } = options\n\n return formatValue(value, 0, pretty, indent, maxDepth, indefinite)\n }\n\n /**\n * Internal recursive formatter\n */\n const formatValue = (\n value: unknown,\n depth: number,\n pretty: boolean,\n indent: string,\n maxDepth: number,\n indefinite: boolean\n ): string => {\n // Check depth limit\n if (depth > maxDepth) {\n return '...'\n }\n\n // Handle null/undefined\n if (value === null) {\n return 'null'\n }\n if (value === undefined) {\n return 'undefined'\n }\n\n // Handle booleans\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n\n // Handle numbers\n if (typeof value === 'number') {\n // Special float values\n if (Number.isNaN(value)) {\n return 'NaN'\n }\n if (value === Infinity) {\n return 'Infinity'\n }\n if (value === -Infinity) {\n return '-Infinity'\n }\n // Negative zero\n if (Object.is(value, -0)) {\n return '-0.0'\n }\n // Regular numbers\n if (Number.isInteger(value)) {\n return value.toString()\n }\n // Floats - preserve precision\n return value.toString()\n }\n\n // Handle BigInt\n if (typeof value === 'bigint') {\n return value.toString()\n }\n\n // Handle strings\n if (typeof value === 'string') {\n return `\"${escapeString(value)}\"`\n }\n\n // Handle byte strings (Uint8Array)\n if (value instanceof Uint8Array) {\n return `h'${bytesToHex(value)}'`\n }\n\n // Handle tagged values\n if (isTaggedValue(value)) {\n const taggedContent = formatValue(\n value.value,\n depth + 1,\n pretty,\n indent,\n maxDepth,\n false\n )\n return `${value.tag}(${taggedContent})`\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return indefinite ? '[_ ]' : '[]'\n }\n\n const items = value.map(item =>\n formatValue(item, depth + 1, pretty, indent, maxDepth, false)\n )\n\n if (pretty) {\n const prefix = indefinite ? '[_ ' : '['\n const lineIndent = indent.repeat(depth + 1)\n const closeIndent = indent.repeat(depth)\n return `${prefix}\\n${lineIndent}${items.join(`,\\n${lineIndent}`)}\\n${closeIndent}]`\n } else {\n const prefix = indefinite ? '[_ ' : '['\n return `${prefix}${items.join(', ')}]`\n }\n }\n\n // Handle Maps\n if (value instanceof Map) {\n if (value.size === 0) {\n return indefinite ? '{_ }' : '{}'\n }\n\n const entries: string[] = []\n for (const [k, v] of value) {\n const keyStr = formatValue(k, depth + 1, pretty, indent, maxDepth, false)\n const valueStr = formatValue(v, depth + 1, pretty, indent, maxDepth, false)\n entries.push(`${keyStr}: ${valueStr}`)\n }\n\n if (pretty) {\n const prefix = indefinite ? '{_ ' : '{'\n const lineIndent = indent.repeat(depth + 1)\n const closeIndent = indent.repeat(depth)\n return `${prefix}\\n${lineIndent}${entries.join(`,\\n${lineIndent}`)}\\n${closeIndent}}`\n } else {\n const prefix = indefinite ? '{_ ' : '{'\n return `${prefix}${entries.join(', ')}}`\n }\n }\n\n // Handle Sets (convert to array)\n if (value instanceof Set) {\n const items = Array.from(value).map(item =>\n formatValue(item, depth + 1, pretty, indent, maxDepth, false)\n )\n\n if (pretty) {\n const lineIndent = indent.repeat(depth + 1)\n const closeIndent = indent.repeat(depth)\n return `[\\n${lineIndent}${items.join(`,\\n${lineIndent}`)}\\n${closeIndent}]`\n } else {\n return `[${items.join(', ')}]`\n }\n }\n\n // Handle plain objects (as CBOR maps with string keys)\n if (isPlainObject(value)) {\n const keys = Object.keys(value)\n if (keys.length === 0) {\n return indefinite ? '{_ }' : '{}'\n }\n\n const entries = keys.map(key => {\n const keyStr = `\"${escapeString(key)}\"`\n const valueStr = formatValue(\n value[key],\n depth + 1,\n pretty,\n indent,\n maxDepth,\n false\n )\n return `${keyStr}: ${valueStr}`\n })\n\n if (pretty) {\n const prefix = indefinite ? '{_ ' : '{'\n const lineIndent = indent.repeat(depth + 1)\n const closeIndent = indent.repeat(depth)\n return `${prefix}\\n${lineIndent}${entries.join(`,\\n${lineIndent}`)}\\n${closeIndent}}`\n } else {\n const prefix = indefinite ? '{_ ' : '{'\n return `${prefix}${entries.join(', ')}}`\n }\n }\n\n // Fallback for unknown types\n return String(value)\n }\n\n /**\n * Parse diagnostic notation back to CBOR value\n * (Not fully implemented - for future use)\n */\n const fromDiagnostic = (diag: string): unknown => {\n // Basic parsing for common cases\n const trimmed = diag.trim()\n\n // Null/undefined\n if (trimmed === 'null') return null\n if (trimmed === 'undefined') return undefined\n\n // Booleans\n if (trimmed === 'true') return true\n if (trimmed === 'false') return false\n\n // Special floats\n if (trimmed === 'NaN') return NaN\n if (trimmed === 'Infinity') return Infinity\n if (trimmed === '-Infinity') return -Infinity\n\n // Numbers (including negative zero)\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n const num = Number(trimmed)\n if (trimmed === '-0.0' || trimmed === '-0') {\n return -0\n }\n return num\n }\n\n // Byte strings h'...'\n const hexMatch = trimmed.match(/^h'([0-9a-fA-F]*)'$/)\n if (hexMatch && hexMatch[1] !== undefined) {\n const hex = hexMatch[1]\n const bytes = new Uint8Array(hex.length / 2)\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16)\n }\n return bytes\n }\n\n // Strings \"...\"\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n // Basic unescape - full implementation would handle all escapes\n return trimmed.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\')\n }\n\n // For arrays, maps, tags - would need full parser\n // Return as string for now\n return trimmed\n }\n\n /**\n * Format value with type annotation (extended notation)\n */\n const toDiagnosticWithType = (\n value: unknown,\n majorType: number,\n options: DiagnosticOptions = {}\n ): string => {\n const typeNames: Record<number, string> = {\n 0: 'uint',\n 1: 'nint',\n 2: 'bstr',\n 3: 'tstr',\n 4: 'array',\n 5: 'map',\n 6: 'tag',\n 7: 'simple'\n }\n\n const typeName = typeNames[majorType] || 'unknown'\n const diag = toDiagnostic(value, options)\n\n return `${typeName}(${diag})`\n }\n\n return {\n toDiagnostic,\n fromDiagnostic,\n toDiagnosticWithType\n }\n}\n\nexport default useCborDiagnostic\n","/**\n * PathBuilder - Utilities for creating and manipulating source map paths\n *\n * Path format follows JSON Pointer (RFC 6901) with CBOR-specific extensions:\n * - Array indices: [0], [1], [2]\n * - Object/Map keys: .key, .nested.key\n * - Special markers: [#header], [#content], [#value]\n *\n * @example\n * ```typescript\n * import { PathBuilder } from './pathBuilder'\n *\n * const path = PathBuilder.arrayIndex('', 0) // \"[0]\"\n * const nested = PathBuilder.arrayIndex(path, 1) // \"[0][1]\"\n * const key = PathBuilder.mapKey(nested, 'amount') // \"[0][1].amount\"\n * const header = PathBuilder.header(key) // \"[0][1].amount[#header]\"\n * ```\n */\n\n/**\n * PathBuilder utility object with methods for creating and manipulating paths\n */\nexport const PathBuilder = {\n /**\n * Create root path (empty string)\n */\n root: (): string => '',\n\n /**\n * Create path for array index\n * @param parent - Parent path\n * @param index - Array index (0-based)\n * @returns Path string like \"[0]\" or \"[0][1]\"\n */\n arrayIndex: (parent: string, index: number): string => `${parent}[${index}]`,\n\n /**\n * Create path for map/object key\n * @param parent - Parent path\n * @param key - Key name (string or number)\n * @returns Path string like \".key\" or \"[0].key\"\n */\n mapKey: (parent: string, key: string | number): string => {\n const keyStr = String(key)\n // Escape special characters in key names\n const escapedKey = keyStr.replace(/[.\\[\\]\\\\]/g, '\\\\$&')\n return parent ? `${parent}.${escapedKey}` : `.${escapedKey}`\n },\n\n /**\n * Create path for map key by index (for non-string keys)\n * @param parent - Parent path\n * @param index - Key index in map\n * @returns Path string like \"[#key:0]\"\n */\n mapKeyIndex: (parent: string, index: number): string =>\n `${parent}[#key:${index}]`,\n\n /**\n * Create path for header portion of a value\n * Used for byte strings, text strings, arrays, maps, tags\n * @param parent - Parent path\n * @returns Path string like \"[0][#header]\"\n */\n header: (parent: string): string => `${parent}[#header]`,\n\n /**\n * Create path for content portion of a value\n * Used for byte strings and text strings\n * @param parent - Parent path\n * @returns Path string like \"[0][#content]\"\n */\n content: (parent: string): string => `${parent}[#content]`,\n\n /**\n * Create path for tagged value\n * @param parent - Parent path\n * @returns Path string like \"[0][#value]\"\n */\n tagValue: (parent: string): string => `${parent}[#value]`,\n\n /**\n * Normalize a path by removing special markers (#header, #content, #value)\n * Used for matching paths across different representations\n * @param path - Path to normalize\n * @returns Normalized path without special markers\n */\n normalize: (path: string): string => {\n return path.replace(/\\[#(header|content|value)\\]$/, '')\n },\n\n /**\n * Check if path is a header path\n * @param path - Path to check\n * @returns True if path ends with [#header]\n */\n isHeader: (path: string): boolean => path.endsWith('[#header]'),\n\n /**\n * Check if path is a content path\n * @param path - Path to check\n * @returns True if path ends with [#content]\n */\n isContent: (path: string): boolean => path.endsWith('[#content]'),\n\n /**\n * Check if path is a tag value path\n * @param path - Path to check\n * @returns True if path ends with [#value]\n */\n isTagValue: (path: string): boolean => path.endsWith('[#value]'),\n\n /**\n * Check if path has any special marker\n * @param path - Path to check\n * @returns True if path ends with any special marker\n */\n hasMarker: (path: string): boolean =>\n /\\[#(header|content|value)\\]$/.test(path),\n\n /**\n * Get parent path (one level up)\n * @param path - Path to get parent of\n * @returns Parent path or null if already at root\n */\n getParent: (path: string): string | null => {\n // First normalize to remove markers\n const normalized = PathBuilder.normalize(path)\n if (normalized === '') return null\n\n // Match array index or object key at end\n const arrayMatch = normalized.match(/^(.+)\\[\\d+\\]$/)\n if (arrayMatch && arrayMatch[1] !== undefined) return arrayMatch[1]\n\n const keyMatch = normalized.match(/^(.+)\\.[^.]+$/)\n if (keyMatch && keyMatch[1] !== undefined) return keyMatch[1]\n\n // Root level item\n if (normalized.startsWith('[') || normalized.startsWith('.')) {\n return ''\n }\n\n return null\n },\n\n /**\n * Get the depth (nesting level) of a path\n * @param path - Path to measure\n * @returns Number indicating nesting depth (0 for root)\n */\n getDepth: (path: string): number => {\n const normalized = PathBuilder.normalize(path)\n if (normalized === '') return 0\n\n // Count array indices and object keys\n const arrayDepth = (normalized.match(/\\[\\d+\\]/g) || []).length\n const keyDepth = (normalized.match(/\\./g) || []).length\n\n return arrayDepth + keyDepth\n },\n\n /**\n * Parse a path into its components\n * @param path - Path to parse\n * @returns Array of path segments\n */\n parse: (path: string): Array<{ type: 'index' | 'key' | 'marker'; value: string | number }> => {\n const normalized = PathBuilder.normalize(path)\n const segments: Array<{ type: 'index' | 'key' | 'marker'; value: string | number }> = []\n\n // Check for marker\n const markerMatch = path.match(/\\[#(header|content|value)\\]$/)\n\n // Parse the normalized path\n let remaining = normalized\n while (remaining) {\n // Array index\n const indexMatch = remaining.match(/^\\[(\\d+)\\]/)\n if (indexMatch && indexMatch[1] !== undefined) {\n segments.push({ type: 'index', value: parseInt(indexMatch[1], 10) })\n remaining = remaining.slice(indexMatch[0].length)\n continue\n }\n\n // Object key\n const keyMatch = remaining.match(/^\\.([^.\\[\\]]+)/)\n if (keyMatch && keyMatch[1] !== undefined) {\n // Unescape special characters\n const key = keyMatch[1].replace(/\\\\(.)/g, '$1')\n segments.push({ type: 'key', value: key })\n remaining = remaining.slice(keyMatch[0].length)\n continue\n }\n\n // Unknown format, break to avoid infinite loop\n break\n }\n\n // Add marker if present\n if (markerMatch && markerMatch[1] !== undefined) {\n segments.push({ type: 'marker', value: markerMatch[1] })\n }\n\n return segments\n },\n\n /**\n * Build a path from segments\n * @param segments - Array of path segments\n * @returns Path string\n */\n build: (segments: Array<{ type: 'index' | 'key' | 'marker'; value: string | number }>): string => {\n let path = ''\n\n for (const segment of segments) {\n if (segment.type === 'index') {\n path += `[${segment.value}]`\n } else if (segment.type === 'key') {\n const escapedKey = String(segment.value).replace(/[.\\[\\]\\\\]/g, '\\\\$&')\n path += `.${escapedKey}`\n } else if (segment.type === 'marker') {\n path += `[#${segment.value}]`\n }\n }\n\n return path\n },\n\n /**\n * Join multiple path segments\n * @param paths - Path segments to join\n * @returns Combined path\n */\n join: (...paths: string[]): string => {\n return paths.filter(p => p !== '').join('')\n },\n\n /**\n * Check if a path is a descendant of another path\n * @param path - Path to check\n * @param ancestor - Potential ancestor path\n * @returns True if path is a descendant of ancestor\n */\n isDescendantOf: (path: string, ancestor: string): boolean => {\n const normalizedPath = PathBuilder.normalize(path)\n const normalizedAncestor = PathBuilder.normalize(ancestor)\n\n if (normalizedAncestor === '') {\n return normalizedPath !== ''\n }\n\n return normalizedPath.startsWith(normalizedAncestor) &&\n normalizedPath.length > normalizedAncestor.length &&\n (normalizedPath[normalizedAncestor.length] === '[' ||\n normalizedPath[normalizedAncestor.length] === '.')\n }\n}\n\nexport default PathBuilder\n","/**\n * NACHOS - Not Another CBOR Handling Object System\n *\n * RFC 8949 CBOR (Concise Binary Object Representation) encoder and decoder\n * with full source map support for interactive debugging.\n *\n * @module @marcuspuchalla/nachos\n * @see https://datatracker.ietf.org/doc/html/rfc8949\n *\n * @example\n * ```typescript\n * // Simple decoding\n * import { decode } from '@marcuspuchalla/nachos'\n * const result = decode('1864') // { value: 100, bytesRead: 2 }\n *\n * // Simple encoding\n * import { encode } from '@marcuspuchalla/nachos'\n * const { hex, bytes } = encode(100) // hex: \"1864\"\n *\n * // With source maps for debugging\n * import { decodeWithSourceMap } from '@marcuspuchalla/nachos'\n * const { value, sourceMap } = decodeWithSourceMap('d87980')\n * // sourceMap links hex bytes to decoded values\n * ```\n */\n\n// Re-export from parser (decoder)\nexport { useCborParser } from './parser/composables/useCborParser'\nexport { useCborInteger } from './parser/composables/useCborInteger'\nexport { useCborString } from './parser/composables/useCborString'\nexport { useCborCollection } from './parser/composables/useCborCollection'\nexport { useCborFloat } from './parser/composables/useCborFloat'\nexport { useCborTag } from './parser/composables/useCborTag'\nexport { useCborDiagnostic } from './parser/composables/useCborDiagnostic'\nexport type { DiagnosticOptions } from './parser/composables/useCborDiagnostic'\n\n// Re-export utilities\nexport { PathBuilder } from './parser/utils/pathBuilder'\n\n// Re-export from encoder\nexport { useCborEncoder } from './encoder/composables/useCborEncoder'\nexport { useCborIntegerEncoder } from './encoder/composables/useCborIntegerEncoder'\nexport { useCborStringEncoder } from './encoder/composables/useCborStringEncoder'\nexport { useCborCollectionEncoder } from './encoder/composables/useCborCollectionEncoder'\nexport { useCborSimpleEncoder } from './encoder/composables/useCborSimpleEncoder'\n\n// Re-export types\nexport type {\n // Parser types\n ParseResult,\n ParseResultWithMap,\n ParseOptions,\n ParseError,\n ParserLimits,\n CborContext,\n CborValue,\n CborMap,\n TaggedValue,\n PlutusData,\n PlutusConstr,\n PlutusMap,\n PlutusList,\n PlutusInt,\n PlutusBytes,\n SourceMapEntry,\n Result\n} from './parser/types'\n\nexport {\n // Default options\n DEFAULT_OPTIONS,\n DEFAULT_LIMITS,\n // Enums\n CborMajorType,\n CborAdditionalInfo,\n CborSimpleValue,\n CborTag\n} from './parser/types'\n\nexport type {\n // Encoder types\n EncodeResult,\n EncodeOptions,\n EncodableValue,\n EncodeContext\n} from './encoder/types'\n\nexport {\n DEFAULT_ENCODE_OPTIONS\n} from './encoder/types'\n\n// Convenience exports with cleaner names for library users\nimport { useCborParser } from './parser/composables/useCborParser'\nimport { useCborEncoder } from './encoder/composables/useCborEncoder'\nimport type { ParseResult, ParseResultWithMap, ParseOptions } from './parser/types'\nimport type { EncodeResult, EncodeOptions, EncodableValue } from './encoder/types'\n\n/**\n * Decode CBOR data to JavaScript value\n *\n * Accepts either a hex string or a Uint8Array of raw CBOR bytes.\n * When passing a Uint8Array, the bytes are used directly without\n * hex conversion, which is more efficient for binary sources\n * (WebSocket, fetch, file I/O, etc.).\n *\n * @param input - CBOR data as hex string (e.g., \"1864\") or Uint8Array\n * @param options - Optional parser configuration\n * @returns Decoded value and number of bytes consumed\n *\n * @throws {Error} If input is invalid or malformed CBOR\n *\n * @example\n * ```typescript\n * // Decode from hex string\n * decode('1864') // { value: 100, bytesRead: 2 }\n *\n * // Decode from Uint8Array (zero-copy, no hex conversion)\n * decode(new Uint8Array([0x18, 0x64])) // { value: 100, bytesRead: 2 }\n *\n * // Decode string\n * decode('6449455446') // { value: \"IETF\", bytesRead: 5 }\n *\n * // Decode array\n * decode('83010203') // { value: [1, 2, 3], bytesRead: 4 }\n *\n * // With strict validation\n * decode('1864', { strict: true })\n *\n * // With canonical validation\n * decode('a16161 01', { validateCanonical: true })\n * ```\n *\n * @see {@link https://datatracker.ietf.org/doc/html/rfc8949 | RFC 8949}\n */\nexport function decode(input: string | Uint8Array, options?: ParseOptions): ParseResult {\n const { parse } = useCborParser()\n return parse(input, options)\n}\n\n/**\n * Decode CBOR data with source map generation\n *\n * Source maps provide bidirectional linking between hex bytes and decoded values,\n * enabling interactive debugging visualizations.\n *\n * Accepts either a hex string or a Uint8Array of raw CBOR bytes.\n *\n * @param input - CBOR data as hex string or Uint8Array\n * @param options - Optional parser configuration\n * @returns Decoded value, byte count, and source map\n *\n * @example\n * ```typescript\n * const { value, sourceMap } = decodeWithSourceMap('d87980')\n * // value: { tag: 121, value: [] }\n * // sourceMap: [\n * // { path: '', start: 0, end: 3, majorType: 6, type: 'Tag 121', children: ['.value'] },\n * // { path: '.value', start: 2, end: 3, majorType: 4, type: 'Array', parent: '' }\n * // ]\n *\n * // From Uint8Array\n * const { value, sourceMap } = decodeWithSourceMap(new Uint8Array([0xd8, 0x79, 0x80]))\n * ```\n */\nexport function decodeWithSourceMap(input: string | Uint8Array, options?: ParseOptions): ParseResultWithMap {\n const { parseWithSourceMap } = useCborParser()\n return parseWithSourceMap(input, options)\n}\n\n/**\n * Encode JavaScript value to CBOR\n *\n * Automatically detects value type and uses appropriate CBOR encoding.\n * Supports: numbers, bigints, strings, booleans, null, undefined, Uint8Arrays, arrays, objects, and tagged values.\n *\n * @param value - JavaScript value to encode\n * @param options - Optional encoder configuration\n * @returns CBOR bytes and hex string\n *\n * @throws {Error} If value type is unsupported or encoding fails\n *\n * @example\n * ```typescript\n * // Encode number\n * encode(100) // { hex: \"1864\", bytes: Uint8Array[0x18, 0x64] }\n *\n * // Encode string\n * encode(\"IETF\") // { hex: \"6449455446\", bytes: ... }\n *\n * // Encode array\n * encode([1, 2, 3]) // { hex: \"83010203\", bytes: ... }\n *\n * // Encode map (canonical - sorted keys)\n * encode({ z: 1, a: 2 }, { canonical: true })\n * // Keys will be sorted: { a: 2, z: 1 }\n *\n * // Encode tagged value\n * encode({ tag: 121, value: [] }) // { hex: \"d87980\", bytes: ... }\n * ```\n */\nexport function encode(value: EncodableValue, options?: Partial<EncodeOptions>): EncodeResult {\n const { encode: encodeValue } = useCborEncoder(options)\n return encodeValue(value)\n}\n\n/**\n * Encode JavaScript value to CBOR hex string\n *\n * Convenience function that returns only the hex string (not the bytes).\n *\n * @param value - JavaScript value to encode\n * @param options - Optional encoder configuration\n * @returns CBOR hex string\n *\n * @example\n * ```typescript\n * encodeToHex(100) // \"1864\"\n * encodeToHex([1, 2, 3]) // \"83010203\"\n * encodeToHex({ a: 1 }, { canonical: true }) // \"a16161 01\"\n * ```\n */\nexport function encodeToHex(value: EncodableValue, options?: Partial<EncodeOptions>): string {\n const { encodeToHex: encodeValueToHex } = useCborEncoder(options)\n return encodeValueToHex(value)\n}\n\n/**\n * Encode JavaScript value to CBOR bytes\n *\n * Convenience function that returns only the bytes (not the hex string).\n *\n * @param value - JavaScript value to encode\n * @param options - Optional encoder configuration\n * @returns CBOR bytes as Uint8Array\n *\n * @example\n * ```typescript\n * const bytes = encodeToBytes(100) // Uint8Array[0x18, 0x64]\n * const bytes = encodeToBytes([1, 2, 3]) // Uint8Array[0x83, 0x01, 0x02, 0x03]\n * ```\n */\nexport function encodeToBytes(value: EncodableValue, options?: Partial<EncodeOptions>): Uint8Array {\n const { encodeToBytes: encodeValueToBytes } = useCborEncoder(options)\n return encodeValueToBytes(value)\n}\n\n/**\n * Encode multiple values as CBOR sequence\n *\n * Creates a CBOR sequence (RFC 8742) by concatenating multiple encoded values.\n * Useful for streaming or batch encoding.\n *\n * @param values - Array of values to encode\n * @param options - Optional encoder configuration\n * @returns Concatenated CBOR bytes and hex string\n *\n * @example\n * ```typescript\n * encodeSequence([1, \"hello\", [2, 3]])\n * // Returns concatenated encoding: 0x01 + 0x6568656c6c6f + 0x820203\n * ```\n *\n * @see {@link https://datatracker.ietf.org/doc/html/rfc8742 | RFC 8742 - CBOR Sequences}\n */\nexport function encodeSequence(values: EncodableValue[], options?: Partial<EncodeOptions>): EncodeResult {\n const { encodeSequence: encodeSeq } = useCborEncoder(options)\n return encodeSeq(values)\n}\n\n/**\n * Class-based CBOR decoder\n *\n * Provides an object-oriented interface for CBOR decoding.\n * Useful when you need to maintain decoder state or configuration.\n *\n * @example\n * ```typescript\n * const decoder = new CborDecoder({ strict: true })\n *\n * const result1 = decoder.decode('1864')\n * const result2 = decoder.decode('6449455446')\n *\n * const withMap = decoder.decodeWithSourceMap('d87980')\n * ```\n */\nexport class CborDecoder {\n private options: ParseOptions\n\n /**\n * Create a new CBOR decoder\n *\n * @param options - Parser configuration\n */\n constructor(options?: ParseOptions) {\n this.options = options || {}\n }\n\n /**\n * Decode CBOR data\n *\n * @param input - CBOR data as hex string or Uint8Array\n * @returns Decoded value and byte count\n */\n decode(input: string | Uint8Array): ParseResult {\n return decode(input, this.options)\n }\n\n /**\n * Decode CBOR data with source map\n *\n * @param input - CBOR data as hex string or Uint8Array\n * @returns Decoded value, byte count, and source map\n */\n decodeWithSourceMap(input: string | Uint8Array): ParseResultWithMap {\n return decodeWithSourceMap(input, this.options)\n }\n}\n\n/**\n * Class-based CBOR encoder\n *\n * Provides an object-oriented interface for CBOR encoding.\n * Useful when you need to maintain encoder state or configuration.\n *\n * @example\n * ```typescript\n * const encoder = new CborEncoder({ canonical: true })\n *\n * const result1 = encoder.encode(100)\n * const result2 = encoder.encode([1, 2, 3])\n *\n * const hex = encoder.encodeToHex({ a: 1 }) // Keys will be sorted\n * ```\n */\nexport class CborEncoder {\n private options: Partial<EncodeOptions>\n\n /**\n * Create a new CBOR encoder\n *\n * @param options - Encoder configuration\n */\n constructor(options?: Partial<EncodeOptions>) {\n this.options = options || {}\n }\n\n /**\n * Encode value to CBOR\n *\n * @param value - JavaScript value to encode\n * @returns CBOR bytes and hex string\n */\n encode(value: EncodableValue): EncodeResult {\n return encode(value, this.options)\n }\n\n /**\n * Encode value to CBOR hex string\n *\n * @param value - JavaScript value to encode\n * @returns CBOR hex string\n */\n encodeToHex(value: EncodableValue): string {\n return encodeToHex(value, this.options)\n }\n\n /**\n * Encode value to CBOR bytes\n *\n * @param value - JavaScript value to encode\n * @returns CBOR bytes\n */\n encodeToBytes(value: EncodableValue): Uint8Array {\n return encodeToBytes(value, this.options)\n }\n\n /**\n * Encode multiple values as CBOR sequence\n *\n * @param values - Array of values to encode\n * @returns Concatenated CBOR encoding\n */\n encodeSequence(values: EncodableValue[]): EncodeResult {\n return encodeSequence(values, this.options)\n }\n}\n\n// Import diagnostic notation utilities\nimport { useCborDiagnostic } from './parser/composables/useCborDiagnostic'\nimport type { DiagnosticOptions } from './parser/composables/useCborDiagnostic'\n\n/**\n * Convert a JavaScript value to RFC 8949 diagnostic notation\n *\n * Diagnostic notation is a human-readable representation of CBOR data\n * as defined in RFC 8949 Appendix B.\n *\n * @param value - JavaScript value to convert\n * @param options - Optional formatting options\n * @returns Diagnostic notation string\n *\n * @example\n * ```typescript\n * toDiagnostic(100) // \"100\"\n * toDiagnostic(new Uint8Array([1,2])) // \"h'0102'\"\n * toDiagnostic([1, 2, 3]) // \"[1, 2, 3]\"\n * toDiagnostic({a: 1}) // '{\"a\": 1}'\n * toDiagnostic({tag: 1, value: 123}) // \"1(123)\"\n *\n * // Pretty print\n * toDiagnostic([1, 2], { pretty: true })\n * // \"[\\n 1,\\n 2\\n]\"\n *\n * // Indefinite length\n * toDiagnostic([1, 2], { indefinite: true })\n * // \"[_ 1, 2]\"\n * ```\n */\nexport function toDiagnostic(value: unknown, options?: DiagnosticOptions): string {\n const { toDiagnostic: convert } = useCborDiagnostic()\n return convert(value, options)\n}\n\n/**\n * Decode CBOR and return diagnostic notation\n *\n * Combines decoding and diagnostic conversion in one step.\n *\n * @param hexString - CBOR data as hex string\n * @param options - Optional formatting options\n * @returns Diagnostic notation string\n *\n * @example\n * ```typescript\n * decodeToDiagnostic('1864') // \"100\"\n * decodeToDiagnostic('83010203') // \"[1, 2, 3]\"\n * decodeToDiagnostic('d87980') // \"121([])\"\n * ```\n */\nexport function decodeToDiagnostic(hexString: string, options?: DiagnosticOptions): string {\n const { value } = decode(hexString)\n return toDiagnostic(value, options)\n}\n"]}
1
+ {"version":3,"sources":["../src/parser/composables/useCborDiagnostic.ts","../src/parser/utils/pathBuilder.ts","../src/index.ts"],"names":["INDEFINITE_SYMBOL","toDiagnostic","useCborParser","useCborEncoder"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * useCborDiagnostic - RFC 8949 Appendix B Diagnostic Notation\n *\n * Converts CBOR values to human-readable diagnostic notation as defined\n * in RFC 8949 (Concise Binary Object Representation).\n *\n * @example\n * ```typescript\n * const { toDiagnostic } = useCborDiagnostic()\n *\n * toDiagnostic(100) // \"100\"\n * toDiagnostic(new Uint8Array([1,2])) // \"h'0102'\"\n * toDiagnostic([1, 2, 3]) // \"[1, 2, 3]\"\n * toDiagnostic({a: 1}) // '{\"a\": 1}'\n * ```\n */\n\nimport { INDEFINITE_SYMBOL } from '../types'\n\n/** Detect the indefinite-length marker attached by the parser to a value. */\nfunction isIndefiniteValue(value: unknown): boolean {\n return typeof value === 'object' && value !== null && (value as any)[INDEFINITE_SYMBOL] === true\n}\n\n/**\n * Options for diagnostic notation output\n */\nexport interface DiagnosticOptions {\n /** Pretty print with indentation (default: false) */\n pretty?: boolean\n /** Indentation string for pretty printing (default: ' ') */\n indent?: string\n /** Maximum depth for nested structures (default: 100) */\n maxDepth?: number\n /** Mark as indefinite-length (default: false) */\n indefinite?: boolean\n /** Show byte offsets as comments (default: false) */\n showOffsets?: boolean\n}\n\n/**\n * Tagged value interface (CBOR Major Type 6)\n */\ninterface TaggedValue {\n tag: number\n value: unknown\n}\n\n/**\n * Check if value is a tagged value\n */\nfunction isTaggedValue(value: unknown): value is TaggedValue {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'tag' in value &&\n 'value' in value &&\n typeof (value as TaggedValue).tag === 'number'\n )\n}\n\n/**\n * Check if value is a plain object (not array, not special type)\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !(value instanceof Uint8Array) &&\n !(value instanceof Map) &&\n !(value instanceof Set) &&\n !isTaggedValue(value) &&\n value.constructor === Object\n )\n}\n\n/**\n * Escape string for diagnostic notation (JSON-style escaping)\n */\nfunction escapeString(str: string): string {\n return str\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\t/g, '\\\\t')\n .replace(/[\\x00-\\x1f\\x7f-\\x9f]/g, (char) => {\n const code = char.charCodeAt(0)\n return `\\\\u${code.toString(16).padStart(4, '0')}`\n })\n}\n\n/**\n * Convert Uint8Array to hex string\n */\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n/**\n * Composable for CBOR diagnostic notation\n */\nexport function useCborDiagnostic() {\n /**\n * Convert a CBOR value to RFC 8949 diagnostic notation\n *\n * @param value - The CBOR value to convert\n * @param options - Formatting options\n * @returns Diagnostic notation string\n */\n const toDiagnostic = (\n value: unknown,\n options: DiagnosticOptions = {}\n ): string => {\n const {\n pretty = false,\n indent = ' ',\n maxDepth = 100,\n indefinite = false\n } = options\n\n return formatValue(value, 0, pretty, indent, maxDepth, indefinite)\n }\n\n /**\n * Internal recursive formatter\n */\n const formatValue = (\n value: unknown,\n depth: number,\n pretty: boolean,\n indent: string,\n maxDepth: number,\n indefinite: boolean\n ): string => {\n // Check depth limit\n if (depth > maxDepth) {\n return '...'\n }\n\n // Handle null/undefined\n if (value === null) {\n return 'null'\n }\n if (value === undefined) {\n return 'undefined'\n }\n\n // Handle booleans\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false'\n }\n\n // Handle numbers\n if (typeof value === 'number') {\n // Special float values\n if (Number.isNaN(value)) {\n return 'NaN'\n }\n if (value === Infinity) {\n return 'Infinity'\n }\n if (value === -Infinity) {\n return '-Infinity'\n }\n // Negative zero\n if (Object.is(value, -0)) {\n return '-0.0'\n }\n // Regular numbers\n if (Number.isInteger(value)) {\n return value.toString()\n }\n // Floats - preserve precision\n return value.toString()\n }\n\n // Handle BigInt\n if (typeof value === 'bigint') {\n return value.toString()\n }\n\n // Handle strings\n if (typeof value === 'string') {\n return `\"${escapeString(value)}\"`\n }\n\n // Handle byte strings (Uint8Array)\n if (value instanceof Uint8Array) {\n return `h'${bytesToHex(value)}'`\n }\n\n // Handle parser wrapper types for indefinite-length strings\n if (typeof value === 'object' && value !== null && 'type' in value) {\n const t = (value as { type?: string }).type\n if (t === 'cbor-byte-string') {\n const bs = value as unknown as { bytes: Uint8Array }\n return isIndefiniteValue(value) ? `(_ h'${bytesToHex(bs.bytes)}')` : `h'${bytesToHex(bs.bytes)}'`\n }\n if (t === 'cbor-text-string') {\n const ts = value as unknown as { text: string }\n return isIndefiniteValue(value) ? `(_ \"${escapeString(ts.text)}\")` : `\"${escapeString(ts.text)}\"`\n }\n }\n\n // Handle unassigned simple values (Major Type 7): simple(N)\n if (typeof value === 'object' && value !== null && 'simpleValue' in value &&\n typeof (value as { simpleValue?: unknown }).simpleValue === 'number') {\n return `simple(${(value as { simpleValue: number }).simpleValue})`\n }\n\n // Handle tagged values\n if (isTaggedValue(value)) {\n const taggedContent = formatValue(\n value.value,\n depth + 1,\n pretty,\n indent,\n maxDepth,\n false\n )\n return `${value.tag}(${taggedContent})`\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n indefinite = indefinite || isIndefiniteValue(value)\n if (value.length === 0) {\n return indefinite ? '[_ ]' : '[]'\n }\n\n const items = value.map(item =>\n formatValue(item, depth + 1, pretty, indent, maxDepth, false)\n )\n\n if (pretty) {\n const prefix = indefinite ? '[_ ' : '['\n const lineIndent = indent.repeat(depth + 1)\n const closeIndent = indent.repeat(depth)\n return `${prefix}\\n${lineIndent}${items.join(`,\\n${lineIndent}`)}\\n${closeIndent}]`\n } else {\n const prefix = indefinite ? '[_ ' : '['\n return `${prefix}${items.join(', ')}]`\n }\n }\n\n // Handle Maps\n if (value instanceof Map) {\n indefinite = indefinite || isIndefiniteValue(value)\n if (value.size === 0) {\n return indefinite ? '{_ }' : '{}'\n }\n\n const entries: string[] = []\n for (const [k, v] of value) {\n const keyStr = formatValue(k, depth + 1, pretty, indent, maxDepth, false)\n const valueStr = formatValue(v, depth + 1, pretty, indent, maxDepth, false)\n entries.push(`${keyStr}: ${valueStr}`)\n }\n\n if (pretty) {\n const prefix = indefinite ? '{_ ' : '{'\n const lineIndent = indent.repeat(depth + 1)\n const closeIndent = indent.repeat(depth)\n return `${prefix}\\n${lineIndent}${entries.join(`,\\n${lineIndent}`)}\\n${closeIndent}}`\n } else {\n const prefix = indefinite ? '{_ ' : '{'\n return `${prefix}${entries.join(', ')}}`\n }\n }\n\n // Handle Sets (convert to array)\n if (value instanceof Set) {\n const items = Array.from(value).map(item =>\n formatValue(item, depth + 1, pretty, indent, maxDepth, false)\n )\n\n if (pretty) {\n const lineIndent = indent.repeat(depth + 1)\n const closeIndent = indent.repeat(depth)\n return `[\\n${lineIndent}${items.join(`,\\n${lineIndent}`)}\\n${closeIndent}]`\n } else {\n return `[${items.join(', ')}]`\n }\n }\n\n // Handle plain objects (as CBOR maps with string keys)\n if (isPlainObject(value)) {\n const keys = Object.keys(value)\n if (keys.length === 0) {\n return indefinite ? '{_ }' : '{}'\n }\n\n const entries = keys.map(key => {\n const keyStr = `\"${escapeString(key)}\"`\n const valueStr = formatValue(\n value[key],\n depth + 1,\n pretty,\n indent,\n maxDepth,\n false\n )\n return `${keyStr}: ${valueStr}`\n })\n\n if (pretty) {\n const prefix = indefinite ? '{_ ' : '{'\n const lineIndent = indent.repeat(depth + 1)\n const closeIndent = indent.repeat(depth)\n return `${prefix}\\n${lineIndent}${entries.join(`,\\n${lineIndent}`)}\\n${closeIndent}}`\n } else {\n const prefix = indefinite ? '{_ ' : '{'\n return `${prefix}${entries.join(', ')}}`\n }\n }\n\n // Fallback for unknown types\n return String(value)\n }\n\n /**\n * Parse diagnostic notation back to CBOR value\n * (Not fully implemented - for future use)\n */\n const fromDiagnostic = (diag: string): unknown => {\n // Basic parsing for common cases\n const trimmed = diag.trim()\n\n // Null/undefined\n if (trimmed === 'null') return null\n if (trimmed === 'undefined') return undefined\n\n // Booleans\n if (trimmed === 'true') return true\n if (trimmed === 'false') return false\n\n // Special floats\n if (trimmed === 'NaN') return NaN\n if (trimmed === 'Infinity') return Infinity\n if (trimmed === '-Infinity') return -Infinity\n\n // Numbers (including negative zero)\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n const num = Number(trimmed)\n if (trimmed === '-0.0' || trimmed === '-0') {\n return -0\n }\n return num\n }\n\n // Byte strings h'...'\n const hexMatch = trimmed.match(/^h'([0-9a-fA-F]*)'$/)\n if (hexMatch && hexMatch[1] !== undefined) {\n const hex = hexMatch[1]\n const bytes = new Uint8Array(hex.length / 2)\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16)\n }\n return bytes\n }\n\n // Strings \"...\"\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"')) {\n // Basic unescape - full implementation would handle all escapes\n return trimmed.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\')\n }\n\n // For arrays, maps, tags - would need full parser\n // Return as string for now\n return trimmed\n }\n\n /**\n * Format value with type annotation (extended notation)\n */\n const toDiagnosticWithType = (\n value: unknown,\n majorType: number,\n options: DiagnosticOptions = {}\n ): string => {\n const typeNames: Record<number, string> = {\n 0: 'uint',\n 1: 'nint',\n 2: 'bstr',\n 3: 'tstr',\n 4: 'array',\n 5: 'map',\n 6: 'tag',\n 7: 'simple'\n }\n\n const typeName = typeNames[majorType] || 'unknown'\n const diag = toDiagnostic(value, options)\n\n return `${typeName}(${diag})`\n }\n\n return {\n toDiagnostic,\n fromDiagnostic,\n toDiagnosticWithType\n }\n}\n\nexport default useCborDiagnostic\n","/**\n * PathBuilder - Utilities for creating and manipulating source map paths\n *\n * Path format follows JSON Pointer (RFC 6901) with CBOR-specific extensions:\n * - Array indices: [0], [1], [2]\n * - Object/Map keys: .key, .nested.key\n * - Special markers: [#header], [#content], [#value]\n *\n * @example\n * ```typescript\n * import { PathBuilder } from './pathBuilder'\n *\n * const path = PathBuilder.arrayIndex('', 0) // \"[0]\"\n * const nested = PathBuilder.arrayIndex(path, 1) // \"[0][1]\"\n * const key = PathBuilder.mapKey(nested, 'amount') // \"[0][1].amount\"\n * const header = PathBuilder.header(key) // \"[0][1].amount[#header]\"\n * ```\n */\n\n/**\n * PathBuilder utility object with methods for creating and manipulating paths\n */\nexport const PathBuilder = {\n /**\n * Create root path (empty string)\n */\n root: (): string => '',\n\n /**\n * Create path for array index\n * @param parent - Parent path\n * @param index - Array index (0-based)\n * @returns Path string like \"[0]\" or \"[0][1]\"\n */\n arrayIndex: (parent: string, index: number): string => `${parent}[${index}]`,\n\n /**\n * Create path for map/object key\n * @param parent - Parent path\n * @param key - Key name (string or number)\n * @returns Path string like \".key\" or \"[0].key\"\n */\n mapKey: (parent: string, key: string | number): string => {\n const keyStr = String(key)\n // Escape special characters in key names\n const escapedKey = keyStr.replace(/[.\\[\\]\\\\]/g, '\\\\$&')\n return parent ? `${parent}.${escapedKey}` : `.${escapedKey}`\n },\n\n /**\n * Create path for map key by index (for non-string keys)\n * @param parent - Parent path\n * @param index - Key index in map\n * @returns Path string like \"[#key:0]\"\n */\n mapKeyIndex: (parent: string, index: number): string =>\n `${parent}[#key:${index}]`,\n\n /**\n * Create path for header portion of a value\n * Used for byte strings, text strings, arrays, maps, tags\n * @param parent - Parent path\n * @returns Path string like \"[0][#header]\"\n */\n header: (parent: string): string => `${parent}[#header]`,\n\n /**\n * Create path for content portion of a value\n * Used for byte strings and text strings\n * @param parent - Parent path\n * @returns Path string like \"[0][#content]\"\n */\n content: (parent: string): string => `${parent}[#content]`,\n\n /**\n * Create path for tagged value\n * @param parent - Parent path\n * @returns Path string like \"[0][#value]\"\n */\n tagValue: (parent: string): string => `${parent}[#value]`,\n\n /**\n * Normalize a path by removing special markers (#header, #content, #value)\n * Used for matching paths across different representations\n * @param path - Path to normalize\n * @returns Normalized path without special markers\n */\n normalize: (path: string): string => {\n return path.replace(/\\[#(header|content|value)\\]$/, '')\n },\n\n /**\n * Check if path is a header path\n * @param path - Path to check\n * @returns True if path ends with [#header]\n */\n isHeader: (path: string): boolean => path.endsWith('[#header]'),\n\n /**\n * Check if path is a content path\n * @param path - Path to check\n * @returns True if path ends with [#content]\n */\n isContent: (path: string): boolean => path.endsWith('[#content]'),\n\n /**\n * Check if path is a tag value path\n * @param path - Path to check\n * @returns True if path ends with [#value]\n */\n isTagValue: (path: string): boolean => path.endsWith('[#value]'),\n\n /**\n * Check if path has any special marker\n * @param path - Path to check\n * @returns True if path ends with any special marker\n */\n hasMarker: (path: string): boolean =>\n /\\[#(header|content|value)\\]$/.test(path),\n\n /**\n * Get parent path (one level up)\n * @param path - Path to get parent of\n * @returns Parent path or null if already at root\n */\n getParent: (path: string): string | null => {\n // First normalize to remove markers\n const normalized = PathBuilder.normalize(path)\n if (normalized === '') return null\n\n // Match array index or object key at end\n const arrayMatch = normalized.match(/^(.+)\\[\\d+\\]$/)\n if (arrayMatch && arrayMatch[1] !== undefined) return arrayMatch[1]\n\n const keyMatch = normalized.match(/^(.+)\\.[^.]+$/)\n if (keyMatch && keyMatch[1] !== undefined) return keyMatch[1]\n\n // Root level item\n if (normalized.startsWith('[') || normalized.startsWith('.')) {\n return ''\n }\n\n return null\n },\n\n /**\n * Get the depth (nesting level) of a path\n * @param path - Path to measure\n * @returns Number indicating nesting depth (0 for root)\n */\n getDepth: (path: string): number => {\n const normalized = PathBuilder.normalize(path)\n if (normalized === '') return 0\n\n // Count array indices and object keys\n const arrayDepth = (normalized.match(/\\[\\d+\\]/g) || []).length\n const keyDepth = (normalized.match(/\\./g) || []).length\n\n return arrayDepth + keyDepth\n },\n\n /**\n * Parse a path into its components\n * @param path - Path to parse\n * @returns Array of path segments\n */\n parse: (path: string): Array<{ type: 'index' | 'key' | 'marker'; value: string | number }> => {\n const normalized = PathBuilder.normalize(path)\n const segments: Array<{ type: 'index' | 'key' | 'marker'; value: string | number }> = []\n\n // Check for marker\n const markerMatch = path.match(/\\[#(header|content|value)\\]$/)\n\n // Parse the normalized path\n let remaining = normalized\n while (remaining) {\n // Array index\n const indexMatch = remaining.match(/^\\[(\\d+)\\]/)\n if (indexMatch && indexMatch[1] !== undefined) {\n segments.push({ type: 'index', value: parseInt(indexMatch[1], 10) })\n remaining = remaining.slice(indexMatch[0].length)\n continue\n }\n\n // Object key\n const keyMatch = remaining.match(/^\\.([^.\\[\\]]+)/)\n if (keyMatch && keyMatch[1] !== undefined) {\n // Unescape special characters\n const key = keyMatch[1].replace(/\\\\(.)/g, '$1')\n segments.push({ type: 'key', value: key })\n remaining = remaining.slice(keyMatch[0].length)\n continue\n }\n\n // Unknown format, break to avoid infinite loop\n break\n }\n\n // Add marker if present\n if (markerMatch && markerMatch[1] !== undefined) {\n segments.push({ type: 'marker', value: markerMatch[1] })\n }\n\n return segments\n },\n\n /**\n * Build a path from segments\n * @param segments - Array of path segments\n * @returns Path string\n */\n build: (segments: Array<{ type: 'index' | 'key' | 'marker'; value: string | number }>): string => {\n let path = ''\n\n for (const segment of segments) {\n if (segment.type === 'index') {\n path += `[${segment.value}]`\n } else if (segment.type === 'key') {\n const escapedKey = String(segment.value).replace(/[.\\[\\]\\\\]/g, '\\\\$&')\n path += `.${escapedKey}`\n } else if (segment.type === 'marker') {\n path += `[#${segment.value}]`\n }\n }\n\n return path\n },\n\n /**\n * Join multiple path segments\n * @param paths - Path segments to join\n * @returns Combined path\n */\n join: (...paths: string[]): string => {\n return paths.filter(p => p !== '').join('')\n },\n\n /**\n * Check if a path is a descendant of another path\n * @param path - Path to check\n * @param ancestor - Potential ancestor path\n * @returns True if path is a descendant of ancestor\n */\n isDescendantOf: (path: string, ancestor: string): boolean => {\n const normalizedPath = PathBuilder.normalize(path)\n const normalizedAncestor = PathBuilder.normalize(ancestor)\n\n if (normalizedAncestor === '') {\n return normalizedPath !== ''\n }\n\n return normalizedPath.startsWith(normalizedAncestor) &&\n normalizedPath.length > normalizedAncestor.length &&\n (normalizedPath[normalizedAncestor.length] === '[' ||\n normalizedPath[normalizedAncestor.length] === '.')\n }\n}\n\nexport default PathBuilder\n","/**\n * NACHOS - Not Another CBOR Handling Object System\n *\n * RFC 8949 CBOR (Concise Binary Object Representation) encoder and decoder\n * with full source map support for interactive debugging.\n *\n * @module @marcuspuchalla/nachos\n * @see https://datatracker.ietf.org/doc/html/rfc8949\n *\n * @example\n * ```typescript\n * // Simple decoding\n * import { decode } from '@marcuspuchalla/nachos'\n * const result = decode('1864') // { value: 100, bytesRead: 2 }\n *\n * // Simple encoding\n * import { encode } from '@marcuspuchalla/nachos'\n * const { hex, bytes } = encode(100) // hex: \"1864\"\n *\n * // With source maps for debugging\n * import { decodeWithSourceMap } from '@marcuspuchalla/nachos'\n * const { value, sourceMap } = decodeWithSourceMap('d87980')\n * // sourceMap links hex bytes to decoded values\n * ```\n */\n\n// Re-export from parser (decoder)\nexport { useCborParser } from './parser/composables/useCborParser'\nexport { useCborInteger } from './parser/composables/useCborInteger'\nexport { useCborString } from './parser/composables/useCborString'\nexport { useCborCollection } from './parser/composables/useCborCollection'\nexport { useCborFloat } from './parser/composables/useCborFloat'\nexport { useCborTag } from './parser/composables/useCborTag'\nexport { useCborDiagnostic } from './parser/composables/useCborDiagnostic'\nexport type { DiagnosticOptions } from './parser/composables/useCborDiagnostic'\n\n// Re-export utilities\nexport { PathBuilder } from './parser/utils/pathBuilder'\n\n// Re-export from encoder\nexport { useCborEncoder } from './encoder/composables/useCborEncoder'\nexport { useCborIntegerEncoder } from './encoder/composables/useCborIntegerEncoder'\nexport { useCborStringEncoder } from './encoder/composables/useCborStringEncoder'\nexport { useCborCollectionEncoder } from './encoder/composables/useCborCollectionEncoder'\nexport { useCborSimpleEncoder } from './encoder/composables/useCborSimpleEncoder'\n\n// Re-export types\nexport type {\n // Parser types\n ParseResult,\n ParseResultWithMap,\n ParseOptions,\n ParseError,\n ParserLimits,\n CborContext,\n CborValue,\n CborMap,\n TaggedValue,\n PlutusData,\n PlutusConstr,\n PlutusMap,\n PlutusList,\n PlutusInt,\n PlutusBytes,\n SourceMapEntry,\n Result\n} from './parser/types'\n\nexport {\n // Default options\n DEFAULT_OPTIONS,\n DEFAULT_LIMITS,\n // Enums\n CborMajorType,\n CborAdditionalInfo,\n CborSimpleValue,\n CborTag\n} from './parser/types'\n\nexport type {\n // Encoder types\n EncodeResult,\n EncodeOptions,\n EncodableValue,\n EncodeContext\n} from './encoder/types'\n\nexport {\n DEFAULT_ENCODE_OPTIONS\n} from './encoder/types'\n\n// Convenience exports with cleaner names for library users\nimport { useCborParser } from './parser/composables/useCborParser'\nimport { useCborEncoder } from './encoder/composables/useCborEncoder'\nimport type { ParseResult, ParseResultWithMap, ParseOptions } from './parser/types'\nimport type { EncodeResult, EncodeOptions, EncodableValue } from './encoder/types'\n\n/**\n * Decode CBOR data to JavaScript value\n *\n * Accepts either a hex string or a Uint8Array of raw CBOR bytes.\n * When passing a Uint8Array, the bytes are used directly without\n * hex conversion, which is more efficient for binary sources\n * (WebSocket, fetch, file I/O, etc.).\n *\n * @param input - CBOR data as hex string (e.g., \"1864\") or Uint8Array\n * @param options - Optional parser configuration\n * @returns Decoded value and number of bytes consumed\n *\n * @throws {Error} If input is invalid or malformed CBOR\n *\n * @example\n * ```typescript\n * // Decode from hex string\n * decode('1864') // { value: 100, bytesRead: 2 }\n *\n * // Decode from Uint8Array (zero-copy, no hex conversion)\n * decode(new Uint8Array([0x18, 0x64])) // { value: 100, bytesRead: 2 }\n *\n * // Decode string\n * decode('6449455446') // { value: \"IETF\", bytesRead: 5 }\n *\n * // Decode array\n * decode('83010203') // { value: [1, 2, 3], bytesRead: 4 }\n *\n * // With strict validation\n * decode('1864', { strict: true })\n *\n * // With canonical validation\n * decode('a16161 01', { validateCanonical: true })\n * ```\n *\n * @see {@link https://datatracker.ietf.org/doc/html/rfc8949 | RFC 8949}\n */\nexport function decode(input: string | Uint8Array, options?: ParseOptions): ParseResult {\n const { parse } = useCborParser()\n return parse(input, options)\n}\n\n/**\n * Decode CBOR data with source map generation\n *\n * Source maps provide bidirectional linking between hex bytes and decoded values,\n * enabling interactive debugging visualizations.\n *\n * Accepts either a hex string or a Uint8Array of raw CBOR bytes.\n *\n * @param input - CBOR data as hex string or Uint8Array\n * @param options - Optional parser configuration\n * @returns Decoded value, byte count, and source map\n *\n * @example\n * ```typescript\n * const { value, sourceMap } = decodeWithSourceMap('d87980')\n * // value: { tag: 121, value: [] }\n * // sourceMap: [\n * // { path: '', start: 0, end: 3, majorType: 6, type: 'Tag 121', children: ['.value'] },\n * // { path: '.value', start: 2, end: 3, majorType: 4, type: 'Array', parent: '' }\n * // ]\n *\n * // From Uint8Array\n * const { value, sourceMap } = decodeWithSourceMap(new Uint8Array([0xd8, 0x79, 0x80]))\n * ```\n */\nexport function decodeWithSourceMap(input: string | Uint8Array, options?: ParseOptions): ParseResultWithMap {\n const { parseWithSourceMap } = useCborParser()\n return parseWithSourceMap(input, options)\n}\n\n/**\n * Encode JavaScript value to CBOR\n *\n * Automatically detects value type and uses appropriate CBOR encoding.\n * Supports: numbers, bigints, strings, booleans, null, undefined, Uint8Arrays, arrays, objects, and tagged values.\n *\n * @param value - JavaScript value to encode\n * @param options - Optional encoder configuration\n * @returns CBOR bytes and hex string\n *\n * @throws {Error} If value type is unsupported or encoding fails\n *\n * @remarks\n * Plain objects use `Object.entries()`, so all keys become **text strings** and\n * integer-like keys (`\"0\"`, `\"1\"`, …) are reordered by the JS engine's\n * integer-index property rule. For integer keys or guaranteed ordering (e.g.\n * Cardano transaction bodies), pass a `Map` instead of a plain object.\n *\n * Canonical mode (`{ canonical: true }`) sorts map keys **length-first** by\n * default (Cardano CIP-21 / RFC 7049 §3.9). Pass `{ mapKeyOrder: 'bytewise' }`\n * for RFC 8949 §4.2.1 core deterministic ordering.\n *\n * @example\n * ```typescript\n * // Encode number\n * encode(100) // { hex: \"1864\", bytes: Uint8Array[0x18, 0x64] }\n *\n * // Encode string\n * encode(\"IETF\") // { hex: \"6449455446\", bytes: ... }\n *\n * // Encode array\n * encode([1, 2, 3]) // { hex: \"83010203\", bytes: ... }\n *\n * // Encode map (canonical - sorted keys)\n * encode({ z: 1, a: 2 }, { canonical: true })\n * // Keys will be sorted: { a: 2, z: 1 }\n *\n * // Encode tagged value\n * encode({ tag: 121, value: [] }) // { hex: \"d87980\", bytes: ... }\n * ```\n */\nexport function encode(value: EncodableValue, options?: Partial<EncodeOptions>): EncodeResult {\n const { encode: encodeValue } = useCborEncoder(options)\n return encodeValue(value)\n}\n\n/**\n * Encode JavaScript value to CBOR hex string\n *\n * Convenience function that returns only the hex string (not the bytes).\n *\n * @param value - JavaScript value to encode\n * @param options - Optional encoder configuration\n * @returns CBOR hex string\n *\n * @example\n * ```typescript\n * encodeToHex(100) // \"1864\"\n * encodeToHex([1, 2, 3]) // \"83010203\"\n * encodeToHex({ a: 1 }, { canonical: true }) // \"a16161 01\"\n * ```\n */\nexport function encodeToHex(value: EncodableValue, options?: Partial<EncodeOptions>): string {\n const { encodeToHex: encodeValueToHex } = useCborEncoder(options)\n return encodeValueToHex(value)\n}\n\n/**\n * Encode JavaScript value to CBOR bytes\n *\n * Convenience function that returns only the bytes (not the hex string).\n *\n * @param value - JavaScript value to encode\n * @param options - Optional encoder configuration\n * @returns CBOR bytes as Uint8Array\n *\n * @example\n * ```typescript\n * const bytes = encodeToBytes(100) // Uint8Array[0x18, 0x64]\n * const bytes = encodeToBytes([1, 2, 3]) // Uint8Array[0x83, 0x01, 0x02, 0x03]\n * ```\n */\nexport function encodeToBytes(value: EncodableValue, options?: Partial<EncodeOptions>): Uint8Array {\n const { encodeToBytes: encodeValueToBytes } = useCborEncoder(options)\n return encodeValueToBytes(value)\n}\n\n/**\n * Encode multiple values as CBOR sequence\n *\n * Creates a CBOR sequence (RFC 8742) by concatenating multiple encoded values.\n * Useful for streaming or batch encoding.\n *\n * @param values - Array of values to encode\n * @param options - Optional encoder configuration\n * @returns Concatenated CBOR bytes and hex string\n *\n * @example\n * ```typescript\n * encodeSequence([1, \"hello\", [2, 3]])\n * // Returns concatenated encoding: 0x01 + 0x6568656c6c6f + 0x820203\n * ```\n *\n * @see {@link https://datatracker.ietf.org/doc/html/rfc8742 | RFC 8742 - CBOR Sequences}\n */\nexport function encodeSequence(values: EncodableValue[], options?: Partial<EncodeOptions>): EncodeResult {\n const { encodeSequence: encodeSeq } = useCborEncoder(options)\n return encodeSeq(values)\n}\n\n/**\n * Class-based CBOR decoder\n *\n * Provides an object-oriented interface for CBOR decoding.\n * Useful when you need to maintain decoder state or configuration.\n *\n * @example\n * ```typescript\n * const decoder = new CborDecoder({ strict: true })\n *\n * const result1 = decoder.decode('1864')\n * const result2 = decoder.decode('6449455446')\n *\n * const withMap = decoder.decodeWithSourceMap('d87980')\n * ```\n */\nexport class CborDecoder {\n private options: ParseOptions\n\n /**\n * Create a new CBOR decoder\n *\n * @param options - Parser configuration\n */\n constructor(options?: ParseOptions) {\n this.options = options || {}\n }\n\n /**\n * Decode CBOR data\n *\n * @param input - CBOR data as hex string or Uint8Array\n * @returns Decoded value and byte count\n */\n decode(input: string | Uint8Array): ParseResult {\n return decode(input, this.options)\n }\n\n /**\n * Decode CBOR data with source map\n *\n * @param input - CBOR data as hex string or Uint8Array\n * @returns Decoded value, byte count, and source map\n */\n decodeWithSourceMap(input: string | Uint8Array): ParseResultWithMap {\n return decodeWithSourceMap(input, this.options)\n }\n}\n\n/**\n * Class-based CBOR encoder\n *\n * Provides an object-oriented interface for CBOR encoding.\n * Useful when you need to maintain encoder state or configuration.\n *\n * @example\n * ```typescript\n * const encoder = new CborEncoder({ canonical: true })\n *\n * const result1 = encoder.encode(100)\n * const result2 = encoder.encode([1, 2, 3])\n *\n * const hex = encoder.encodeToHex({ a: 1 }) // Keys will be sorted\n * ```\n */\nexport class CborEncoder {\n private options: Partial<EncodeOptions>\n\n /**\n * Create a new CBOR encoder\n *\n * @param options - Encoder configuration\n */\n constructor(options?: Partial<EncodeOptions>) {\n this.options = options || {}\n }\n\n /**\n * Encode value to CBOR\n *\n * @param value - JavaScript value to encode\n * @returns CBOR bytes and hex string\n */\n encode(value: EncodableValue): EncodeResult {\n return encode(value, this.options)\n }\n\n /**\n * Encode value to CBOR hex string\n *\n * @param value - JavaScript value to encode\n * @returns CBOR hex string\n */\n encodeToHex(value: EncodableValue): string {\n return encodeToHex(value, this.options)\n }\n\n /**\n * Encode value to CBOR bytes\n *\n * @param value - JavaScript value to encode\n * @returns CBOR bytes\n */\n encodeToBytes(value: EncodableValue): Uint8Array {\n return encodeToBytes(value, this.options)\n }\n\n /**\n * Encode multiple values as CBOR sequence\n *\n * @param values - Array of values to encode\n * @returns Concatenated CBOR encoding\n */\n encodeSequence(values: EncodableValue[]): EncodeResult {\n return encodeSequence(values, this.options)\n }\n}\n\n// Import diagnostic notation utilities\nimport { useCborDiagnostic } from './parser/composables/useCborDiagnostic'\nimport type { DiagnosticOptions } from './parser/composables/useCborDiagnostic'\n\n/**\n * Convert a JavaScript value to RFC 8949 diagnostic notation\n *\n * Diagnostic notation is a human-readable representation of CBOR data\n * as defined in RFC 8949 Appendix B.\n *\n * @param value - JavaScript value to convert\n * @param options - Optional formatting options\n * @returns Diagnostic notation string\n *\n * @example\n * ```typescript\n * toDiagnostic(100) // \"100\"\n * toDiagnostic(new Uint8Array([1,2])) // \"h'0102'\"\n * toDiagnostic([1, 2, 3]) // \"[1, 2, 3]\"\n * toDiagnostic({a: 1}) // '{\"a\": 1}'\n * toDiagnostic({tag: 1, value: 123}) // \"1(123)\"\n *\n * // Pretty print\n * toDiagnostic([1, 2], { pretty: true })\n * // \"[\\n 1,\\n 2\\n]\"\n *\n * // Indefinite length\n * toDiagnostic([1, 2], { indefinite: true })\n * // \"[_ 1, 2]\"\n * ```\n */\nexport function toDiagnostic(value: unknown, options?: DiagnosticOptions): string {\n const { toDiagnostic: convert } = useCborDiagnostic()\n return convert(value, options)\n}\n\n/**\n * Decode CBOR and return diagnostic notation\n *\n * Combines decoding and diagnostic conversion in one step.\n *\n * @param hexString - CBOR data as hex string\n * @param options - Optional formatting options\n * @returns Diagnostic notation string\n *\n * @example\n * ```typescript\n * decodeToDiagnostic('1864') // \"100\"\n * decodeToDiagnostic('83010203') // \"[1, 2, 3]\"\n * decodeToDiagnostic('d87980') // \"121([])\"\n * ```\n */\nexport function decodeToDiagnostic(hexString: string, options?: DiagnosticOptions): string {\n const { value } = decode(hexString)\n return toDiagnostic(value, options)\n}\n"]}