@helios-lang/effect 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.
- package/LICENSE +28 -0
- package/README.md +3 -0
- package/dist/Address.js +13 -0
- package/dist/Address.js.map +1 -0
- package/dist/Bech32.js +153 -0
- package/dist/Bech32.js.map +1 -0
- package/dist/Cbor.js +1171 -0
- package/dist/Cbor.js.map +1 -0
- package/dist/Uplc/Cek.js +3 -0
- package/dist/Uplc/Cek.js.map +1 -0
- package/dist/Uplc/Data.js +171 -0
- package/dist/Uplc/Data.js.map +1 -0
- package/dist/Uplc/DataSchema.js +118 -0
- package/dist/Uplc/DataSchema.js.map +1 -0
- package/dist/Uplc/Primitive.js +23 -0
- package/dist/Uplc/Primitive.js.map +1 -0
- package/dist/Uplc/index.js +4 -0
- package/dist/Uplc/index.js.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/Base32.js +201 -0
- package/dist/internal/Base32.js.map +1 -0
- package/dist/internal/BigEndian.js +56 -0
- package/dist/internal/BigEndian.js.map +1 -0
- package/dist/internal/Bits.js +300 -0
- package/dist/internal/Bits.js.map +1 -0
- package/dist/internal/Bytes.js +293 -0
- package/dist/internal/Bytes.js.map +1 -0
- package/dist/internal/Flat.js +298 -0
- package/dist/internal/Flat.js.map +1 -0
- package/dist/internal/Float.js +154 -0
- package/dist/internal/Float.js.map +1 -0
- package/dist/internal/Utf8.js +44 -0
- package/dist/internal/Utf8.js.map +1 -0
- package/eslint.config.mjs +30 -0
- package/package.json +36 -0
- package/src/Address.ts +20 -0
- package/src/Bech32.test.ts +117 -0
- package/src/Bech32.ts +198 -0
- package/src/Cbor.test.ts +1610 -0
- package/src/Cbor.ts +1704 -0
- package/src/Uplc/Cek.ts +92 -0
- package/src/Uplc/Data.ts +259 -0
- package/src/Uplc/DataSchema.test.ts +207 -0
- package/src/Uplc/DataSchema.ts +181 -0
- package/src/Uplc/Primitive.ts +56 -0
- package/src/Uplc/index.ts +3 -0
- package/src/index.ts +4 -0
- package/src/internal/Base32.test.ts +219 -0
- package/src/internal/Base32.ts +341 -0
- package/src/internal/BigEndian.test.ts +79 -0
- package/src/internal/BigEndian.ts +67 -0
- package/src/internal/Bits.test.ts +300 -0
- package/src/internal/Bits.ts +398 -0
- package/src/internal/Bytes.test.ts +369 -0
- package/src/internal/Bytes.ts +343 -0
- package/src/internal/Flat.test.ts +29 -0
- package/src/internal/Flat.ts +387 -0
- package/src/internal/Float.test.ts +51 -0
- package/src/internal/Float.ts +190 -0
- package/src/internal/Utf8.test.ts +69 -0
- package/src/internal/Utf8.ts +58 -0
- package/tsconfig.build.json +14 -0
- package/tsconfig.json +38 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bytes.js","sourceRoot":"","sources":["../../src/internal/Bytes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import * as Bits from "./Bits.js";
|
|
2
|
+
/**
|
|
3
|
+
* @param bytes
|
|
4
|
+
* @returns
|
|
5
|
+
*/
|
|
6
|
+
export function makeReader(bytes) {
|
|
7
|
+
return new ReaderImpl(bytes);
|
|
8
|
+
}
|
|
9
|
+
class ReaderImpl {
|
|
10
|
+
bitReader;
|
|
11
|
+
/**
|
|
12
|
+
* @param bytes
|
|
13
|
+
*/
|
|
14
|
+
constructor(bytes) {
|
|
15
|
+
this.bitReader = Bits.makeReader(bytes);
|
|
16
|
+
}
|
|
17
|
+
isAtEnd() {
|
|
18
|
+
return this.bitReader.isAtEnd();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @param n
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
readBits(n) {
|
|
25
|
+
return this.bitReader.readBits(n);
|
|
26
|
+
}
|
|
27
|
+
readBool() {
|
|
28
|
+
return this.readBits(1) == 1;
|
|
29
|
+
}
|
|
30
|
+
readBuiltinId() {
|
|
31
|
+
return this.readBits(7);
|
|
32
|
+
}
|
|
33
|
+
readBytes() {
|
|
34
|
+
return decodeBytes(this.bitReader);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @returns {bigint}
|
|
38
|
+
*/
|
|
39
|
+
readInt() {
|
|
40
|
+
return decodeInt(this.bitReader);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Reads a Plutus-core list with a specified size per element
|
|
44
|
+
* Calls itself recursively until the end of the list is reached
|
|
45
|
+
* @template T
|
|
46
|
+
* @param readItem
|
|
47
|
+
* @returns
|
|
48
|
+
*/
|
|
49
|
+
readList(readItem) {
|
|
50
|
+
// Cons and Nil constructors come from Lisp/Haskell
|
|
51
|
+
// cons 'a' creates a linked list node,
|
|
52
|
+
// nil creates an empty linked list
|
|
53
|
+
const nilOrCons = this.readBits(1);
|
|
54
|
+
if (nilOrCons == 0) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
return [readItem(this)].concat(this.readList(readItem));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
readTag() {
|
|
62
|
+
return this.readBits(4);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @returns
|
|
67
|
+
*/
|
|
68
|
+
export function makeWriter() {
|
|
69
|
+
return new WriterImpl();
|
|
70
|
+
}
|
|
71
|
+
class WriterImpl {
|
|
72
|
+
bitWriter;
|
|
73
|
+
constructor() {
|
|
74
|
+
this.bitWriter = Bits.makeWriter();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @param b
|
|
78
|
+
* @returns
|
|
79
|
+
* Self for chaining
|
|
80
|
+
*/
|
|
81
|
+
writeBool(b) {
|
|
82
|
+
if (b) {
|
|
83
|
+
this.bitWriter.writeBits("1");
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.bitWriter.writeBits("0");
|
|
87
|
+
}
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* @param bytes
|
|
92
|
+
* @returns
|
|
93
|
+
* Self for chaining
|
|
94
|
+
*/
|
|
95
|
+
writeBytes(bytes) {
|
|
96
|
+
encodeBytes(this.bitWriter, bytes);
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @param x
|
|
101
|
+
* @returns
|
|
102
|
+
* Self for chaining
|
|
103
|
+
* @throws
|
|
104
|
+
* If x is negative
|
|
105
|
+
*/
|
|
106
|
+
writeInt(x) {
|
|
107
|
+
if (x < 0) {
|
|
108
|
+
throw new Error("x in writeInt isn't positive");
|
|
109
|
+
}
|
|
110
|
+
encodeInt(this.bitWriter, x);
|
|
111
|
+
return this;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* @returns
|
|
115
|
+
* Self for chaining
|
|
116
|
+
*/
|
|
117
|
+
writeListCons() {
|
|
118
|
+
this.bitWriter.writeBits("1");
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* @returns
|
|
123
|
+
* Self for chaining
|
|
124
|
+
*/
|
|
125
|
+
writeListNil() {
|
|
126
|
+
this.bitWriter.writeBits("0");
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* @param tag
|
|
131
|
+
* @returns
|
|
132
|
+
* Self for chaining
|
|
133
|
+
*/
|
|
134
|
+
writeTermTag(tag) {
|
|
135
|
+
this.bitWriter.writeBits(Bits.pad(tag.toString(2), 4));
|
|
136
|
+
return this;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* @param typeBits
|
|
140
|
+
* @returns
|
|
141
|
+
* Self for chaining
|
|
142
|
+
*/
|
|
143
|
+
writeTypeBits(typeBits) {
|
|
144
|
+
this.bitWriter.writeBits("1" + typeBits + "0");
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* @param id
|
|
149
|
+
*/
|
|
150
|
+
writeBuiltinId(id) {
|
|
151
|
+
this.bitWriter.writeBits(Bits.pad(id.toString(2), 7));
|
|
152
|
+
return this;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* @returns
|
|
156
|
+
*/
|
|
157
|
+
finalize() {
|
|
158
|
+
return this.bitWriter.finalize();
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* @param reader
|
|
163
|
+
* @returns
|
|
164
|
+
*/
|
|
165
|
+
export function decodeBytes(reader) {
|
|
166
|
+
reader.moveToByteBoundary(true);
|
|
167
|
+
const bytes = [];
|
|
168
|
+
let nChunk = reader.readByte();
|
|
169
|
+
while (nChunk > 0) {
|
|
170
|
+
for (let i = 0; i < nChunk; i++) {
|
|
171
|
+
bytes.push(reader.readByte());
|
|
172
|
+
}
|
|
173
|
+
nChunk = reader.readByte();
|
|
174
|
+
}
|
|
175
|
+
return bytes;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Write a list of bytes to the bitWriter using flat encoding.
|
|
179
|
+
* Used by UplcString, UplcByteArray and UplcDataValue
|
|
180
|
+
* Equivalent to E_B* function in Plutus-core docs
|
|
181
|
+
* @param writer
|
|
182
|
+
* @param bytes
|
|
183
|
+
* @param pad
|
|
184
|
+
* Optional, defaults to false
|
|
185
|
+
*/
|
|
186
|
+
export function encodeBytes(writer, bytes, pad = true) {
|
|
187
|
+
if (pad) {
|
|
188
|
+
writer.padToByteBoundary(true);
|
|
189
|
+
}
|
|
190
|
+
// the rest of this function is equivalent to E_C* function in Plutus-core docs
|
|
191
|
+
const n = bytes.length;
|
|
192
|
+
let pos = 0;
|
|
193
|
+
// write chunks of 255
|
|
194
|
+
while (pos < n) {
|
|
195
|
+
// each iteration is equivalent to E_C function in Plutus-core docs
|
|
196
|
+
const nChunk = Math.min(n - pos, 255);
|
|
197
|
+
// equivalent to E_8 function in Plutus-core docs
|
|
198
|
+
writer.writeBits(Bits.pad(nChunk.toString(2), 8));
|
|
199
|
+
for (let i = pos; i < pos + nChunk; i++) {
|
|
200
|
+
const b = bytes[i];
|
|
201
|
+
// equivalent to E_8 function in Plutus-core docs
|
|
202
|
+
writer.writeBits(Bits.pad(b.toString(2), 8));
|
|
203
|
+
}
|
|
204
|
+
pos += nChunk;
|
|
205
|
+
}
|
|
206
|
+
if (pad) {
|
|
207
|
+
writer.writeBits("00000000");
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Includes type bits
|
|
212
|
+
* @param n
|
|
213
|
+
* @returns
|
|
214
|
+
*/
|
|
215
|
+
export function bytesSize(n) {
|
|
216
|
+
return 4 + n * 8 + Math.ceil(n / 256) * 8 + 8;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Returns an unsigned (zigzag encoded) bigint
|
|
220
|
+
* @param reader
|
|
221
|
+
* @returns
|
|
222
|
+
*/
|
|
223
|
+
export function decodeInt(reader) {
|
|
224
|
+
const bytes = [];
|
|
225
|
+
let b = reader.readByte();
|
|
226
|
+
bytes.push(b);
|
|
227
|
+
while (!rawByteIsLast(b)) {
|
|
228
|
+
b = reader.readByte();
|
|
229
|
+
bytes.push(b);
|
|
230
|
+
}
|
|
231
|
+
// strip the leading bit
|
|
232
|
+
return decodeIntLE7(bytes.map((b) => parseRawByte(b))); // raw int is unsigned
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Combines a list of Plutus-core bytes into a bigint (leading bit of each byte is ignored).
|
|
236
|
+
* Differs from bytesToBigInt in utils.js because only 7 bits are used from each byte.
|
|
237
|
+
* @param bytes
|
|
238
|
+
* @returns
|
|
239
|
+
*/
|
|
240
|
+
function decodeIntLE7(bytes) {
|
|
241
|
+
let value = BigInt(0);
|
|
242
|
+
const n = bytes.length;
|
|
243
|
+
for (let i = 0; i < n; i++) {
|
|
244
|
+
const b = bytes[i];
|
|
245
|
+
// 7 (not 8), because leading bit isn't used here
|
|
246
|
+
value = value + BigInt(b) * pow2(BigInt(i) * 7n);
|
|
247
|
+
}
|
|
248
|
+
return value;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* 2 to the power 'p' for bigint.
|
|
252
|
+
* @param p
|
|
253
|
+
* @returns
|
|
254
|
+
*/
|
|
255
|
+
function pow2(p) {
|
|
256
|
+
return p <= 0n ? 1n : 2n << (p - 1n);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Parses a single byte in the Plutus-core byte-list representation of an int
|
|
260
|
+
* @param b
|
|
261
|
+
* @returns
|
|
262
|
+
*/
|
|
263
|
+
function parseRawByte(b) {
|
|
264
|
+
return b & 0b01111111;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Returns true if 'b' is the last byte in the Plutus-core byte-list representation of an int.
|
|
268
|
+
* @param b
|
|
269
|
+
* @returns
|
|
270
|
+
*/
|
|
271
|
+
function rawByteIsLast(b) {
|
|
272
|
+
return (b & 0b10000000) == 0;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* @param bitWriter
|
|
276
|
+
* @param x
|
|
277
|
+
* positive number
|
|
278
|
+
*/
|
|
279
|
+
export function encodeInt(bitWriter, x) {
|
|
280
|
+
const bitString = Bits.pad(x.toString(2), 7);
|
|
281
|
+
// split every 7th
|
|
282
|
+
const parts = [];
|
|
283
|
+
for (let i = 0; i < bitString.length; i += 7) {
|
|
284
|
+
parts.push(bitString.slice(i, i + 7));
|
|
285
|
+
}
|
|
286
|
+
// reverse the parts
|
|
287
|
+
parts.reverse();
|
|
288
|
+
for (let i = 0; i < parts.length; i++) {
|
|
289
|
+
if (i == parts.length - 1) {
|
|
290
|
+
// last
|
|
291
|
+
bitWriter.writeBits("0" + parts[i]);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
bitWriter.writeBits("1" + parts[i]);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=Flat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Flat.js","sourceRoot":"","sources":["../../src/internal/Flat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Encoding, Either } from "effect";
|
|
2
|
+
import { toHex } from "./Bytes.js";
|
|
3
|
+
const SPECIAL_EXPONENT = 31;
|
|
4
|
+
const LARGEST_SIGNIFICAND = 1024;
|
|
5
|
+
const POW2 = [
|
|
6
|
+
0.00006103515625, // 2^-14
|
|
7
|
+
0.0001220703125, // 2^-13
|
|
8
|
+
0.000244140625, // 2^-12
|
|
9
|
+
0.00048828125, // 2^-11
|
|
10
|
+
0.0009765625, // 2^-10
|
|
11
|
+
0.001953125, // 2^-9
|
|
12
|
+
0.00390625, // 2^-8
|
|
13
|
+
0.0078125, // 2^-7
|
|
14
|
+
0.015625, // 2^-6
|
|
15
|
+
0.03125, // 2^-5
|
|
16
|
+
0.0625, // 2^-4
|
|
17
|
+
0.125, // 2^-3
|
|
18
|
+
0.25, // 2^-2
|
|
19
|
+
0.5, // 2^-1
|
|
20
|
+
1, // 2^0
|
|
21
|
+
2, // 2^1
|
|
22
|
+
4, // 2^2
|
|
23
|
+
8, // 2^3
|
|
24
|
+
16, // 2^4
|
|
25
|
+
32, // 2^5
|
|
26
|
+
64, // 2^6
|
|
27
|
+
128, // 2^7
|
|
28
|
+
256, // 2^8
|
|
29
|
+
512, // 2^9
|
|
30
|
+
1024, // 2^10
|
|
31
|
+
2048, // 2^11
|
|
32
|
+
4096, // 2^12
|
|
33
|
+
8192, // 2^13
|
|
34
|
+
16384, // 2^14
|
|
35
|
+
32768, // 2^15
|
|
36
|
+
65536 // 2^16
|
|
37
|
+
];
|
|
38
|
+
/**
|
|
39
|
+
* Custom IEEE 754 Float16 implementation, not fast, but easy to audit
|
|
40
|
+
* @param {number[]} bytes
|
|
41
|
+
* @returns {number}
|
|
42
|
+
*/
|
|
43
|
+
export function decodeFloat16(bytes) {
|
|
44
|
+
if (bytes.length != 2) {
|
|
45
|
+
return Either.left(Encoding.DecodeException(toHex(bytes), `expected 2 bytes for IEEE 754 encoded Float16 number, got ${bytes.length}`));
|
|
46
|
+
}
|
|
47
|
+
const sign = bytes[0] >> 7 ? -1 : 1;
|
|
48
|
+
const exponent = (bytes[0] & 0b01111100) >> 2;
|
|
49
|
+
const significand = (bytes[0] & 0b00000011) * 256 + bytes[1];
|
|
50
|
+
if (exponent === 0) {
|
|
51
|
+
if (significand == 0) {
|
|
52
|
+
return Either.right(sign < 0 ? -0 : 0);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
return Either.right((sign * POW2[0] * significand) / LARGEST_SIGNIFICAND);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (exponent === SPECIAL_EXPONENT) {
|
|
59
|
+
if (significand == 0) {
|
|
60
|
+
return Either.right(sign < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return Either.right(Number.NaN);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return Either.right(sign * POW2[exponent - 1] * (1.0 + significand / LARGEST_SIGNIFICAND));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Custom IEEE 754 Float16 implementation, not fast, but easy to audit
|
|
72
|
+
* @param f
|
|
73
|
+
* @returns
|
|
74
|
+
*/
|
|
75
|
+
export function encodeFloat16(f) {
|
|
76
|
+
if (Object.is(f, 0)) {
|
|
77
|
+
return [0, 0];
|
|
78
|
+
}
|
|
79
|
+
else if (Object.is(f, -0)) {
|
|
80
|
+
return [0x80, 0];
|
|
81
|
+
}
|
|
82
|
+
else if (f === Number.NEGATIVE_INFINITY) {
|
|
83
|
+
return [0xfc, 0];
|
|
84
|
+
}
|
|
85
|
+
else if (f === Number.POSITIVE_INFINITY) {
|
|
86
|
+
return [0x7c, 0];
|
|
87
|
+
}
|
|
88
|
+
else if (Number.isNaN(f)) {
|
|
89
|
+
return [0x7c, 1];
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const sign = Math.sign(f);
|
|
93
|
+
const signBit = sign > 0 ? 0 : 0b10000000;
|
|
94
|
+
f = Math.abs(f);
|
|
95
|
+
if (f < POW2[0]) {
|
|
96
|
+
const significand = Math.floor((f / POW2[0]) * LARGEST_SIGNIFICAND);
|
|
97
|
+
return [signBit | (significand >> 8), significand & 0xff];
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const unbiasedExponent = Math.floor(Math.log2(f));
|
|
101
|
+
const exponent = (unbiasedExponent + 15) & 0b00011111;
|
|
102
|
+
const significand = Math.round((f / POW2[exponent - 1] - 1) * LARGEST_SIGNIFICAND);
|
|
103
|
+
return [
|
|
104
|
+
signBit | (exponent << 2) | (significand >> 8),
|
|
105
|
+
significand & 0xff
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Leverages the builtin DataView class to decode a IEEE 754 float32 number
|
|
112
|
+
* @param {number[]} bytes
|
|
113
|
+
* @returns
|
|
114
|
+
*/
|
|
115
|
+
export function decodeFloat32(bytes) {
|
|
116
|
+
if (bytes.length != 4) {
|
|
117
|
+
return Either.left(Encoding.DecodeException(toHex(bytes), `expected 4 bytes for IEEE 754 encoded Float32, got ${bytes.length} bytes`));
|
|
118
|
+
}
|
|
119
|
+
const view = new DataView(Uint8Array.from(bytes).buffer);
|
|
120
|
+
return Either.right(view.getFloat32(0));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Leverages the builtin DataView class to encode a floating point number using IEEE 754 float32 encoding
|
|
124
|
+
* @param f
|
|
125
|
+
* @returns
|
|
126
|
+
*/
|
|
127
|
+
export function encodeFloat32(f) {
|
|
128
|
+
const view = new DataView(new ArrayBuffer(4));
|
|
129
|
+
view.setFloat32(0, f);
|
|
130
|
+
return Array.from(new Uint8Array(view.buffer));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Leverages the builtin DataView class to decode a IEEE 754 float64 number
|
|
134
|
+
* @param bytes
|
|
135
|
+
* @returns
|
|
136
|
+
*/
|
|
137
|
+
export function decodeFloat64(bytes) {
|
|
138
|
+
if (bytes.length != 8) {
|
|
139
|
+
return Either.left(Encoding.DecodeException(`expected 8 bytes for IEEE 754 encoded Float64, got ${bytes.length} bytes`));
|
|
140
|
+
}
|
|
141
|
+
const view = new DataView(Uint8Array.from(bytes).buffer);
|
|
142
|
+
return Either.right(view.getFloat64(0));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Leverages the builtin DataView class to encode a floating point number using IEEE 754 float64 encoding
|
|
146
|
+
* @param f
|
|
147
|
+
* @returns
|
|
148
|
+
*/
|
|
149
|
+
export function encodeFloat64(f) {
|
|
150
|
+
const view = new DataView(new ArrayBuffer(8));
|
|
151
|
+
view.setFloat64(0, f);
|
|
152
|
+
return Array.from(new Uint8Array(view.buffer));
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=Float.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Float.js","sourceRoot":"","sources":["../../src/internal/Float.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import * as Bytes from "./Bytes.js";
|
|
3
|
+
/**
|
|
4
|
+
* Decodes a list of uint8 bytes into a string using UTF-8 encoding.
|
|
5
|
+
* @example
|
|
6
|
+
* bytesToUtf8([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]) == "hello world"
|
|
7
|
+
* @param bytes
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export function decode(bytes) {
|
|
11
|
+
return Effect.sync(() => new TextDecoder("utf-8", { fatal: true }).decode(Bytes.toUint8Array(bytes).buffer)).pipe(Effect.catchAll(() => Effect.fail(Bytes.DecodeException(bytes, "Invalid utf-8 encoding"))));
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Encodes a string into a list of uint8 bytes using UTF-8 encoding.
|
|
15
|
+
* @example
|
|
16
|
+
* utf8ToBytes("hello world") == [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
|
|
17
|
+
* @param str
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
export function encode(str) {
|
|
21
|
+
return new TextEncoder().encode(str);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Tests if a uint8 array is valid utf8 encoding.
|
|
25
|
+
* @param {number[]} bytes
|
|
26
|
+
* @returns {boolean}
|
|
27
|
+
*/
|
|
28
|
+
export function isValid(bytes) {
|
|
29
|
+
/**
|
|
30
|
+
* Bytes.toArray() doesn't fail if any of the bytes are out of range
|
|
31
|
+
*/
|
|
32
|
+
const bs = Bytes.toArray(bytes);
|
|
33
|
+
if (bs.some((b) => b < 0 || b > 255)) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
new TextDecoder("utf-8", { fatal: true }).decode(new Uint8Array(bs).buffer);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch (_e) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=Utf8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Utf8.js","sourceRoot":"","sources":["../../src/internal/Utf8.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,QAAQ,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CACpB,KAAqC;IAErC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CACtB,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAC9C,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CACjC,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CACnB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,CACpE,CACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAAqC;IAC3D;;OAEG;IACH,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAE/B,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;QAE3E,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
|
|
3
|
+
import eslint from "@eslint/js"
|
|
4
|
+
import { defineConfig, globalIgnores } from "eslint/config"
|
|
5
|
+
import tseslint from "typescript-eslint"
|
|
6
|
+
|
|
7
|
+
export default defineConfig(
|
|
8
|
+
globalIgnores(["node_modules/*", "dist/*", "types/*", "*.mjs"]),
|
|
9
|
+
eslint.configs.recommended,
|
|
10
|
+
tseslint.configs.recommendedTypeChecked,
|
|
11
|
+
{
|
|
12
|
+
languageOptions: {
|
|
13
|
+
globals: {
|
|
14
|
+
TextDecoder: "readonly",
|
|
15
|
+
TextEncoder: "readonly"
|
|
16
|
+
},
|
|
17
|
+
parserOptions: {
|
|
18
|
+
projectService: true
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
rules: {
|
|
22
|
+
"@typescript-eslint/no-explicit-any": "off",
|
|
23
|
+
"@typescript-eslint/no-unused-vars": [
|
|
24
|
+
"error",
|
|
25
|
+
{ caughtErrors: "none", argsIgnorePattern: "^_" }
|
|
26
|
+
],
|
|
27
|
+
"@typescript-eslint/strict-boolean-expressions": "error"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
)
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@helios-lang/effect",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "types/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc -p ./tsconfig.build.json",
|
|
9
|
+
"lint": "eslint",
|
|
10
|
+
"prettify": "prettier . --write",
|
|
11
|
+
"test": "pnpm run test:types && pnpm run lint && pnpm run test:suite",
|
|
12
|
+
"test:suite": "bun test .",
|
|
13
|
+
"test:types": "tsc -p ./tsconfig.json"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [],
|
|
16
|
+
"author": "Christian Schmitz",
|
|
17
|
+
"license": "BSD-3-Clause",
|
|
18
|
+
"packageManager": "pnpm@10.20.0",
|
|
19
|
+
"prettier": {
|
|
20
|
+
"trailingComma": "none",
|
|
21
|
+
"tabWidth": 2,
|
|
22
|
+
"semi": false,
|
|
23
|
+
"singleQuote": false
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@eslint/js": "^9.39.2",
|
|
27
|
+
"@types/bun": "^1.3.4",
|
|
28
|
+
"eslint": "^9.39.2",
|
|
29
|
+
"prettier": "^3.7.4",
|
|
30
|
+
"typescript": "^5.9.3",
|
|
31
|
+
"typescript-eslint": "^8.50.0"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"effect": "^3.19.12"
|
|
35
|
+
}
|
|
36
|
+
}
|
package/src/Address.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Schema } from "effect"
|
|
2
|
+
import * as Bech32 from "./Bech32.js"
|
|
3
|
+
|
|
4
|
+
export function isValid(addr: string): boolean {
|
|
5
|
+
if (addr.startsWith("addr1") || addr.startsWith("addr_test1")) {
|
|
6
|
+
return Bech32.isValid(addr)
|
|
7
|
+
}
|
|
8
|
+
// TODO: validate Byron format
|
|
9
|
+
|
|
10
|
+
return false
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const Address = Schema.String.pipe(
|
|
14
|
+
Schema.filter((addr: string) => {
|
|
15
|
+
return isValid(addr) || "Invalid Cardano Address"
|
|
16
|
+
}),
|
|
17
|
+
Schema.brand("Address")
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
export type Address = Schema.Schema.Type<typeof Address>
|