@hazae41/fixed 1.0.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/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # Fixed
2
+
3
+ Fixed-point numbers in idiomatic TypeScript
4
+
5
+ ```bash
6
+ npm i @hazae41/fixed
7
+ ```
8
+
9
+ [**Node Package 📦**](https://www.npmjs.com/package/@hazae41/fixed)
10
+
11
+ ## Features
12
+
13
+ ### Current features
14
+ - 100% TypeScript and ESM
15
+ - No external dependencies
16
+
17
+ ## Usage
18
+
19
+ ```tsx
20
+ const eth = new Fixed(123n, 0) // 123n
21
+ const wei = fixed.move(18) // 123000000000000000000n
22
+
23
+ const wei2 = wei.add(new Fixed(1n, 18)) // 123000000000000000001n
24
+
25
+ const str = wei2.toString() // "123.000000000000000001"
26
+ ```
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var index = require('./mods/fixed/index.cjs');
4
+
5
+
6
+
7
+ exports.BigIntFixedInit = index.BigIntFixedInit;
8
+ exports.Fixed = index.Fixed;
9
+ exports.ZeroHexFixedInit = index.ZeroHexFixedInit;
10
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ exports.BigInts = void 0;
4
+ (function(BigInts) {
5
+ function tensOf(value) {
6
+ return 10n ** BigInt(value);
7
+ }
8
+ BigInts.tensOf = tensOf;
9
+ })(exports.BigInts || (exports.BigInts = {}));
10
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/libs/bigint/index.ts"],"sourcesContent":["\nexport namespace BigInts {\n\n export function tensOf(value: number) {\n return 10n ** BigInt(value)\n }\n\n}"],"names":["BigInts","tensOf","value","BigInt"],"mappings":";;;AACiBA,CAAAA,SAAAA,OAAAA,EAAAA;AAER,IAAA,SAASC,OAAOC,KAAa,EAAA;QAClC,OAAO,GAAG,IAAIC,MAAOD,CAAAA,KAAAA,CAAAA;AACvB;YAFgBD,MAAAA,GAAAA,MAAAA;AAIlB,CAAA,EANiBD,eAAAA,KAAAA,eAAAA,GAAAA,EAAAA,CAAAA,CAAAA;;"}
@@ -0,0 +1,138 @@
1
+ 'use strict';
2
+
3
+ var hex = require('@hazae41/hex');
4
+ var index = require('../../libs/bigint/index.cjs');
5
+
6
+ class ZeroHexFixedInit {
7
+ value;
8
+ decimals;
9
+ constructor(value, decimals){
10
+ this.value = value;
11
+ this.decimals = decimals;
12
+ }
13
+ }
14
+ class BigIntFixedInit {
15
+ value;
16
+ decimals;
17
+ constructor(value, decimals){
18
+ this.value = value;
19
+ this.decimals = decimals;
20
+ }
21
+ }
22
+ class Fixed {
23
+ value;
24
+ decimals;
25
+ tens;
26
+ constructor(value, decimals){
27
+ this.value = value;
28
+ this.decimals = decimals;
29
+ this.tens = index.BigInts.tensOf(decimals);
30
+ }
31
+ static unit(decimals) {
32
+ return new Fixed(index.BigInts.tensOf(decimals), decimals);
33
+ }
34
+ static from(init) {
35
+ if (init instanceof Fixed) return init;
36
+ if (typeof init.value === "string") return Fixed.fromZeroHexString(init.value, init.decimals);
37
+ return new Fixed(init.value, init.decimals);
38
+ }
39
+ static fromZeroHexInit(init) {
40
+ return Fixed.fromZeroHexString(init.value, init.decimals);
41
+ }
42
+ static fromBigIntInit(init) {
43
+ return new Fixed(init.value, init.decimals);
44
+ }
45
+ static fromZeroHexString(value, decimals) {
46
+ return new Fixed(hex.ZeroHexString.toBigInt(value), decimals);
47
+ }
48
+ static fromDecimalString(text, decimals) {
49
+ const [whole = "0", decimal = "0"] = text.split(".");
50
+ const value = BigInt(whole + decimal.padEnd(decimals, "0").slice(0, decimals));
51
+ return new Fixed(value, decimals);
52
+ }
53
+ static fromString(text, decimals) {
54
+ if (hex.ZeroHexString.String.is(text)) return Fixed.fromZeroHexString(text, decimals);
55
+ return Fixed.fromDecimalString(text, decimals);
56
+ }
57
+ toZeroHexInit() {
58
+ return new ZeroHexFixedInit(this.toZeroHexString(), this.decimals);
59
+ }
60
+ toBigIntInit() {
61
+ return new BigIntFixedInit(this.value, this.decimals);
62
+ }
63
+ toZeroHexString() {
64
+ return hex.ZeroHexString.fromBigInt(this.value);
65
+ }
66
+ toDecimalString() {
67
+ const raw = this.value.toString().padStart(this.decimals, "0");
68
+ const whole = raw.slice(0, raw.length - this.decimals).replaceAll("0", " ").trimStart().replaceAll(" ", "0");
69
+ const decimal = raw.slice(raw.length - this.decimals).replaceAll("0", " ").trimEnd().replaceAll(" ", "0");
70
+ if (!decimal) return whole || "0";
71
+ return `${whole || "0"}.${decimal}`;
72
+ }
73
+ toString() {
74
+ return this.toDecimalString();
75
+ }
76
+ toJSON() {
77
+ return this.toZeroHexInit();
78
+ }
79
+ as(decimals) {
80
+ return new Fixed(this.value, decimals);
81
+ }
82
+ move(decimals) {
83
+ if (this.decimals > decimals) return new Fixed(this.value / index.BigInts.tensOf(this.decimals - decimals), decimals);
84
+ if (this.decimals < decimals) return new Fixed(this.value * index.BigInts.tensOf(decimals - this.decimals), decimals);
85
+ return this;
86
+ }
87
+ add(other) {
88
+ const dx = this.decimals;
89
+ const dy = other.decimals;
90
+ const dr = Math.max(dx, dy);
91
+ const tr = index.BigInts.tensOf(dr);
92
+ const tx = this.tens;
93
+ const ty = other.tens;
94
+ const vx = this.value;
95
+ const vy = other.value;
96
+ return new Fixed(vx * (tr / tx) + vy * (tr / ty), dr);
97
+ }
98
+ sub(other) {
99
+ const dx = this.decimals;
100
+ const dy = other.decimals;
101
+ const dr = Math.max(dx, dy);
102
+ const tr = index.BigInts.tensOf(dr);
103
+ const tx = this.tens;
104
+ const ty = other.tens;
105
+ const vx = this.value;
106
+ const vy = other.value;
107
+ return new Fixed(vx * (tr / tx) - vy * (tr / ty), dr);
108
+ }
109
+ mul(other) {
110
+ const dx = this.decimals;
111
+ const dy = other.decimals;
112
+ const dr = dx + dy;
113
+ const vx = this.value;
114
+ const vy = other.value;
115
+ return new Fixed(vx * vy, dr);
116
+ }
117
+ div(other) {
118
+ const dx = this.decimals;
119
+ const ty = other.tens;
120
+ const vx = this.value;
121
+ const vy = other.value;
122
+ return new Fixed(vx * ty / vy, dx);
123
+ }
124
+ floor() {
125
+ return new Fixed(this.value - this.value % this.tens, this.decimals);
126
+ }
127
+ ceil() {
128
+ return new Fixed(this.value + (this.tens - this.value % this.tens), this.decimals);
129
+ }
130
+ round() {
131
+ return new Fixed(this.value + this.tens / 2n - (this.value + this.tens / 2n) % this.tens, this.decimals);
132
+ }
133
+ }
134
+
135
+ exports.BigIntFixedInit = BigIntFixedInit;
136
+ exports.Fixed = Fixed;
137
+ exports.ZeroHexFixedInit = ZeroHexFixedInit;
138
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/mods/fixed/index.ts"],"sourcesContent":["import { ZeroHexString } from \"@hazae41/hex\"\nimport { BigInts } from \"libs/bigint/index.js\"\n\nexport interface ZeroHexFixedInit<D extends number = number> {\n readonly value: ZeroHexString,\n readonly decimals: D\n}\n\nexport class ZeroHexFixedInit<D extends number = number> {\n\n constructor(\n readonly value: ZeroHexString,\n readonly decimals: D\n ) { }\n\n}\n\nexport interface BigIntFixedInit<D extends number = number> {\n readonly value: bigint,\n readonly decimals: D\n}\n\nexport class BigIntFixedInit<D extends number = number> {\n\n constructor(\n readonly value: bigint,\n readonly decimals: D\n ) { }\n\n}\n\nexport namespace Fixed {\n\n export type From<D extends number = number> =\n | BigIntFixedInit<D>\n | ZeroHexFixedInit<D>\n\n}\n\nexport class Fixed<D extends number = number> implements BigIntFixedInit {\n\n readonly tens: bigint\n\n constructor(\n readonly value: bigint,\n readonly decimals: D\n ) {\n this.tens = BigInts.tensOf(decimals)\n }\n\n static unit<D extends number = number>(decimals: D) {\n return new Fixed(BigInts.tensOf(decimals), decimals)\n }\n\n static from<D extends number = number>(init: Fixed.From<D>) {\n if (init instanceof Fixed)\n return init\n if (typeof init.value === \"string\")\n return Fixed.fromZeroHexString(init.value, init.decimals)\n return new Fixed(init.value, init.decimals)\n }\n\n static fromZeroHexInit<D extends number>(init: ZeroHexFixedInit<D>) {\n return Fixed.fromZeroHexString(init.value, init.decimals)\n }\n\n static fromBigIntInit<D extends number>(init: BigIntFixedInit<D>) {\n return new Fixed(init.value, init.decimals)\n }\n\n static fromZeroHexString<D extends number>(value: ZeroHexString, decimals: D) {\n return new Fixed(ZeroHexString.toBigInt(value), decimals)\n }\n\n static fromDecimalString<D extends number>(text: string, decimals: D) {\n const [whole = \"0\", decimal = \"0\"] = text.split(\".\")\n\n const value = BigInt(whole + decimal.padEnd(decimals, \"0\").slice(0, decimals))\n\n return new Fixed(value, decimals)\n }\n\n static fromString<D extends number>(text: string, decimals: D) {\n if (ZeroHexString.String.is(text))\n return Fixed.fromZeroHexString(text, decimals)\n return Fixed.fromDecimalString(text, decimals)\n }\n\n toZeroHexInit() {\n return new ZeroHexFixedInit(this.toZeroHexString(), this.decimals)\n }\n\n toBigIntInit() {\n return new BigIntFixedInit(this.value, this.decimals)\n }\n\n toZeroHexString() {\n return ZeroHexString.fromBigInt(this.value)\n }\n\n toDecimalString() {\n const raw = this.value.toString().padStart(this.decimals, \"0\")\n\n const whole = raw.slice(0, raw.length - this.decimals).replaceAll(\"0\", \" \").trimStart().replaceAll(\" \", \"0\")\n const decimal = raw.slice(raw.length - this.decimals).replaceAll(\"0\", \" \").trimEnd().replaceAll(\" \", \"0\")\n\n if (!decimal)\n return (whole || \"0\")\n\n return `${whole || \"0\"}.${decimal}`\n }\n\n toString() {\n return this.toDecimalString()\n }\n\n toJSON() {\n return this.toZeroHexInit()\n }\n\n as(decimals: number) {\n return new Fixed(this.value, decimals)\n }\n\n move(decimals: number) {\n if (this.decimals > decimals)\n return new Fixed(this.value / BigInts.tensOf(this.decimals - decimals), decimals)\n if (this.decimals < decimals)\n return new Fixed(this.value * BigInts.tensOf(decimals - this.decimals), decimals)\n return this\n }\n\n add(other: Fixed) {\n const dx = this.decimals\n const dy = other.decimals\n\n const dr = Math.max(dx, dy)\n const tr = BigInts.tensOf(dr)\n\n const tx = this.tens\n const ty = other.tens\n\n const vx = this.value\n const vy = other.value\n\n return new Fixed((vx * (tr / tx)) + (vy * (tr / ty)), dr)\n }\n\n sub(other: Fixed) {\n const dx = this.decimals\n const dy = other.decimals\n\n const dr = Math.max(dx, dy)\n const tr = BigInts.tensOf(dr)\n\n const tx = this.tens\n const ty = other.tens\n\n const vx = this.value\n const vy = other.value\n\n return new Fixed((vx * (tr / tx)) - (vy * (tr / ty)), dr)\n }\n\n mul(other: Fixed) {\n const dx = this.decimals\n const dy = other.decimals\n\n const dr = dx + dy\n\n const vx = this.value\n const vy = other.value\n\n return new Fixed(vx * vy, dr)\n }\n\n div(other: Fixed) {\n const dx = this.decimals\n const ty = other.tens\n\n const vx = this.value\n const vy = other.value\n\n return new Fixed((vx * ty) / vy, dx)\n }\n\n floor() {\n return new Fixed(this.value - (this.value % this.tens), this.decimals)\n }\n\n ceil() {\n return new Fixed(this.value + (this.tens - (this.value % this.tens)), this.decimals)\n }\n\n round() {\n return new Fixed(this.value + (this.tens / 2n) - ((this.value + (this.tens / 2n)) % this.tens), this.decimals)\n }\n\n}\n"],"names":["ZeroHexFixedInit","constructor","decimals","value","BigIntFixedInit","Fixed","tens","BigInts","tensOf","unit","from","init","fromZeroHexString","fromZeroHexInit","fromBigIntInit","ZeroHexString","toBigInt","fromDecimalString","text","whole","decimal","split","BigInt","padEnd","slice","fromString","String","is","toZeroHexInit","toZeroHexString","toBigIntInit","fromBigInt","toDecimalString","raw","toString","padStart","length","replaceAll","trimStart","trimEnd","toJSON","as","move","add","other","dx","dy","dr","Math","max","tr","tx","ty","vx","vy","sub","mul","div","floor","ceil","round"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { BigIntFixedInit, Fixed, ZeroHexFixedInit } from './mods/fixed/index.mjs';
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ var BigInts;
2
+ (function(BigInts) {
3
+ function tensOf(value) {
4
+ return 10n ** BigInt(value);
5
+ }
6
+ BigInts.tensOf = tensOf;
7
+ })(BigInts || (BigInts = {}));
8
+
9
+ export { BigInts };
10
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/libs/bigint/index.ts"],"sourcesContent":["\nexport namespace BigInts {\n\n export function tensOf(value: number) {\n return 10n ** BigInt(value)\n }\n\n}"],"names":["BigInts","tensOf","value","BigInt"],"mappings":";AACiBA,CAAAA,SAAAA,OAAAA,EAAAA;AAER,IAAA,SAASC,OAAOC,KAAa,EAAA;QAClC,OAAO,GAAG,IAAIC,MAAOD,CAAAA,KAAAA,CAAAA;AACvB;YAFgBD,MAAAA,GAAAA,MAAAA;AAIlB,CAAA,EANiBD,OAAAA,KAAAA,OAAAA,GAAAA,EAAAA,CAAAA,CAAAA;;;;"}
@@ -0,0 +1,134 @@
1
+ import { ZeroHexString } from '@hazae41/hex';
2
+ import { BigInts } from '../../libs/bigint/index.mjs';
3
+
4
+ class ZeroHexFixedInit {
5
+ value;
6
+ decimals;
7
+ constructor(value, decimals){
8
+ this.value = value;
9
+ this.decimals = decimals;
10
+ }
11
+ }
12
+ class BigIntFixedInit {
13
+ value;
14
+ decimals;
15
+ constructor(value, decimals){
16
+ this.value = value;
17
+ this.decimals = decimals;
18
+ }
19
+ }
20
+ class Fixed {
21
+ value;
22
+ decimals;
23
+ tens;
24
+ constructor(value, decimals){
25
+ this.value = value;
26
+ this.decimals = decimals;
27
+ this.tens = BigInts.tensOf(decimals);
28
+ }
29
+ static unit(decimals) {
30
+ return new Fixed(BigInts.tensOf(decimals), decimals);
31
+ }
32
+ static from(init) {
33
+ if (init instanceof Fixed) return init;
34
+ if (typeof init.value === "string") return Fixed.fromZeroHexString(init.value, init.decimals);
35
+ return new Fixed(init.value, init.decimals);
36
+ }
37
+ static fromZeroHexInit(init) {
38
+ return Fixed.fromZeroHexString(init.value, init.decimals);
39
+ }
40
+ static fromBigIntInit(init) {
41
+ return new Fixed(init.value, init.decimals);
42
+ }
43
+ static fromZeroHexString(value, decimals) {
44
+ return new Fixed(ZeroHexString.toBigInt(value), decimals);
45
+ }
46
+ static fromDecimalString(text, decimals) {
47
+ const [whole = "0", decimal = "0"] = text.split(".");
48
+ const value = BigInt(whole + decimal.padEnd(decimals, "0").slice(0, decimals));
49
+ return new Fixed(value, decimals);
50
+ }
51
+ static fromString(text, decimals) {
52
+ if (ZeroHexString.String.is(text)) return Fixed.fromZeroHexString(text, decimals);
53
+ return Fixed.fromDecimalString(text, decimals);
54
+ }
55
+ toZeroHexInit() {
56
+ return new ZeroHexFixedInit(this.toZeroHexString(), this.decimals);
57
+ }
58
+ toBigIntInit() {
59
+ return new BigIntFixedInit(this.value, this.decimals);
60
+ }
61
+ toZeroHexString() {
62
+ return ZeroHexString.fromBigInt(this.value);
63
+ }
64
+ toDecimalString() {
65
+ const raw = this.value.toString().padStart(this.decimals, "0");
66
+ const whole = raw.slice(0, raw.length - this.decimals).replaceAll("0", " ").trimStart().replaceAll(" ", "0");
67
+ const decimal = raw.slice(raw.length - this.decimals).replaceAll("0", " ").trimEnd().replaceAll(" ", "0");
68
+ if (!decimal) return whole || "0";
69
+ return `${whole || "0"}.${decimal}`;
70
+ }
71
+ toString() {
72
+ return this.toDecimalString();
73
+ }
74
+ toJSON() {
75
+ return this.toZeroHexInit();
76
+ }
77
+ as(decimals) {
78
+ return new Fixed(this.value, decimals);
79
+ }
80
+ move(decimals) {
81
+ if (this.decimals > decimals) return new Fixed(this.value / BigInts.tensOf(this.decimals - decimals), decimals);
82
+ if (this.decimals < decimals) return new Fixed(this.value * BigInts.tensOf(decimals - this.decimals), decimals);
83
+ return this;
84
+ }
85
+ add(other) {
86
+ const dx = this.decimals;
87
+ const dy = other.decimals;
88
+ const dr = Math.max(dx, dy);
89
+ const tr = BigInts.tensOf(dr);
90
+ const tx = this.tens;
91
+ const ty = other.tens;
92
+ const vx = this.value;
93
+ const vy = other.value;
94
+ return new Fixed(vx * (tr / tx) + vy * (tr / ty), dr);
95
+ }
96
+ sub(other) {
97
+ const dx = this.decimals;
98
+ const dy = other.decimals;
99
+ const dr = Math.max(dx, dy);
100
+ const tr = BigInts.tensOf(dr);
101
+ const tx = this.tens;
102
+ const ty = other.tens;
103
+ const vx = this.value;
104
+ const vy = other.value;
105
+ return new Fixed(vx * (tr / tx) - vy * (tr / ty), dr);
106
+ }
107
+ mul(other) {
108
+ const dx = this.decimals;
109
+ const dy = other.decimals;
110
+ const dr = dx + dy;
111
+ const vx = this.value;
112
+ const vy = other.value;
113
+ return new Fixed(vx * vy, dr);
114
+ }
115
+ div(other) {
116
+ const dx = this.decimals;
117
+ const ty = other.tens;
118
+ const vx = this.value;
119
+ const vy = other.value;
120
+ return new Fixed(vx * ty / vy, dx);
121
+ }
122
+ floor() {
123
+ return new Fixed(this.value - this.value % this.tens, this.decimals);
124
+ }
125
+ ceil() {
126
+ return new Fixed(this.value + (this.tens - this.value % this.tens), this.decimals);
127
+ }
128
+ round() {
129
+ return new Fixed(this.value + this.tens / 2n - (this.value + this.tens / 2n) % this.tens, this.decimals);
130
+ }
131
+ }
132
+
133
+ export { BigIntFixedInit, Fixed, ZeroHexFixedInit };
134
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/mods/fixed/index.ts"],"sourcesContent":["import { ZeroHexString } from \"@hazae41/hex\"\nimport { BigInts } from \"libs/bigint/index.js\"\n\nexport interface ZeroHexFixedInit<D extends number = number> {\n readonly value: ZeroHexString,\n readonly decimals: D\n}\n\nexport class ZeroHexFixedInit<D extends number = number> {\n\n constructor(\n readonly value: ZeroHexString,\n readonly decimals: D\n ) { }\n\n}\n\nexport interface BigIntFixedInit<D extends number = number> {\n readonly value: bigint,\n readonly decimals: D\n}\n\nexport class BigIntFixedInit<D extends number = number> {\n\n constructor(\n readonly value: bigint,\n readonly decimals: D\n ) { }\n\n}\n\nexport namespace Fixed {\n\n export type From<D extends number = number> =\n | BigIntFixedInit<D>\n | ZeroHexFixedInit<D>\n\n}\n\nexport class Fixed<D extends number = number> implements BigIntFixedInit {\n\n readonly tens: bigint\n\n constructor(\n readonly value: bigint,\n readonly decimals: D\n ) {\n this.tens = BigInts.tensOf(decimals)\n }\n\n static unit<D extends number = number>(decimals: D) {\n return new Fixed(BigInts.tensOf(decimals), decimals)\n }\n\n static from<D extends number = number>(init: Fixed.From<D>) {\n if (init instanceof Fixed)\n return init\n if (typeof init.value === \"string\")\n return Fixed.fromZeroHexString(init.value, init.decimals)\n return new Fixed(init.value, init.decimals)\n }\n\n static fromZeroHexInit<D extends number>(init: ZeroHexFixedInit<D>) {\n return Fixed.fromZeroHexString(init.value, init.decimals)\n }\n\n static fromBigIntInit<D extends number>(init: BigIntFixedInit<D>) {\n return new Fixed(init.value, init.decimals)\n }\n\n static fromZeroHexString<D extends number>(value: ZeroHexString, decimals: D) {\n return new Fixed(ZeroHexString.toBigInt(value), decimals)\n }\n\n static fromDecimalString<D extends number>(text: string, decimals: D) {\n const [whole = \"0\", decimal = \"0\"] = text.split(\".\")\n\n const value = BigInt(whole + decimal.padEnd(decimals, \"0\").slice(0, decimals))\n\n return new Fixed(value, decimals)\n }\n\n static fromString<D extends number>(text: string, decimals: D) {\n if (ZeroHexString.String.is(text))\n return Fixed.fromZeroHexString(text, decimals)\n return Fixed.fromDecimalString(text, decimals)\n }\n\n toZeroHexInit() {\n return new ZeroHexFixedInit(this.toZeroHexString(), this.decimals)\n }\n\n toBigIntInit() {\n return new BigIntFixedInit(this.value, this.decimals)\n }\n\n toZeroHexString() {\n return ZeroHexString.fromBigInt(this.value)\n }\n\n toDecimalString() {\n const raw = this.value.toString().padStart(this.decimals, \"0\")\n\n const whole = raw.slice(0, raw.length - this.decimals).replaceAll(\"0\", \" \").trimStart().replaceAll(\" \", \"0\")\n const decimal = raw.slice(raw.length - this.decimals).replaceAll(\"0\", \" \").trimEnd().replaceAll(\" \", \"0\")\n\n if (!decimal)\n return (whole || \"0\")\n\n return `${whole || \"0\"}.${decimal}`\n }\n\n toString() {\n return this.toDecimalString()\n }\n\n toJSON() {\n return this.toZeroHexInit()\n }\n\n as(decimals: number) {\n return new Fixed(this.value, decimals)\n }\n\n move(decimals: number) {\n if (this.decimals > decimals)\n return new Fixed(this.value / BigInts.tensOf(this.decimals - decimals), decimals)\n if (this.decimals < decimals)\n return new Fixed(this.value * BigInts.tensOf(decimals - this.decimals), decimals)\n return this\n }\n\n add(other: Fixed) {\n const dx = this.decimals\n const dy = other.decimals\n\n const dr = Math.max(dx, dy)\n const tr = BigInts.tensOf(dr)\n\n const tx = this.tens\n const ty = other.tens\n\n const vx = this.value\n const vy = other.value\n\n return new Fixed((vx * (tr / tx)) + (vy * (tr / ty)), dr)\n }\n\n sub(other: Fixed) {\n const dx = this.decimals\n const dy = other.decimals\n\n const dr = Math.max(dx, dy)\n const tr = BigInts.tensOf(dr)\n\n const tx = this.tens\n const ty = other.tens\n\n const vx = this.value\n const vy = other.value\n\n return new Fixed((vx * (tr / tx)) - (vy * (tr / ty)), dr)\n }\n\n mul(other: Fixed) {\n const dx = this.decimals\n const dy = other.decimals\n\n const dr = dx + dy\n\n const vx = this.value\n const vy = other.value\n\n return new Fixed(vx * vy, dr)\n }\n\n div(other: Fixed) {\n const dx = this.decimals\n const ty = other.tens\n\n const vx = this.value\n const vy = other.value\n\n return new Fixed((vx * ty) / vy, dx)\n }\n\n floor() {\n return new Fixed(this.value - (this.value % this.tens), this.decimals)\n }\n\n ceil() {\n return new Fixed(this.value + (this.tens - (this.value % this.tens)), this.decimals)\n }\n\n round() {\n return new Fixed(this.value + (this.tens / 2n) - ((this.value + (this.tens / 2n)) % this.tens), this.decimals)\n }\n\n}\n"],"names":["ZeroHexFixedInit","constructor","decimals","value","BigIntFixedInit","Fixed","tens","BigInts","tensOf","unit","from","init","fromZeroHexString","fromZeroHexInit","fromBigIntInit","ZeroHexString","toBigInt","fromDecimalString","text","whole","decimal","split","BigInt","padEnd","slice","fromString","String","is","toZeroHexInit","toZeroHexString","toBigIntInit","fromBigInt","toDecimalString","raw","toString","padStart","length","replaceAll","trimStart","trimEnd","toJSON","as","move","add","other","dx","dy","dr","Math","max","tr","tx","ty","vx","vy","sub","mul","div","floor","ceil","round"],"mappings":";;;AAQO,MAAMA,gBAAAA,CAAAA;;;AAEXC,IAAAA,WAAAA,CACE,KAA6B,EACpBC,QAAW,CACpB;aAFSC,KAAAA,GAAAA,KAAAA;aACAD,QAAAA,GAAAA,QAAAA;AACP;AAEN;AAOO,MAAME,eAAAA,CAAAA;;;AAEXH,IAAAA,WAAAA,CACE,KAAsB,EACbC,QAAW,CACpB;aAFSC,KAAAA,GAAAA,KAAAA;aACAD,QAAAA,GAAAA,QAAAA;AACP;AAEN;AAUO,MAAMG,KAAAA,CAAAA;;;IAEFC,IAAY;AAErBL,IAAAA,WAAAA,CACE,KAAsB,EACbC,QAAW,CACpB;aAFSC,KAAAA,GAAAA,KAAAA;aACAD,QAAAA,GAAAA,QAAAA;AAET,QAAA,IAAI,CAACI,IAAI,GAAGC,OAAAA,CAAQC,MAAM,CAACN,QAAAA,CAAAA;AAC7B;IAEA,OAAOO,IAAAA,CAAgCP,QAAW,EAAE;AAClD,QAAA,OAAO,IAAIG,KAAAA,CAAME,OAAQC,CAAAA,MAAM,CAACN,QAAWA,CAAAA,EAAAA,QAAAA,CAAAA;AAC7C;IAEA,OAAOQ,IAAAA,CAAgCC,IAAmB,EAAE;QAC1D,IAAIA,IAAAA,YAAgBN,OAClB,OAAOM,IAAAA;AACT,QAAA,IAAI,OAAOA,IAAAA,CAAKR,KAAK,KAAK,QACxB,EAAA,OAAOE,KAAMO,CAAAA,iBAAiB,CAACD,IAAAA,CAAKR,KAAK,EAAEQ,KAAKT,QAAQ,CAAA;AAC1D,QAAA,OAAO,IAAIG,KAAMM,CAAAA,IAAAA,CAAKR,KAAK,EAAEQ,KAAKT,QAAQ,CAAA;AAC5C;IAEA,OAAOW,eAAAA,CAAkCF,IAAyB,EAAE;AAClE,QAAA,OAAON,MAAMO,iBAAiB,CAACD,KAAKR,KAAK,EAAEQ,KAAKT,QAAQ,CAAA;AAC1D;IAEA,OAAOY,cAAAA,CAAiCH,IAAwB,EAAE;AAChE,QAAA,OAAO,IAAIN,KAAMM,CAAAA,IAAAA,CAAKR,KAAK,EAAEQ,KAAKT,QAAQ,CAAA;AAC5C;AAEA,IAAA,OAAOU,iBAAoCT,CAAAA,KAAoB,EAAED,QAAW,EAAE;AAC5E,QAAA,OAAO,IAAIG,KAAAA,CAAMU,aAAcC,CAAAA,QAAQ,CAACb,KAAQD,CAAAA,EAAAA,QAAAA,CAAAA;AAClD;AAEA,IAAA,OAAOe,iBAAoCC,CAAAA,IAAY,EAAEhB,QAAW,EAAE;QACpE,MAAM,CAACiB,KAAQ,GAAA,GAAG,EAAEC,OAAAA,GAAU,GAAG,CAAC,GAAGF,IAAKG,CAAAA,KAAK,CAAC,GAAA,CAAA;QAEhD,MAAMlB,KAAAA,GAAQmB,MAAOH,CAAAA,KAAAA,GAAQC,OAAQG,CAAAA,MAAM,CAACrB,QAAU,EAAA,GAAA,CAAA,CAAKsB,KAAK,CAAC,CAAGtB,EAAAA,QAAAA,CAAAA,CAAAA;QAEpE,OAAO,IAAIG,MAAMF,KAAOD,EAAAA,QAAAA,CAAAA;AAC1B;AAEA,IAAA,OAAOuB,UAA6BP,CAAAA,IAAY,EAAEhB,QAAW,EAAE;QAC7D,IAAIa,aAAAA,CAAcW,MAAM,CAACC,EAAE,CAACT,OAC1B,OAAOb,KAAAA,CAAMO,iBAAiB,CAACM,IAAMhB,EAAAA,QAAAA,CAAAA;QACvC,OAAOG,KAAAA,CAAMY,iBAAiB,CAACC,IAAMhB,EAAAA,QAAAA,CAAAA;AACvC;IAEA0B,aAAgB,GAAA;QACd,OAAO,IAAI5B,iBAAiB,IAAI,CAAC6B,eAAe,EAAI,EAAA,IAAI,CAAC3B,QAAQ,CAAA;AACnE;IAEA4B,YAAe,GAAA;QACb,OAAO,IAAI1B,gBAAgB,IAAI,CAACD,KAAK,EAAE,IAAI,CAACD,QAAQ,CAAA;AACtD;IAEA2B,eAAkB,GAAA;AAChB,QAAA,OAAOd,aAAcgB,CAAAA,UAAU,CAAC,IAAI,CAAC5B,KAAK,CAAA;AAC5C;IAEA6B,eAAkB,GAAA;AAChB,QAAA,MAAMC,GAAM,GAAA,IAAI,CAAC9B,KAAK,CAAC+B,QAAQ,EAAGC,CAAAA,QAAQ,CAAC,IAAI,CAACjC,QAAQ,EAAE,GAAA,CAAA;QAE1D,MAAMiB,KAAAA,GAAQc,IAAIT,KAAK,CAAC,GAAGS,GAAIG,CAAAA,MAAM,GAAG,IAAI,CAAClC,QAAQ,CAAEmC,CAAAA,UAAU,CAAC,GAAK,EAAA,GAAA,CAAA,CAAKC,SAAS,EAAGD,CAAAA,UAAU,CAAC,GAAK,EAAA,GAAA,CAAA;AACxG,QAAA,MAAMjB,UAAUa,GAAIT,CAAAA,KAAK,CAACS,GAAIG,CAAAA,MAAM,GAAG,IAAI,CAAClC,QAAQ,CAAEmC,CAAAA,UAAU,CAAC,GAAK,EAAA,GAAA,CAAA,CAAKE,OAAO,EAAGF,CAAAA,UAAU,CAAC,GAAK,EAAA,GAAA,CAAA;QAErG,IAAI,CAACjB,OACH,EAAA,OAAQD,KAAS,IAAA,GAAA;AAEnB,QAAA,OAAO,CAAC,EAAEA,KAAAA,IAAS,IAAI,CAAC,EAAEC,QAAQ,CAAC;AACrC;IAEAc,QAAW,GAAA;QACT,OAAO,IAAI,CAACF,eAAe,EAAA;AAC7B;IAEAQ,MAAS,GAAA;QACP,OAAO,IAAI,CAACZ,aAAa,EAAA;AAC3B;AAEAa,IAAAA,EAAAA,CAAGvC,QAAgB,EAAE;AACnB,QAAA,OAAO,IAAIG,KAAAA,CAAM,IAAI,CAACF,KAAK,EAAED,QAAAA,CAAAA;AAC/B;AAEAwC,IAAAA,IAAAA,CAAKxC,QAAgB,EAAE;AACrB,QAAA,IAAI,IAAI,CAACA,QAAQ,GAAGA,QAClB,EAAA,OAAO,IAAIG,KAAM,CAAA,IAAI,CAACF,KAAK,GAAGI,QAAQC,MAAM,CAAC,IAAI,CAACN,QAAQ,GAAGA,QAAWA,CAAAA,EAAAA,QAAAA,CAAAA;AAC1E,QAAA,IAAI,IAAI,CAACA,QAAQ,GAAGA,QAClB,EAAA,OAAO,IAAIG,KAAM,CAAA,IAAI,CAACF,KAAK,GAAGI,QAAQC,MAAM,CAACN,WAAW,IAAI,CAACA,QAAQ,CAAGA,EAAAA,QAAAA,CAAAA;AAC1E,QAAA,OAAO,IAAI;AACb;AAEAyC,IAAAA,GAAAA,CAAIC,KAAY,EAAE;QAChB,MAAMC,EAAAA,GAAK,IAAI,CAAC3C,QAAQ;QACxB,MAAM4C,EAAAA,GAAKF,MAAM1C,QAAQ;AAEzB,QAAA,MAAM6C,EAAKC,GAAAA,IAAAA,CAAKC,GAAG,CAACJ,EAAIC,EAAAA,EAAAA,CAAAA;QACxB,MAAMI,EAAAA,GAAK3C,OAAQC,CAAAA,MAAM,CAACuC,EAAAA,CAAAA;QAE1B,MAAMI,EAAAA,GAAK,IAAI,CAAC7C,IAAI;QACpB,MAAM8C,EAAAA,GAAKR,MAAMtC,IAAI;QAErB,MAAM+C,EAAAA,GAAK,IAAI,CAAClD,KAAK;QACrB,MAAMmD,EAAAA,GAAKV,MAAMzC,KAAK;AAEtB,QAAA,OAAO,IAAIE,KAAAA,CAAM,EAACgD,IAAMH,EAAAA,GAAKC,EAAC,CAAA,GAAOG,EAAMJ,IAAAA,EAAKE,GAAAA,EAAC,CAAKL,EAAAA,EAAAA,CAAAA;AACxD;AAEAQ,IAAAA,GAAAA,CAAIX,KAAY,EAAE;QAChB,MAAMC,EAAAA,GAAK,IAAI,CAAC3C,QAAQ;QACxB,MAAM4C,EAAAA,GAAKF,MAAM1C,QAAQ;AAEzB,QAAA,MAAM6C,EAAKC,GAAAA,IAAAA,CAAKC,GAAG,CAACJ,EAAIC,EAAAA,EAAAA,CAAAA;QACxB,MAAMI,EAAAA,GAAK3C,OAAQC,CAAAA,MAAM,CAACuC,EAAAA,CAAAA;QAE1B,MAAMI,EAAAA,GAAK,IAAI,CAAC7C,IAAI;QACpB,MAAM8C,EAAAA,GAAKR,MAAMtC,IAAI;QAErB,MAAM+C,EAAAA,GAAK,IAAI,CAAClD,KAAK;QACrB,MAAMmD,EAAAA,GAAKV,MAAMzC,KAAK;AAEtB,QAAA,OAAO,IAAIE,KAAAA,CAAM,EAACgD,IAAMH,EAAAA,GAAKC,EAAC,CAAA,GAAOG,EAAMJ,IAAAA,EAAKE,GAAAA,EAAC,CAAKL,EAAAA,EAAAA,CAAAA;AACxD;AAEAS,IAAAA,GAAAA,CAAIZ,KAAY,EAAE;QAChB,MAAMC,EAAAA,GAAK,IAAI,CAAC3C,QAAQ;QACxB,MAAM4C,EAAAA,GAAKF,MAAM1C,QAAQ;AAEzB,QAAA,MAAM6C,KAAKF,EAAKC,GAAAA,EAAAA;QAEhB,MAAMO,EAAAA,GAAK,IAAI,CAAClD,KAAK;QACrB,MAAMmD,EAAAA,GAAKV,MAAMzC,KAAK;QAEtB,OAAO,IAAIE,KAAMgD,CAAAA,EAAAA,GAAKC,EAAIP,EAAAA,EAAAA,CAAAA;AAC5B;AAEAU,IAAAA,GAAAA,CAAIb,KAAY,EAAE;QAChB,MAAMC,EAAAA,GAAK,IAAI,CAAC3C,QAAQ;QACxB,MAAMkD,EAAAA,GAAKR,MAAMtC,IAAI;QAErB,MAAM+C,EAAAA,GAAK,IAAI,CAAClD,KAAK;QACrB,MAAMmD,EAAAA,GAAKV,MAAMzC,KAAK;AAEtB,QAAA,OAAO,IAAIE,KAAAA,CAAM,EAACgD,GAAKD,KAAME,EAAIT,EAAAA,EAAAA,CAAAA;AACnC;IAEAa,KAAQ,GAAA;AACN,QAAA,OAAO,IAAIrD,KAAM,CAAA,IAAI,CAACF,KAAK,GAAI,IAAI,CAACA,KAAK,GAAG,IAAI,CAACG,IAAI,EAAG,IAAI,CAACJ,QAAQ,CAAA;AACvE;IAEAyD,IAAO,GAAA;QACL,OAAO,IAAItD,MAAM,IAAI,CAACF,KAAK,IAAI,IAAI,CAACG,IAAI,GAAI,IAAI,CAACH,KAAK,GAAG,IAAI,CAACG,IAAI,CAAA,EAAI,IAAI,CAACJ,QAAQ,CAAA;AACrF;IAEA0D,KAAQ,GAAA;AACN,QAAA,OAAO,IAAIvD,KAAAA,CAAM,IAAI,CAACF,KAAK,GAAI,IAAI,CAACG,IAAI,GAAG,EAAE,GAAK,CAAC,IAAI,CAACH,KAAK,GAAI,IAAI,CAACG,IAAI,GAAG,EAAE,IAAK,IAAI,CAACA,IAAI,EAAG,IAAI,CAACJ,QAAQ,CAAA;AAC/G;AAEF;;;;"}
@@ -0,0 +1 @@
1
+ export { BigIntFixedInit, Fixed, ZeroHexFixedInit } from './mods/fixed/index.js';
@@ -0,0 +1,55 @@
1
+ import { ZeroHexString } from '@hazae41/hex';
2
+
3
+ interface ZeroHexFixedInit<D extends number = number> {
4
+ readonly value: ZeroHexString;
5
+ readonly decimals: D;
6
+ }
7
+ declare class ZeroHexFixedInit<D extends number = number> {
8
+ readonly value: ZeroHexString;
9
+ readonly decimals: D;
10
+ constructor(value: ZeroHexString, decimals: D);
11
+ }
12
+ interface BigIntFixedInit<D extends number = number> {
13
+ readonly value: bigint;
14
+ readonly decimals: D;
15
+ }
16
+ declare class BigIntFixedInit<D extends number = number> {
17
+ readonly value: bigint;
18
+ readonly decimals: D;
19
+ constructor(value: bigint, decimals: D);
20
+ }
21
+ declare namespace Fixed {
22
+ type From<D extends number = number> = BigIntFixedInit<D> | ZeroHexFixedInit<D>;
23
+ }
24
+ declare class Fixed<D extends number = number> implements BigIntFixedInit {
25
+ readonly value: bigint;
26
+ readonly decimals: D;
27
+ readonly tens: bigint;
28
+ constructor(value: bigint, decimals: D);
29
+ static unit<D extends number = number>(decimals: D): Fixed<D>;
30
+ static from<D extends number = number>(init: Fixed.From<D>): Fixed<any>;
31
+ static fromZeroHexInit<D extends number>(init: ZeroHexFixedInit<D>): Fixed<D>;
32
+ static fromBigIntInit<D extends number>(init: BigIntFixedInit<D>): Fixed<D>;
33
+ static fromZeroHexString<D extends number>(value: ZeroHexString, decimals: D): Fixed<D>;
34
+ static fromDecimalString<D extends number>(text: string, decimals: D): Fixed<D>;
35
+ static fromString<D extends number>(text: string, decimals: D): Fixed<D>;
36
+ toZeroHexInit(): ZeroHexFixedInit<D>;
37
+ toBigIntInit(): BigIntFixedInit<D>;
38
+ toZeroHexString(): `0x${string}` & {
39
+ readonly [Symbol.isZeroHex]: true;
40
+ };
41
+ toDecimalString(): string;
42
+ toString(): string;
43
+ toJSON(): ZeroHexFixedInit<D>;
44
+ as(decimals: number): Fixed<number>;
45
+ move(decimals: number): Fixed<number>;
46
+ add(other: Fixed): Fixed<number>;
47
+ sub(other: Fixed): Fixed<number>;
48
+ mul(other: Fixed): Fixed<number>;
49
+ div(other: Fixed): Fixed<D>;
50
+ floor(): Fixed<D>;
51
+ ceil(): Fixed<D>;
52
+ round(): Fixed<D>;
53
+ }
54
+
55
+ export { BigIntFixedInit, Fixed, ZeroHexFixedInit };
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "type": "module",
3
+ "name": "@hazae41/fixed",
4
+ "version": "1.0.0",
5
+ "description": "Fixed-point numbers in idiomatic TypeScript",
6
+ "homepage": "https://github.com/hazae41/fixed",
7
+ "repository": "github:hazae41/fixed",
8
+ "author": "hazae41",
9
+ "license": "MIT",
10
+ "main": "./dist/cjs/index.cjs",
11
+ "module": "./dist/esm/index.mjs",
12
+ "types": "./dist/types/index.d.ts",
13
+ "sideEffects": false,
14
+ "files": [
15
+ "./dist/esm",
16
+ "./dist/cjs",
17
+ "./dist/types"
18
+ ],
19
+ "scripts": {
20
+ "build": "rimraf dist && rollup -c",
21
+ "test": "node ./dist/test/index.test.mjs",
22
+ "prepare": "npm run build"
23
+ },
24
+ "devDependencies": {
25
+ "@hazae41/phobos": "^1.0.10",
26
+ "@hazae41/rimraf": "^1.0.1",
27
+ "@types/node": "^22.14.1",
28
+ "@types/react": "^19.1.2",
29
+ "rollup": "^4.40.0",
30
+ "rollup-plugin-dts": "^6.2.1",
31
+ "rollup-plugin-node-externals": "^8.0.0",
32
+ "rollup-plugin-swc3": "^0.12.1"
33
+ },
34
+ "exports": {
35
+ ".": {
36
+ "types": "./dist/types/index.d.ts",
37
+ "import": "./dist/esm/index.mjs",
38
+ "require": "./dist/cjs/index.cjs"
39
+ }
40
+ },
41
+ "keywords": [
42
+ "typescript",
43
+ "esmodules",
44
+ "tested",
45
+ "unit-tested"
46
+ ],
47
+ "dependencies": {
48
+ "@hazae41/hex": "^1.0.1"
49
+ }
50
+ }