@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.
Files changed (64) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +3 -0
  3. package/dist/Address.js +13 -0
  4. package/dist/Address.js.map +1 -0
  5. package/dist/Bech32.js +153 -0
  6. package/dist/Bech32.js.map +1 -0
  7. package/dist/Cbor.js +1171 -0
  8. package/dist/Cbor.js.map +1 -0
  9. package/dist/Uplc/Cek.js +3 -0
  10. package/dist/Uplc/Cek.js.map +1 -0
  11. package/dist/Uplc/Data.js +171 -0
  12. package/dist/Uplc/Data.js.map +1 -0
  13. package/dist/Uplc/DataSchema.js +118 -0
  14. package/dist/Uplc/DataSchema.js.map +1 -0
  15. package/dist/Uplc/Primitive.js +23 -0
  16. package/dist/Uplc/Primitive.js.map +1 -0
  17. package/dist/Uplc/index.js +4 -0
  18. package/dist/Uplc/index.js.map +1 -0
  19. package/dist/index.js +5 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/internal/Base32.js +201 -0
  22. package/dist/internal/Base32.js.map +1 -0
  23. package/dist/internal/BigEndian.js +56 -0
  24. package/dist/internal/BigEndian.js.map +1 -0
  25. package/dist/internal/Bits.js +300 -0
  26. package/dist/internal/Bits.js.map +1 -0
  27. package/dist/internal/Bytes.js +293 -0
  28. package/dist/internal/Bytes.js.map +1 -0
  29. package/dist/internal/Flat.js +298 -0
  30. package/dist/internal/Flat.js.map +1 -0
  31. package/dist/internal/Float.js +154 -0
  32. package/dist/internal/Float.js.map +1 -0
  33. package/dist/internal/Utf8.js +44 -0
  34. package/dist/internal/Utf8.js.map +1 -0
  35. package/eslint.config.mjs +30 -0
  36. package/package.json +36 -0
  37. package/src/Address.ts +20 -0
  38. package/src/Bech32.test.ts +117 -0
  39. package/src/Bech32.ts +198 -0
  40. package/src/Cbor.test.ts +1610 -0
  41. package/src/Cbor.ts +1704 -0
  42. package/src/Uplc/Cek.ts +92 -0
  43. package/src/Uplc/Data.ts +259 -0
  44. package/src/Uplc/DataSchema.test.ts +207 -0
  45. package/src/Uplc/DataSchema.ts +181 -0
  46. package/src/Uplc/Primitive.ts +56 -0
  47. package/src/Uplc/index.ts +3 -0
  48. package/src/index.ts +4 -0
  49. package/src/internal/Base32.test.ts +219 -0
  50. package/src/internal/Base32.ts +341 -0
  51. package/src/internal/BigEndian.test.ts +79 -0
  52. package/src/internal/BigEndian.ts +67 -0
  53. package/src/internal/Bits.test.ts +300 -0
  54. package/src/internal/Bits.ts +398 -0
  55. package/src/internal/Bytes.test.ts +369 -0
  56. package/src/internal/Bytes.ts +343 -0
  57. package/src/internal/Flat.test.ts +29 -0
  58. package/src/internal/Flat.ts +387 -0
  59. package/src/internal/Float.test.ts +51 -0
  60. package/src/internal/Float.ts +190 -0
  61. package/src/internal/Utf8.test.ts +69 -0
  62. package/src/internal/Utf8.ts +58 -0
  63. package/tsconfig.build.json +14 -0
  64. 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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAC3B,MAAM,mBAAmB,GAAG,IAAI,CAAA;AAChC,MAAM,IAAI,GAAG;IACX,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,cAAc,EAAE,QAAQ;IACxB,aAAa,EAAE,QAAQ;IACvB,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,OAAO;IACpB,UAAU,EAAE,OAAO;IACnB,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,OAAO;IACZ,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,MAAM;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,KAAK,CAAC,OAAO;CACd,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAe;IAEf,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,IAAI,CAChB,QAAQ,CAAC,eAAe,CACtB,KAAK,CAAC,KAAK,CAAC,EACZ,6DAA6D,KAAK,CAAC,MAAM,EAAE,CAC5E,CACF,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAC7C,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAE5D,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,mBAAmB,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QACzC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CACjB,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAC/D,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC,KAAK,CACjB,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,WAAW,GAAG,mBAAmB,CAAC,CACtE,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACf,CAAC;SAAM,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC;SAAM,IAAI,CAAC,KAAK,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC;SAAM,IAAI,CAAC,KAAK,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC1C,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;QACzC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAEf,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAA;YAEnE,OAAO,CAAC,OAAO,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAA;QAC3D,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACjD,MAAM,QAAQ,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC,GAAG,UAAU,CAAA;YAErD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,CACnD,CAAA;YAED,OAAO;gBACL,OAAO,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;gBAC9C,WAAW,GAAG,IAAI;aACnB,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAe;IAEf,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,IAAI,CAChB,QAAQ,CAAC,eAAe,CACtB,KAAK,CAAC,KAAK,CAAC,EACZ,sDAAsD,KAAK,CAAC,MAAM,QAAQ,CAC3E,CACF,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;IAExD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7C,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAErB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAe;IAEf,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,IAAI,CAChB,QAAQ,CAAC,eAAe,CACtB,sDAAsD,KAAK,CAAC,MAAM,QAAQ,CAC3E,CACF,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;IAExD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7C,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAErB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAChD,CAAC"}
@@ -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>