@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
package/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2025, Helios-Lang
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # effect
2
+
3
+ Idiomatic Effect-TS version of HeliosLang off-chain library
@@ -0,0 +1,13 @@
1
+ import { Schema } from "effect";
2
+ import * as Bech32 from "./Bech32.js";
3
+ export function isValid(addr) {
4
+ if (addr.startsWith("addr1") || addr.startsWith("addr_test1")) {
5
+ return Bech32.isValid(addr);
6
+ }
7
+ // TODO: validate Byron format
8
+ return false;
9
+ }
10
+ export const Address = Schema.String.pipe(Schema.filter((addr) => {
11
+ return isValid(addr) || "Invalid Cardano Address";
12
+ }), Schema.brand("Address"));
13
+ //# sourceMappingURL=Address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Address.js","sourceRoot":"","sources":["../src/Address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IACD,8BAA8B;IAE9B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CACvC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;IAC7B,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAA;AACnD,CAAC,CAAC,EACF,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CACxB,CAAA"}
package/dist/Bech32.js ADDED
@@ -0,0 +1,153 @@
1
+ import { Either, Encoding } from "effect";
2
+ import * as Base32 from "./internal/Base32.js";
3
+ /**
4
+ * Bech32 base32 alphabet
5
+ */
6
+ const ALPHABET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l";
7
+ const PAYLOAD_CODEC = /* @__PURE__ */ Base32.make({
8
+ alphabet: ALPHABET
9
+ });
10
+ /**
11
+ * Decomposes a Bech32 checksummed string (eg. a Cardano address), and returns the human readable part and the original bytes
12
+ * Throws an error if checksum is invalid.
13
+ * @param encoded
14
+ * @returns
15
+ * `prefix` part is the human-readable part, `bytes` part is a list containing the underlying bytes.
16
+ */
17
+ export function decode(encoded) {
18
+ const [prefix, payload] = split(encoded);
19
+ if (!verifySplit(prefix, payload)) {
20
+ return Either.left(Encoding.DecodeException(encoded, "invalid bech32 encoding"));
21
+ }
22
+ const bytes = PAYLOAD_CODEC.decode(payload.slice(0, payload.length - 6));
23
+ if (bytes._tag == "Left") {
24
+ return Either.left(bytes.left);
25
+ }
26
+ return Either.right({ prefix, bytes: Array.from(bytes.right) });
27
+ }
28
+ /**
29
+ * Creates a Bech32 checksummed string (eg. used to represent Cardano addresses).
30
+ * @param prefix
31
+ * human-readable part (eg. "addr")
32
+ * @param payload
33
+ * Hex encoded or a list of uint8 bytes
34
+ * @returns
35
+ * @throws
36
+ * If prefix is empty
37
+ */
38
+ export function encode(prefix, payload) {
39
+ if (prefix.length == 0) {
40
+ throw new Error("human-readable-part must have non-zero length");
41
+ }
42
+ payload = PAYLOAD_CODEC.encodeRaw(payload);
43
+ const chkSum = calcChecksum(prefix, payload);
44
+ return (prefix +
45
+ "1" +
46
+ payload
47
+ .concat(chkSum)
48
+ .map((i) => ALPHABET[i])
49
+ .join(""));
50
+ }
51
+ /**
52
+ * Verifies a Bech32 checksum. Prefix must be checked externally
53
+ * @param {string} encoded
54
+ * @returns {boolean}
55
+ */
56
+ export function isValid(encoded) {
57
+ const [prefix, payload] = split(encoded);
58
+ return verifySplit(prefix, payload);
59
+ }
60
+ /**
61
+ * Expand human readable prefix of the bech32 encoding so it can be used in the checkSum.
62
+ * @param prefix
63
+ * @returns
64
+ */
65
+ function expandPrefix(prefix) {
66
+ const bytes = [];
67
+ for (const c of prefix) {
68
+ bytes.push(c.charCodeAt(0) >> 5);
69
+ }
70
+ bytes.push(0);
71
+ for (const c of prefix) {
72
+ bytes.push(c.charCodeAt(0) & 31);
73
+ }
74
+ return bytes;
75
+ }
76
+ /**
77
+ * Split bech32 encoded string into human-readable-part and payload part.
78
+ * @param encoded
79
+ * @returns
80
+ * First item is human-readable-part, second part is payload part
81
+ */
82
+ function split(encoded) {
83
+ const i = encoded.indexOf("1");
84
+ if (i == -1 || i == 0) {
85
+ return ["", encoded];
86
+ }
87
+ else {
88
+ return [encoded.slice(0, i), encoded.slice(i + 1)];
89
+ }
90
+ }
91
+ /**
92
+ * Used as part of the bech32 checksum.
93
+ * @param bytes
94
+ * @returns
95
+ */
96
+ function polymod(bytes) {
97
+ const GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];
98
+ let chk = 1;
99
+ for (const b of bytes) {
100
+ const c = chk >> 25;
101
+ chk = ((chk & 0x1fffffff) << 5) ^ b;
102
+ for (let i = 0; i < 5; i++) {
103
+ if (((c >> i) & 1) != 0) {
104
+ chk ^= GEN[i];
105
+ }
106
+ }
107
+ }
108
+ return chk;
109
+ }
110
+ /**
111
+ * Generate the bech32 checksum.
112
+ * @param prefix
113
+ * @param payload
114
+ * numbers between 0 and 32
115
+ * @returns
116
+ * 6 numbers between 0 and 32
117
+ */
118
+ function calcChecksum(prefix, payload) {
119
+ const bytes = expandPrefix(prefix).concat(payload);
120
+ const chk = polymod(bytes.concat([0, 0, 0, 0, 0, 0])) ^ 1;
121
+ const chkSum = [];
122
+ for (let i = 0; i < 6; i++) {
123
+ chkSum.push((chk >> (5 * (5 - i))) & 31);
124
+ }
125
+ return chkSum;
126
+ }
127
+ /**
128
+ * @param prefix
129
+ * @param payload
130
+ * @returns
131
+ */
132
+ function verifySplit(prefix, payload) {
133
+ if (prefix.length == 0) {
134
+ return false;
135
+ }
136
+ const data = [];
137
+ for (const c of payload) {
138
+ const j = ALPHABET.indexOf(c);
139
+ if (j == -1) {
140
+ return false;
141
+ }
142
+ data.push(j);
143
+ }
144
+ const chkSumA = data.slice(data.length - 6);
145
+ const chkSumB = calcChecksum(prefix, data.slice(0, data.length - 6));
146
+ for (let j = 0; j < 6; j++) {
147
+ if (chkSumA[j] != chkSumB[j]) {
148
+ return false;
149
+ }
150
+ }
151
+ return true;
152
+ }
153
+ //# sourceMappingURL=Bech32.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bech32.js","sourceRoot":"","sources":["../src/Bech32.ts"],"names":[],"mappings":"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"}