@thomasfosterau/effect-parse 0.0.0-stage → 0.1.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 (133) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +550 -2
  3. package/dist/Ascii.d.ts +392 -0
  4. package/dist/Ascii.d.ts.map +1 -0
  5. package/dist/Ascii.js +610 -0
  6. package/dist/Ascii.js.map +1 -0
  7. package/dist/Binary.d.ts +153 -0
  8. package/dist/Binary.d.ts.map +1 -0
  9. package/dist/Binary.js +171 -0
  10. package/dist/Binary.js.map +1 -0
  11. package/dist/Bits.d.ts +60 -0
  12. package/dist/Bits.d.ts.map +1 -0
  13. package/dist/Bits.js +144 -0
  14. package/dist/Bits.js.map +1 -0
  15. package/dist/Encoding.d.ts +116 -0
  16. package/dist/Encoding.d.ts.map +1 -0
  17. package/dist/Encoding.js +85 -0
  18. package/dist/Encoding.js.map +1 -0
  19. package/dist/Expression.d.ts +124 -0
  20. package/dist/Expression.d.ts.map +1 -0
  21. package/dist/Expression.js +139 -0
  22. package/dist/Expression.js.map +1 -0
  23. package/dist/Input.d.ts +301 -0
  24. package/dist/Input.d.ts.map +1 -0
  25. package/dist/Input.js +312 -0
  26. package/dist/Input.js.map +1 -0
  27. package/dist/Nom.d.ts +518 -0
  28. package/dist/Nom.d.ts.map +1 -0
  29. package/dist/Nom.js +519 -0
  30. package/dist/Nom.js.map +1 -0
  31. package/dist/ParseError.d.ts +120 -0
  32. package/dist/ParseError.d.ts.map +1 -0
  33. package/dist/ParseError.js +301 -0
  34. package/dist/ParseError.js.map +1 -0
  35. package/dist/Parser.d.ts +1312 -0
  36. package/dist/Parser.d.ts.map +1 -0
  37. package/dist/Parser.js +1936 -0
  38. package/dist/Parser.js.map +1 -0
  39. package/dist/ParserSchema.d.ts +31 -0
  40. package/dist/ParserSchema.d.ts.map +1 -0
  41. package/dist/ParserSchema.js +56 -0
  42. package/dist/ParserSchema.js.map +1 -0
  43. package/dist/ParserStream.d.ts +127 -0
  44. package/dist/ParserStream.d.ts.map +1 -0
  45. package/dist/ParserStream.js +270 -0
  46. package/dist/ParserStream.js.map +1 -0
  47. package/dist/Text.d.ts +330 -0
  48. package/dist/Text.d.ts.map +1 -0
  49. package/dist/Text.js +529 -0
  50. package/dist/Text.js.map +1 -0
  51. package/dist/Token.d.ts +225 -0
  52. package/dist/Token.d.ts.map +1 -0
  53. package/dist/Token.js +294 -0
  54. package/dist/Token.js.map +1 -0
  55. package/dist/index.d.ts +17 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +17 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/internal/compiler/closure.d.ts +25 -0
  60. package/dist/internal/compiler/closure.d.ts.map +1 -0
  61. package/dist/internal/compiler/closure.js +1668 -0
  62. package/dist/internal/compiler/closure.js.map +1 -0
  63. package/dist/internal/compiler/entries.d.ts +19 -0
  64. package/dist/internal/compiler/entries.d.ts.map +1 -0
  65. package/dist/internal/compiler/entries.js +32 -0
  66. package/dist/internal/compiler/entries.js.map +1 -0
  67. package/dist/internal/compiler/first.d.ts +33 -0
  68. package/dist/internal/compiler/first.d.ts.map +1 -0
  69. package/dist/internal/compiler/first.js +235 -0
  70. package/dist/internal/compiler/first.js.map +1 -0
  71. package/dist/internal/compiler/jit.d.ts +20 -0
  72. package/dist/internal/compiler/jit.d.ts.map +1 -0
  73. package/dist/internal/compiler/jit.js +1030 -0
  74. package/dist/internal/compiler/jit.js.map +1 -0
  75. package/dist/internal/compiler/registry.d.ts +34 -0
  76. package/dist/internal/compiler/registry.d.ts.map +1 -0
  77. package/dist/internal/compiler/registry.js +46 -0
  78. package/dist/internal/compiler/registry.js.map +1 -0
  79. package/dist/internal/compiler/sets.d.ts +29 -0
  80. package/dist/internal/compiler/sets.d.ts.map +1 -0
  81. package/dist/internal/compiler/sets.js +85 -0
  82. package/dist/internal/compiler/sets.js.map +1 -0
  83. package/dist/internal/entries.d.ts +27 -0
  84. package/dist/internal/entries.d.ts.map +1 -0
  85. package/dist/internal/entries.js +42 -0
  86. package/dist/internal/entries.js.map +1 -0
  87. package/dist/internal/node.d.ts +251 -0
  88. package/dist/internal/node.d.ts.map +1 -0
  89. package/dist/internal/node.js +73 -0
  90. package/dist/internal/node.js.map +1 -0
  91. package/dist/internal/numbers.d.ts +41 -0
  92. package/dist/internal/numbers.d.ts.map +1 -0
  93. package/dist/internal/numbers.js +302 -0
  94. package/dist/internal/numbers.js.map +1 -0
  95. package/dist/internal/resume.d.ts +39 -0
  96. package/dist/internal/resume.d.ts.map +1 -0
  97. package/dist/internal/resume.js +37 -0
  98. package/dist/internal/resume.js.map +1 -0
  99. package/dist/internal/text.d.ts +72 -0
  100. package/dist/internal/text.d.ts.map +1 -0
  101. package/dist/internal/text.js +391 -0
  102. package/dist/internal/text.js.map +1 -0
  103. package/dist/internal/tokens.d.ts +93 -0
  104. package/dist/internal/tokens.d.ts.map +1 -0
  105. package/dist/internal/tokens.js +400 -0
  106. package/dist/internal/tokens.js.map +1 -0
  107. package/package.json +115 -3
  108. package/src/Ascii.ts +741 -0
  109. package/src/Binary.ts +228 -0
  110. package/src/Bits.ts +192 -0
  111. package/src/Encoding.ts +128 -0
  112. package/src/Expression.ts +245 -0
  113. package/src/Input.ts +429 -0
  114. package/src/Nom.ts +642 -0
  115. package/src/ParseError.ts +378 -0
  116. package/src/Parser.ts +2763 -0
  117. package/src/ParserSchema.ts +87 -0
  118. package/src/ParserStream.ts +390 -0
  119. package/src/Text.ts +757 -0
  120. package/src/Token.ts +416 -0
  121. package/src/index.ts +16 -0
  122. package/src/internal/compiler/closure.ts +1583 -0
  123. package/src/internal/compiler/entries.ts +36 -0
  124. package/src/internal/compiler/first.ts +252 -0
  125. package/src/internal/compiler/jit.ts +1091 -0
  126. package/src/internal/compiler/registry.ts +79 -0
  127. package/src/internal/compiler/sets.ts +100 -0
  128. package/src/internal/entries.ts +51 -0
  129. package/src/internal/node.ts +207 -0
  130. package/src/internal/numbers.ts +291 -0
  131. package/src/internal/resume.ts +55 -0
  132. package/src/internal/text.ts +411 -0
  133. package/src/internal/tokens.ts +409 -0
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Parsers for binary formats: fixed-width integers and floats in either
3
+ * byte order, and length-prefixed data (winnow's `binary` module, nom's
4
+ * `number` and `multi::length_*` parsers).
5
+ *
6
+ * Integers up to 32 bits are returned as `number`, wider integers as
7
+ * `bigint`.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import { Binary, Parser } from "@thomasfosterau/effect-parse"
12
+ *
13
+ * // A length-prefixed (u16 big-endian) payload
14
+ * const frame = Binary.lengthTake(Binary.beU16)
15
+ * Parser.parse(frame, new Uint8Array([0, 2, 0xca, 0xfe])) // Uint8Array [0xca, 0xfe]
16
+ * ```
17
+ *
18
+ * @since 0.1.0
19
+ */
20
+ import type { Input, Slice } from "./Input.js";
21
+ import type { Parser } from "./Parser.js";
22
+ export {
23
+ /**
24
+ * Runs a bit-level parser on byte input. See the `Bits` module.
25
+ *
26
+ * @since 0.1.0
27
+ * @category bits
28
+ */
29
+ bits } from "./Bits.js";
30
+ /**
31
+ * A byte order. `"native"` is the byte order of the current platform.
32
+ *
33
+ * @since 0.1.0
34
+ * @category models
35
+ */
36
+ export type Endianness = "big" | "little" | "native";
37
+ /**
38
+ * An unsigned byte.
39
+ *
40
+ * @since 0.1.0
41
+ * @category integers
42
+ */
43
+ export declare const u8: Parser<number, never, never, Uint8Array>;
44
+ /**
45
+ * A signed byte.
46
+ *
47
+ * @since 0.1.0
48
+ * @category integers
49
+ */
50
+ export declare const i8: Parser<number, never, never, Uint8Array>;
51
+ /** @since 0.1.0 @category integers */
52
+ export declare const beU16: Parser<number, never, never, Uint8Array>;
53
+ /** @since 0.1.0 @category integers */
54
+ export declare const leU16: Parser<number, never, never, Uint8Array>;
55
+ /** @since 0.1.0 @category integers */
56
+ export declare const beI16: Parser<number, never, never, Uint8Array>;
57
+ /** @since 0.1.0 @category integers */
58
+ export declare const leI16: Parser<number, never, never, Uint8Array>;
59
+ /** @since 0.1.0 @category integers */
60
+ export declare const beU24: Parser<number, never, never, Uint8Array>;
61
+ /** @since 0.1.0 @category integers */
62
+ export declare const leU24: Parser<number, never, never, Uint8Array>;
63
+ /** @since 0.1.0 @category integers */
64
+ export declare const beI24: Parser<number, never, never, Uint8Array>;
65
+ /** @since 0.1.0 @category integers */
66
+ export declare const leI24: Parser<number, never, never, Uint8Array>;
67
+ /** @since 0.1.0 @category integers */
68
+ export declare const beU32: Parser<number, never, never, Uint8Array>;
69
+ /** @since 0.1.0 @category integers */
70
+ export declare const leU32: Parser<number, never, never, Uint8Array>;
71
+ /** @since 0.1.0 @category integers */
72
+ export declare const beI32: Parser<number, never, never, Uint8Array>;
73
+ /** @since 0.1.0 @category integers */
74
+ export declare const leI32: Parser<number, never, never, Uint8Array>;
75
+ /** @since 0.1.0 @category integers */
76
+ export declare const beU64: Parser<bigint, never, never, Uint8Array>;
77
+ /** @since 0.1.0 @category integers */
78
+ export declare const leU64: Parser<bigint, never, never, Uint8Array>;
79
+ /** @since 0.1.0 @category integers */
80
+ export declare const beI64: Parser<bigint, never, never, Uint8Array>;
81
+ /** @since 0.1.0 @category integers */
82
+ export declare const leI64: Parser<bigint, never, never, Uint8Array>;
83
+ /** @since 0.1.0 @category integers */
84
+ export declare const beU128: Parser<bigint, never, never, Uint8Array>;
85
+ /** @since 0.1.0 @category integers */
86
+ export declare const leU128: Parser<bigint, never, never, Uint8Array>;
87
+ /** @since 0.1.0 @category integers */
88
+ export declare const beI128: Parser<bigint, never, never, Uint8Array>;
89
+ /** @since 0.1.0 @category integers */
90
+ export declare const leI128: Parser<bigint, never, never, Uint8Array>;
91
+ /** @since 0.1.0 @category floats */
92
+ export declare const beF32: Parser<number, never, never, Uint8Array>;
93
+ /** @since 0.1.0 @category floats */
94
+ export declare const leF32: Parser<number, never, never, Uint8Array>;
95
+ /** @since 0.1.0 @category floats */
96
+ export declare const beF64: Parser<number, never, never, Uint8Array>;
97
+ /** @since 0.1.0 @category floats */
98
+ export declare const leF64: Parser<number, never, never, Uint8Array>;
99
+ /**
100
+ * An unsigned 16-bit integer in the given byte order (winnow's `u16`).
101
+ *
102
+ * @since 0.1.0
103
+ * @category integers
104
+ */
105
+ export declare const u16: (endian: Endianness) => Parser<number, never, never, Uint8Array>;
106
+ /** @since 0.1.0 @category integers */
107
+ export declare const i16: (endian: Endianness) => Parser<number, never, never, Uint8Array>;
108
+ /** @since 0.1.0 @category integers */
109
+ export declare const u24: (endian: Endianness) => Parser<number, never, never, Uint8Array>;
110
+ /** @since 0.1.0 @category integers */
111
+ export declare const i24: (endian: Endianness) => Parser<number, never, never, Uint8Array>;
112
+ /** @since 0.1.0 @category integers */
113
+ export declare const u32: (endian: Endianness) => Parser<number, never, never, Uint8Array>;
114
+ /** @since 0.1.0 @category integers */
115
+ export declare const i32: (endian: Endianness) => Parser<number, never, never, Uint8Array>;
116
+ /** @since 0.1.0 @category integers */
117
+ export declare const u64: (endian: Endianness) => Parser<bigint, never, never, Uint8Array>;
118
+ /** @since 0.1.0 @category integers */
119
+ export declare const i64: (endian: Endianness) => Parser<bigint, never, never, Uint8Array>;
120
+ /** @since 0.1.0 @category integers */
121
+ export declare const u128: (endian: Endianness) => Parser<bigint, never, never, Uint8Array>;
122
+ /** @since 0.1.0 @category integers */
123
+ export declare const i128: (endian: Endianness) => Parser<bigint, never, never, Uint8Array>;
124
+ /** @since 0.1.0 @category floats */
125
+ export declare const f32: (endian: Endianness) => Parser<number, never, never, Uint8Array>;
126
+ /** @since 0.1.0 @category floats */
127
+ export declare const f64: (endian: Endianness) => Parser<number, never, never, Uint8Array>;
128
+ /**
129
+ * Parses a length with `count`, then takes that many tokens (winnow's
130
+ * `length_take`, nom's `length_data`).
131
+ *
132
+ * @since 0.1.0
133
+ * @category length-prefixed
134
+ */
135
+ export declare const lengthTake: <E, R, I extends Input = Uint8Array>(count: Parser<number | bigint, E, R, I>) => Parser<Slice<I>, E, R, I>;
136
+ /**
137
+ * Parses a length with `count`, then applies `parser` that many times
138
+ * (winnow's `length_repeat`, nom's `length_count`).
139
+ *
140
+ * @since 0.1.0
141
+ * @category length-prefixed
142
+ */
143
+ export declare const lengthRepeat: <E, R, I extends Input, A, E2, R2, I2 extends Input>(count: Parser<number | bigint, E, R, I>, parser: Parser<A, E2, R2, I2>) => Parser<Array<A>, E | E2, R | R2, I & I2>;
144
+ /**
145
+ * Parses a length with `count`, takes that many tokens, and applies
146
+ * `parser` to them (winnow's `length_and_then`, nom's `length_value`).
147
+ * `parser` does not need to consume the whole slice.
148
+ *
149
+ * @since 0.1.0
150
+ * @category length-prefixed
151
+ */
152
+ export declare const lengthAndThen: <E, R, I extends Input, A, E2, R2>(count: Parser<number | bigint, E, R, I>, parser: Parser<A, E2, R2, Slice<I> & Input>) => Parser<A, E | E2, R | R2, I>;
153
+ //# sourceMappingURL=Binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Binary.d.ts","sourceRoot":"","sources":["../src/Binary.ts"],"names":[],"mappings":"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"}
package/dist/Binary.js ADDED
@@ -0,0 +1,171 @@
1
+ import { Fail } from "./Input.js";
2
+ import * as P from "./Parser.js";
3
+ import * as Token from "./Token.js";
4
+ export {
5
+ /**
6
+ * Runs a bit-level parser on byte input. See the `Bits` module.
7
+ *
8
+ * @since 0.1.0
9
+ * @category bits
10
+ */
11
+ bits } from "./Bits.js";
12
+ const nativeLittle = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
13
+ const fixed = (size, name, read) => {
14
+ const expected = [`${size} byte${size === 1 ? "" : "s"}`];
15
+ return P.make((state) => {
16
+ const pos = state.pos;
17
+ const avail = state.end - pos;
18
+ if (avail < size)
19
+ return state.eoi("Token", expected, size - avail);
20
+ const bytes = state.input;
21
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
22
+ state.pos = pos + size;
23
+ return read(view, pos);
24
+ }, name);
25
+ };
26
+ const readU24 = (little) => (v, o) => little
27
+ ? v.getUint8(o) | (v.getUint8(o + 1) << 8) | (v.getUint8(o + 2) << 16)
28
+ : (v.getUint8(o) << 16) | (v.getUint8(o + 1) << 8) | v.getUint8(o + 2);
29
+ const readI24 = (little) => {
30
+ const u = readU24(little);
31
+ return (v, o) => {
32
+ const x = u(v, o);
33
+ return x & 0x800000 ? x - 0x1000000 : x;
34
+ };
35
+ };
36
+ const readU128 = (little) => (v, o) => {
37
+ const a = v.getBigUint64(o, little);
38
+ const b = v.getBigUint64(o + 8, little);
39
+ return little ? (b << 64n) | a : (a << 64n) | b;
40
+ };
41
+ const readI128 = (little) => {
42
+ const u = readU128(little);
43
+ return (v, o) => BigInt.asIntN(128, u(v, o));
44
+ };
45
+ /**
46
+ * An unsigned byte.
47
+ *
48
+ * @since 0.1.0
49
+ * @category integers
50
+ */
51
+ export const u8 = fixed(1, "u8", (v, o) => v.getUint8(o));
52
+ /**
53
+ * A signed byte.
54
+ *
55
+ * @since 0.1.0
56
+ * @category integers
57
+ */
58
+ export const i8 = fixed(1, "i8", (v, o) => v.getInt8(o));
59
+ /** @since 0.1.0 @category integers */
60
+ export const beU16 = fixed(2, "beU16", (v, o) => v.getUint16(o, false));
61
+ /** @since 0.1.0 @category integers */
62
+ export const leU16 = fixed(2, "leU16", (v, o) => v.getUint16(o, true));
63
+ /** @since 0.1.0 @category integers */
64
+ export const beI16 = fixed(2, "beI16", (v, o) => v.getInt16(o, false));
65
+ /** @since 0.1.0 @category integers */
66
+ export const leI16 = fixed(2, "leI16", (v, o) => v.getInt16(o, true));
67
+ /** @since 0.1.0 @category integers */
68
+ export const beU24 = fixed(3, "beU24", readU24(false));
69
+ /** @since 0.1.0 @category integers */
70
+ export const leU24 = fixed(3, "leU24", readU24(true));
71
+ /** @since 0.1.0 @category integers */
72
+ export const beI24 = fixed(3, "beI24", readI24(false));
73
+ /** @since 0.1.0 @category integers */
74
+ export const leI24 = fixed(3, "leI24", readI24(true));
75
+ /** @since 0.1.0 @category integers */
76
+ export const beU32 = fixed(4, "beU32", (v, o) => v.getUint32(o, false));
77
+ /** @since 0.1.0 @category integers */
78
+ export const leU32 = fixed(4, "leU32", (v, o) => v.getUint32(o, true));
79
+ /** @since 0.1.0 @category integers */
80
+ export const beI32 = fixed(4, "beI32", (v, o) => v.getInt32(o, false));
81
+ /** @since 0.1.0 @category integers */
82
+ export const leI32 = fixed(4, "leI32", (v, o) => v.getInt32(o, true));
83
+ /** @since 0.1.0 @category integers */
84
+ export const beU64 = fixed(8, "beU64", (v, o) => v.getBigUint64(o, false));
85
+ /** @since 0.1.0 @category integers */
86
+ export const leU64 = fixed(8, "leU64", (v, o) => v.getBigUint64(o, true));
87
+ /** @since 0.1.0 @category integers */
88
+ export const beI64 = fixed(8, "beI64", (v, o) => v.getBigInt64(o, false));
89
+ /** @since 0.1.0 @category integers */
90
+ export const leI64 = fixed(8, "leI64", (v, o) => v.getBigInt64(o, true));
91
+ /** @since 0.1.0 @category integers */
92
+ export const beU128 = fixed(16, "beU128", readU128(false));
93
+ /** @since 0.1.0 @category integers */
94
+ export const leU128 = fixed(16, "leU128", readU128(true));
95
+ /** @since 0.1.0 @category integers */
96
+ export const beI128 = fixed(16, "beI128", readI128(false));
97
+ /** @since 0.1.0 @category integers */
98
+ export const leI128 = fixed(16, "leI128", readI128(true));
99
+ /** @since 0.1.0 @category floats */
100
+ export const beF32 = fixed(4, "beF32", (v, o) => v.getFloat32(o, false));
101
+ /** @since 0.1.0 @category floats */
102
+ export const leF32 = fixed(4, "leF32", (v, o) => v.getFloat32(o, true));
103
+ /** @since 0.1.0 @category floats */
104
+ export const beF64 = fixed(8, "beF64", (v, o) => v.getFloat64(o, false));
105
+ /** @since 0.1.0 @category floats */
106
+ export const leF64 = fixed(8, "leF64", (v, o) => v.getFloat64(o, true));
107
+ const byEndian = (big, little) => (endian) => endian === "big" ? big : endian === "little" ? little : nativeLittle ? little : big;
108
+ /**
109
+ * An unsigned 16-bit integer in the given byte order (winnow's `u16`).
110
+ *
111
+ * @since 0.1.0
112
+ * @category integers
113
+ */
114
+ export const u16 = byEndian(beU16, leU16);
115
+ /** @since 0.1.0 @category integers */
116
+ export const i16 = byEndian(beI16, leI16);
117
+ /** @since 0.1.0 @category integers */
118
+ export const u24 = byEndian(beU24, leU24);
119
+ /** @since 0.1.0 @category integers */
120
+ export const i24 = byEndian(beI24, leI24);
121
+ /** @since 0.1.0 @category integers */
122
+ export const u32 = byEndian(beU32, leU32);
123
+ /** @since 0.1.0 @category integers */
124
+ export const i32 = byEndian(beI32, leI32);
125
+ /** @since 0.1.0 @category integers */
126
+ export const u64 = byEndian(beU64, leU64);
127
+ /** @since 0.1.0 @category integers */
128
+ export const i64 = byEndian(beI64, leI64);
129
+ /** @since 0.1.0 @category integers */
130
+ export const u128 = byEndian(beU128, leU128);
131
+ /** @since 0.1.0 @category integers */
132
+ export const i128 = byEndian(beI128, leI128);
133
+ /** @since 0.1.0 @category floats */
134
+ export const f32 = byEndian(beF32, leF32);
135
+ /** @since 0.1.0 @category floats */
136
+ export const f64 = byEndian(beF64, leF64);
137
+ const toCount = (n) => typeof n === "bigint" ? Number(n) : n;
138
+ /**
139
+ * Parses a length with `count`, then takes that many tokens (winnow's
140
+ * `length_take`, nom's `length_data`).
141
+ *
142
+ * @since 0.1.0
143
+ * @category length-prefixed
144
+ */
145
+ export const lengthTake = (count) => {
146
+ const countStep = count.step;
147
+ return P.make((state) => {
148
+ const n = countStep(state);
149
+ if (n === Fail)
150
+ return Fail;
151
+ return Token.take(toCount(n)).step(state);
152
+ }, "lengthTake");
153
+ };
154
+ /**
155
+ * Parses a length with `count`, then applies `parser` that many times
156
+ * (winnow's `length_repeat`, nom's `length_count`).
157
+ *
158
+ * @since 0.1.0
159
+ * @category length-prefixed
160
+ */
161
+ export const lengthRepeat = (count, parser) => P.flatMap(count, (n) => P.repeat(parser, toCount(n)));
162
+ /**
163
+ * Parses a length with `count`, takes that many tokens, and applies
164
+ * `parser` to them (winnow's `length_and_then`, nom's `length_value`).
165
+ * `parser` does not need to consume the whole slice.
166
+ *
167
+ * @since 0.1.0
168
+ * @category length-prefixed
169
+ */
170
+ export const lengthAndThen = (count, parser) => P.mapParser(lengthTake(count), P.complete(parser));
171
+ //# sourceMappingURL=Binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Binary.js","sourceRoot":"","sources":["../src/Binary.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,OAAO,KAAK,CAAC,MAAM,aAAa,CAAA;AAChC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO;AACL;;;;;GAKG;AACH,IAAI,EACL,MAAM,WAAW,CAAA;AAUlB,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;AAEzE,MAAM,KAAK,GAAG,CAAI,IAAY,EAAE,IAAY,EAAE,IAA2C,EAAuC,EAAE;IAChI,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IACzD,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAwB,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;QAC7B,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,KAAK,CAAC,CAAA;QACnE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACzB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;QAC3E,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAA;QACtB,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACxB,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC,CAAW,EAAE,CAAS,EAAE,EAAE,CAC9D,MAAM;IACJ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AAE1E,MAAM,OAAO,GAAG,CAAC,MAAe,EAAE,EAAE;IAClC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,CAAC,CAAW,EAAE,CAAS,EAAE,EAAE;QAChC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACjB,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC,CAAW,EAAE,CAAS,EAAE,EAAE;IAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IACnC,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;IACvC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAE,EAAE;IACnC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC1B,OAAO,CAAC,CAAW,EAAE,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,EAAE,GAA6C,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAEnG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,EAAE,GAA6C,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAElG,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AACjH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AAChH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AAChH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AAC/G,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;AAChG,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;AAC/F,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;AAChG,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;AAC/F,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AACjH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AAChH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AAChH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AAC/G,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AACpH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AACnH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AACnH,sCAAsC;AACtC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AAClH,sCAAsC;AACtC,MAAM,CAAC,MAAM,MAAM,GAA6C,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AACpG,sCAAsC;AACtC,MAAM,CAAC,MAAM,MAAM,GAA6C,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AACnG,sCAAsC;AACtC,MAAM,CAAC,MAAM,MAAM,GAA6C,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;AACpG,sCAAsC;AACtC,MAAM,CAAC,MAAM,MAAM,GAA6C,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AAEnG,oCAAoC;AACpC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AAClH,oCAAoC;AACpC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AACjH,oCAAoC;AACpC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;AAClH,oCAAoC;AACpC,MAAM,CAAC,MAAM,KAAK,GAA6C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;AAEjH,MAAM,QAAQ,GAAG,CAAI,GAAM,EAAE,MAAS,EAAE,EAAE,CAAC,CAAC,MAAkB,EAAK,EAAE,CACnE,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAA;AAErF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3G,sCAAsC;AACtC,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3G,sCAAsC;AACtC,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3G,sCAAsC;AACtC,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3G,sCAAsC;AACtC,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3G,sCAAsC;AACtC,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3G,sCAAsC;AACtC,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3G,sCAAsC;AACtC,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3G,sCAAsC;AACtC,MAAM,CAAC,MAAM,IAAI,GAAqE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC9G,sCAAsC;AACtC,MAAM,CAAC,MAAM,IAAI,GAAqE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC9G,oCAAoC;AACpC,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3G,oCAAoC;AACpC,MAAM,CAAC,MAAM,GAAG,GAAqE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAG3G,MAAM,OAAO,GAAG,CAAC,CAAkB,EAAU,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAErF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,KAAuC,EACZ,EAAE;IAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;IAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAe,EAAE,EAAE;QAChC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAC3B,OAAQ,KAAK,CAAC,IAAI,CAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAY,CAAC,KAAK,CAAC,CAAA;IACvD,CAAC,EAAE,YAAY,CAAC,CAAA;AAClB,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAAuC,EACvC,MAA6B,EACa,EAAE,CAC5C,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAiC,CAAC,CAAA;AAEvF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAAuC,EACvC,MAA2C,EACb,EAAE,CAChC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAsC,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA"}
package/dist/Bits.d.ts ADDED
@@ -0,0 +1,60 @@
1
+ import type { Parser } from "./Parser.js";
2
+ declare const BitInputBrand: unique symbol;
3
+ /**
4
+ * The input type of bit-level parsers. A `Parser<A, E, R, BitInput>` can
5
+ * only be run inside {@link bits}.
6
+ *
7
+ * @since 0.1.0
8
+ * @category models
9
+ */
10
+ export interface BitInput extends ReadonlyArray<never> {
11
+ readonly [BitInputBrand]: true;
12
+ }
13
+ /**
14
+ * Runs a bit-level parser on byte input (winnow's and nom's `bits`). After
15
+ * success, the input advances to the next byte boundary.
16
+ *
17
+ * @since 0.1.0
18
+ * @category combinators
19
+ */
20
+ export declare const bits: <A, E, R>(self: Parser<A, E, R, BitInput>) => Parser<A, E, R, Uint8Array>;
21
+ /**
22
+ * Runs a byte-level parser from within a bit-level parser (winnow's and
23
+ * nom's `bytes`). The partly consumed byte, if any, is skipped first.
24
+ *
25
+ * @since 0.1.0
26
+ * @category combinators
27
+ */
28
+ export declare const bytes: <A, E, R>(self: Parser<A, E, R, Uint8Array>) => Parser<A, E, R, BitInput>;
29
+ /**
30
+ * Takes `count` bits (at most 53) as an unsigned number (winnow's and nom's
31
+ * bit-level `take`).
32
+ *
33
+ * @since 0.1.0
34
+ * @category parsers
35
+ */
36
+ export declare const take: (count: number) => Parser<number, never, never, BitInput>;
37
+ /**
38
+ * Takes `count` bits as an unsigned `bigint`.
39
+ *
40
+ * @since 0.1.0
41
+ * @category parsers
42
+ */
43
+ export declare const takeBig: (count: number) => Parser<bigint, never, never, BitInput>;
44
+ /**
45
+ * Matches `count` bits equal to `pattern` (winnow's `pattern`, nom's bit
46
+ * `tag`).
47
+ *
48
+ * @since 0.1.0
49
+ * @category parsers
50
+ */
51
+ export declare const pattern: (pattern: number, count: number) => Parser<number, never, never, BitInput>;
52
+ /**
53
+ * Takes one bit as a boolean (winnow's and nom's `bool`).
54
+ *
55
+ * @since 0.1.0
56
+ * @category parsers
57
+ */
58
+ export declare const bool: Parser<boolean, never, never, BitInput>;
59
+ export {};
60
+ //# sourceMappingURL=Bits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bits.d.ts","sourceRoot":"","sources":["../src/Bits.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,CAAC,MAAM,aAAa,EAAE,OAAO,MAAM,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,QAAS,SAAQ,aAAa,CAAC,KAAK,CAAC;IACpD,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,CAAA;CAC/B;AA8CD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAGzF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAG1F,CAAA;AAeD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,UAAW,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAQzE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,UAAW,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAc5E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,YAAa,MAAM,SAAS,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAa7F,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAG/C,CAAA"}
package/dist/Bits.js ADDED
@@ -0,0 +1,144 @@
1
+ import { Fail, Failure } from "./Input.js";
2
+ import { make } from "./Parser.js";
3
+ const scale = (f, factor) => new Failure(factor < 1 ? Math.floor(f.offset * factor) : f.offset * factor, f.kind, f.expected, f.context, f.hasCause, f.cause, f.message, factor < 1 ? Math.ceil(f.needed * factor) : f.needed * factor);
4
+ /**
5
+ * Runs `step` with offsets measured in different units (bits vs bytes),
6
+ * converting failure offsets back to the outer units afterwards.
7
+ */
8
+ const inUnits = (state, factor, step) => {
9
+ const end = state.end;
10
+ const deepest = state.deepest;
11
+ state.deepest = undefined;
12
+ state.pos = factor > 1 ? state.pos * factor : Math.ceil(state.pos * factor);
13
+ state.end = end * factor;
14
+ const a = step(state);
15
+ state.end = end;
16
+ const inner = state.deepest;
17
+ state.deepest = deepest;
18
+ if (a === Fail) {
19
+ state.pos = factor > 1 ? Math.floor(state.pos / factor) : state.pos / factor;
20
+ const f = state.failure;
21
+ state.failure = scale(f, 1 / factor);
22
+ if (inner !== undefined) {
23
+ const d = inner === f ? state.failure : scale(inner, 1 / factor);
24
+ if (deepest === undefined || d.offset >= deepest.offset)
25
+ state.deepest = d;
26
+ }
27
+ return Fail;
28
+ }
29
+ state.pos = factor > 1 ? Math.ceil(state.pos / factor) : state.pos / factor;
30
+ if (inner !== undefined) {
31
+ const d = scale(inner, 1 / factor);
32
+ if (deepest === undefined || d.offset >= deepest.offset)
33
+ state.deepest = d;
34
+ }
35
+ return a;
36
+ };
37
+ /**
38
+ * Runs a bit-level parser on byte input (winnow's and nom's `bits`). After
39
+ * success, the input advances to the next byte boundary.
40
+ *
41
+ * @since 0.1.0
42
+ * @category combinators
43
+ */
44
+ export const bits = (self) => {
45
+ const step = self.step;
46
+ return make((state) => inUnits(state, 8, step), "bits");
47
+ };
48
+ /**
49
+ * Runs a byte-level parser from within a bit-level parser (winnow's and
50
+ * nom's `bytes`). The partly consumed byte, if any, is skipped first.
51
+ *
52
+ * @since 0.1.0
53
+ * @category combinators
54
+ */
55
+ export const bytes = (self) => {
56
+ const step = self.step;
57
+ return make((state) => inUnits(state, 1 / 8, step), "bytes");
58
+ };
59
+ const readBits = (state, count) => {
60
+ const input = state.input;
61
+ let pos = state.pos;
62
+ let value = 0;
63
+ for (let i = 0; i < count; i++) {
64
+ const byte = input[pos >>> 3];
65
+ value = value * 2 + ((byte >>> (7 - (pos & 7))) & 1);
66
+ pos++;
67
+ }
68
+ state.pos = pos;
69
+ return value;
70
+ };
71
+ /**
72
+ * Takes `count` bits (at most 53) as an unsigned number (winnow's and nom's
73
+ * bit-level `take`).
74
+ *
75
+ * @since 0.1.0
76
+ * @category parsers
77
+ */
78
+ export const take = (count) => {
79
+ if (count > 53)
80
+ throw new RangeError("Bits.take: use Bits.takeBig for more than 53 bits");
81
+ const expected = [`${count} bits`];
82
+ return make((state) => {
83
+ const avail = state.end - state.pos;
84
+ if (avail < count)
85
+ return state.eoi("Bits", expected, count - avail);
86
+ return readBits(state, count);
87
+ }, "take");
88
+ };
89
+ /**
90
+ * Takes `count` bits as an unsigned `bigint`.
91
+ *
92
+ * @since 0.1.0
93
+ * @category parsers
94
+ */
95
+ export const takeBig = (count) => {
96
+ const expected = [`${count} bits`];
97
+ return make((state) => {
98
+ const avail = state.end - state.pos;
99
+ if (avail < count)
100
+ return state.eoi("Bits", expected, count - avail);
101
+ let value = 0n;
102
+ let remaining = count;
103
+ while (remaining > 0) {
104
+ const n = Math.min(remaining, 32);
105
+ value = (value << BigInt(n)) | BigInt(readBits(state, n));
106
+ remaining -= n;
107
+ }
108
+ return value;
109
+ }, "takeBig");
110
+ };
111
+ /**
112
+ * Matches `count` bits equal to `pattern` (winnow's `pattern`, nom's bit
113
+ * `tag`).
114
+ *
115
+ * @since 0.1.0
116
+ * @category parsers
117
+ */
118
+ export const pattern = (pattern, count) => {
119
+ const expected = [`bit pattern ${pattern.toString(2).padStart(count, "0")}`];
120
+ return make((state) => {
121
+ const start = state.pos;
122
+ const avail = state.end - start;
123
+ if (avail < count)
124
+ return state.eoi("Bits", expected, count - avail);
125
+ const value = readBits(state, count);
126
+ if (value !== pattern) {
127
+ state.pos = start;
128
+ return state.backtrack("Bits", expected);
129
+ }
130
+ return value;
131
+ }, "pattern");
132
+ };
133
+ /**
134
+ * Takes one bit as a boolean (winnow's and nom's `bool`).
135
+ *
136
+ * @since 0.1.0
137
+ * @category parsers
138
+ */
139
+ export const bool = make((state) => {
140
+ if (state.pos >= state.end)
141
+ return state.eoi("Bits", ["1 bit"], 1);
142
+ return readBits(state, 1) === 1;
143
+ }, "bool");
144
+ //# sourceMappingURL=Bits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bits.js","sourceRoot":"","sources":["../src/Bits.ts"],"names":[],"mappings":"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"}