uconvert 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 +21 -0
- package/dist/index.d.mts +41 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +152 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +119 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +42 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Andrew
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
declare enum UnitSystem {
|
|
2
|
+
METRIC = "Si",
|
|
3
|
+
IMPERIAL = "Imperial"
|
|
4
|
+
}
|
|
5
|
+
declare enum Dimension {
|
|
6
|
+
LENGTH = "length",
|
|
7
|
+
WEIGHT = "weight",
|
|
8
|
+
SPEED = "speed"
|
|
9
|
+
}
|
|
10
|
+
declare enum MeasurementType {
|
|
11
|
+
LENGTH = "length",
|
|
12
|
+
WEIGHT = "weight",
|
|
13
|
+
SPEED = "speed",
|
|
14
|
+
HEIGHT = "height",
|
|
15
|
+
LENGTH_FEET = "length_feet"
|
|
16
|
+
}
|
|
17
|
+
declare enum MetricUnits {
|
|
18
|
+
CM = "cm",
|
|
19
|
+
M = "m",
|
|
20
|
+
KG = "kg",
|
|
21
|
+
KM_H = "km/h"
|
|
22
|
+
}
|
|
23
|
+
declare enum ImperialUnits {
|
|
24
|
+
IN = "in",
|
|
25
|
+
FT = "ft",
|
|
26
|
+
LB = "lb",
|
|
27
|
+
MPH = "mph"
|
|
28
|
+
}
|
|
29
|
+
type Units = MetricUnits | ImperialUnits;
|
|
30
|
+
|
|
31
|
+
interface ConvertOptions {
|
|
32
|
+
fromUnits: Units;
|
|
33
|
+
toUnits: Units;
|
|
34
|
+
roundTo?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
declare const convert: (value: number, { fromUnits, toUnits, roundTo }: ConvertOptions) => number;
|
|
38
|
+
|
|
39
|
+
declare const round: (value: number, decimalPlaces?: number) => number;
|
|
40
|
+
|
|
41
|
+
export { Dimension, ImperialUnits, MeasurementType, MetricUnits, UnitSystem, type Units, convert, round };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
declare enum UnitSystem {
|
|
2
|
+
METRIC = "Si",
|
|
3
|
+
IMPERIAL = "Imperial"
|
|
4
|
+
}
|
|
5
|
+
declare enum Dimension {
|
|
6
|
+
LENGTH = "length",
|
|
7
|
+
WEIGHT = "weight",
|
|
8
|
+
SPEED = "speed"
|
|
9
|
+
}
|
|
10
|
+
declare enum MeasurementType {
|
|
11
|
+
LENGTH = "length",
|
|
12
|
+
WEIGHT = "weight",
|
|
13
|
+
SPEED = "speed",
|
|
14
|
+
HEIGHT = "height",
|
|
15
|
+
LENGTH_FEET = "length_feet"
|
|
16
|
+
}
|
|
17
|
+
declare enum MetricUnits {
|
|
18
|
+
CM = "cm",
|
|
19
|
+
M = "m",
|
|
20
|
+
KG = "kg",
|
|
21
|
+
KM_H = "km/h"
|
|
22
|
+
}
|
|
23
|
+
declare enum ImperialUnits {
|
|
24
|
+
IN = "in",
|
|
25
|
+
FT = "ft",
|
|
26
|
+
LB = "lb",
|
|
27
|
+
MPH = "mph"
|
|
28
|
+
}
|
|
29
|
+
type Units = MetricUnits | ImperialUnits;
|
|
30
|
+
|
|
31
|
+
interface ConvertOptions {
|
|
32
|
+
fromUnits: Units;
|
|
33
|
+
toUnits: Units;
|
|
34
|
+
roundTo?: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
declare const convert: (value: number, { fromUnits, toUnits, roundTo }: ConvertOptions) => number;
|
|
38
|
+
|
|
39
|
+
declare const round: (value: number, decimalPlaces?: number) => number;
|
|
40
|
+
|
|
41
|
+
export { Dimension, ImperialUnits, MeasurementType, MetricUnits, UnitSystem, type Units, convert, round };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
Dimension: () => Dimension,
|
|
24
|
+
ImperialUnits: () => ImperialUnits,
|
|
25
|
+
MeasurementType: () => MeasurementType,
|
|
26
|
+
MetricUnits: () => MetricUnits,
|
|
27
|
+
UnitSystem: () => UnitSystem,
|
|
28
|
+
convert: () => convert,
|
|
29
|
+
round: () => round
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(index_exports);
|
|
32
|
+
|
|
33
|
+
// src/constants/common/common.constants.ts
|
|
34
|
+
var UnitSystem = /* @__PURE__ */ ((UnitSystem2) => {
|
|
35
|
+
UnitSystem2["METRIC"] = "Si";
|
|
36
|
+
UnitSystem2["IMPERIAL"] = "Imperial";
|
|
37
|
+
return UnitSystem2;
|
|
38
|
+
})(UnitSystem || {});
|
|
39
|
+
var Dimension = /* @__PURE__ */ ((Dimension2) => {
|
|
40
|
+
Dimension2["LENGTH"] = "length";
|
|
41
|
+
Dimension2["WEIGHT"] = "weight";
|
|
42
|
+
Dimension2["SPEED"] = "speed";
|
|
43
|
+
return Dimension2;
|
|
44
|
+
})(Dimension || {});
|
|
45
|
+
var MeasurementType = /* @__PURE__ */ ((MeasurementType2) => {
|
|
46
|
+
MeasurementType2["LENGTH"] = "length";
|
|
47
|
+
MeasurementType2["WEIGHT"] = "weight";
|
|
48
|
+
MeasurementType2["SPEED"] = "speed";
|
|
49
|
+
MeasurementType2["HEIGHT"] = "height";
|
|
50
|
+
MeasurementType2["LENGTH_FEET"] = "length_feet";
|
|
51
|
+
return MeasurementType2;
|
|
52
|
+
})(MeasurementType || {});
|
|
53
|
+
var MetricUnits = /* @__PURE__ */ ((MetricUnits2) => {
|
|
54
|
+
MetricUnits2["CM"] = "cm";
|
|
55
|
+
MetricUnits2["M"] = "m";
|
|
56
|
+
MetricUnits2["KG"] = "kg";
|
|
57
|
+
MetricUnits2["KM_H"] = "km/h";
|
|
58
|
+
return MetricUnits2;
|
|
59
|
+
})(MetricUnits || {});
|
|
60
|
+
var ImperialUnits = /* @__PURE__ */ ((ImperialUnits2) => {
|
|
61
|
+
ImperialUnits2["IN"] = "in";
|
|
62
|
+
ImperialUnits2["FT"] = "ft";
|
|
63
|
+
ImperialUnits2["LB"] = "lb";
|
|
64
|
+
ImperialUnits2["MPH"] = "mph";
|
|
65
|
+
return ImperialUnits2;
|
|
66
|
+
})(ImperialUnits || {});
|
|
67
|
+
|
|
68
|
+
// src/utils/math/math.ts
|
|
69
|
+
var round = (value, decimalPlaces) => {
|
|
70
|
+
if (decimalPlaces === void 0) return value;
|
|
71
|
+
return parseFloat(value.toFixed(decimalPlaces));
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// src/constants/conversion/conversion.constants.ts
|
|
75
|
+
var UNIT_TO_CANONICAL = {
|
|
76
|
+
["cm" /* CM */]: 1,
|
|
77
|
+
["m" /* M */]: 100,
|
|
78
|
+
["in" /* IN */]: 2.54,
|
|
79
|
+
["ft" /* FT */]: 30.48,
|
|
80
|
+
["kg" /* KG */]: 1,
|
|
81
|
+
["lb" /* LB */]: 0.45359237,
|
|
82
|
+
["km/h" /* KM_H */]: 1,
|
|
83
|
+
["mph" /* MPH */]: 1.609344
|
|
84
|
+
};
|
|
85
|
+
var UNIT_DIMENSION = {
|
|
86
|
+
["cm" /* CM */]: "length" /* LENGTH */,
|
|
87
|
+
["m" /* M */]: "length" /* LENGTH */,
|
|
88
|
+
["in" /* IN */]: "length" /* LENGTH */,
|
|
89
|
+
["ft" /* FT */]: "length" /* LENGTH */,
|
|
90
|
+
["kg" /* KG */]: "weight" /* WEIGHT */,
|
|
91
|
+
["lb" /* LB */]: "weight" /* WEIGHT */,
|
|
92
|
+
["km/h" /* KM_H */]: "speed" /* SPEED */,
|
|
93
|
+
["mph" /* MPH */]: "speed" /* SPEED */
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// src/constants/strings/strings.ts
|
|
97
|
+
var strings = {
|
|
98
|
+
convertDimensionMismatch: "Cannot convert between different dimensions: {0} ({1}) and {2} ({3})"
|
|
99
|
+
};
|
|
100
|
+
var strings_default = strings;
|
|
101
|
+
|
|
102
|
+
// src/utils/strings/strings.utils.ts
|
|
103
|
+
var formatMessage = (message, ...args) => message.replace(
|
|
104
|
+
/{(\d+)}/g,
|
|
105
|
+
(match, number) => args[number] !== void 0 ? args[number] : match
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
// src/utils/convert/convert.utils.ts
|
|
109
|
+
var throwConversionError = ({ fromUnits, toUnits }) => {
|
|
110
|
+
const fromDim = UNIT_DIMENSION[fromUnits];
|
|
111
|
+
const toDim = UNIT_DIMENSION[toUnits];
|
|
112
|
+
throw new Error(
|
|
113
|
+
formatMessage(
|
|
114
|
+
strings_default.convertDimensionMismatch,
|
|
115
|
+
fromUnits,
|
|
116
|
+
fromDim,
|
|
117
|
+
toUnits,
|
|
118
|
+
toDim
|
|
119
|
+
)
|
|
120
|
+
);
|
|
121
|
+
};
|
|
122
|
+
var getFactor = (fromUnits, toUnits) => {
|
|
123
|
+
if (fromUnits === toUnits) return 1;
|
|
124
|
+
const fromDim = UNIT_DIMENSION[fromUnits];
|
|
125
|
+
const toDim = UNIT_DIMENSION[toUnits];
|
|
126
|
+
if (fromDim !== toDim) throwConversionError({ fromUnits, toUnits });
|
|
127
|
+
const toCanonicalFrom = UNIT_TO_CANONICAL[fromUnits];
|
|
128
|
+
const toCanonicalTo = UNIT_TO_CANONICAL[toUnits];
|
|
129
|
+
return toCanonicalFrom / toCanonicalTo;
|
|
130
|
+
};
|
|
131
|
+
var convertUtils = {
|
|
132
|
+
getFactor
|
|
133
|
+
};
|
|
134
|
+
var convert_utils_default = convertUtils;
|
|
135
|
+
|
|
136
|
+
// src/utils/convert/convert.ts
|
|
137
|
+
var { getFactor: getFactor2 } = convert_utils_default;
|
|
138
|
+
var convert = (value, { fromUnits, toUnits, roundTo }) => {
|
|
139
|
+
const factor = getFactor2(fromUnits, toUnits);
|
|
140
|
+
return round(value * factor, roundTo);
|
|
141
|
+
};
|
|
142
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
143
|
+
0 && (module.exports = {
|
|
144
|
+
Dimension,
|
|
145
|
+
ImperialUnits,
|
|
146
|
+
MeasurementType,
|
|
147
|
+
MetricUnits,
|
|
148
|
+
UnitSystem,
|
|
149
|
+
convert,
|
|
150
|
+
round
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/constants/common/common.constants.ts","../src/utils/math/math.ts","../src/constants/conversion/conversion.constants.ts","../src/constants/strings/strings.ts","../src/utils/strings/strings.utils.ts","../src/utils/convert/convert.utils.ts","../src/utils/convert/convert.ts"],"sourcesContent":["export * from \"./constants/common/common.constants\";\nexport * from \"./utils/convert/convert\";\nexport * from \"./utils/math/math\";\n","export enum UnitSystem {\n METRIC = \"Si\",\n IMPERIAL = \"Imperial\",\n}\n\nexport enum Dimension {\n LENGTH = \"length\",\n WEIGHT = \"weight\",\n SPEED = \"speed\",\n}\n\nexport enum MeasurementType {\n LENGTH = \"length\",\n WEIGHT = \"weight\",\n SPEED = \"speed\",\n HEIGHT = \"height\",\n LENGTH_FEET = \"length_feet\",\n}\n\nexport enum MetricUnits {\n CM = \"cm\",\n M = \"m\",\n KG = \"kg\",\n KM_H = \"km/h\",\n}\n\nexport enum ImperialUnits {\n IN = \"in\",\n FT = \"ft\",\n LB = \"lb\",\n MPH = \"mph\",\n}\n\nexport type Units = MetricUnits | ImperialUnits;\n","export const round = (value: number, decimalPlaces?: number) => {\n if (decimalPlaces === undefined) return value;\n\n return parseFloat(value.toFixed(decimalPlaces));\n};\n","import {\n Dimension,\n ImperialUnits,\n MetricUnits,\n Units,\n} from \"../common/common.constants\";\n\n/** Factor to multiply value by to get value in canonical unit for that dimension. */\nexport const UNIT_TO_CANONICAL: Record<Units, number> = {\n [MetricUnits.CM]: 1,\n [MetricUnits.M]: 100,\n [ImperialUnits.IN]: 2.54,\n [ImperialUnits.FT]: 30.48,\n [MetricUnits.KG]: 1,\n [ImperialUnits.LB]: 0.45359237,\n [MetricUnits.KM_H]: 1,\n [ImperialUnits.MPH]: 1.609344,\n};\n\nexport const UNIT_DIMENSION: Record<Units, Dimension> = {\n [MetricUnits.CM]: Dimension.LENGTH,\n [MetricUnits.M]: Dimension.LENGTH,\n [ImperialUnits.IN]: Dimension.LENGTH,\n [ImperialUnits.FT]: Dimension.LENGTH,\n [MetricUnits.KG]: Dimension.WEIGHT,\n [ImperialUnits.LB]: Dimension.WEIGHT,\n [MetricUnits.KM_H]: Dimension.SPEED,\n [ImperialUnits.MPH]: Dimension.SPEED,\n};\n","const strings = {\n convertDimensionMismatch:\n \"Cannot convert between different dimensions: {0} ({1}) and {2} ({3})\",\n};\n\nexport default strings;\n","export const formatMessage = (message: string, ...args: any[]) =>\n message.replace(/{(\\d+)}/g, (match, number) =>\n args[number] !== undefined ? args[number] : match,\n );\n","import { Units } from \"../../constants/common/common.constants\";\nimport {\n UNIT_DIMENSION,\n UNIT_TO_CANONICAL,\n} from \"../../constants/conversion/conversion.constants\";\nimport strings from \"../../constants/strings/strings\";\nimport { round } from \"../math/math\";\nimport { formatMessage } from \"../strings/strings.utils\";\nimport { ConvertOptions } from \"./convert.types\";\n\nconst throwConversionError = ({ fromUnits, toUnits }: ConvertOptions) => {\n const fromDim = UNIT_DIMENSION[fromUnits];\n const toDim = UNIT_DIMENSION[toUnits];\n\n throw new Error(\n formatMessage(\n strings.convertDimensionMismatch,\n fromUnits,\n fromDim,\n toUnits,\n toDim,\n ),\n );\n};\n\nconst getFactor = (fromUnits: Units, toUnits: Units) => {\n if (fromUnits === toUnits) return 1;\n\n const fromDim = UNIT_DIMENSION[fromUnits];\n const toDim = UNIT_DIMENSION[toUnits];\n\n if (fromDim !== toDim) throwConversionError({ fromUnits, toUnits });\n\n const toCanonicalFrom = UNIT_TO_CANONICAL[fromUnits];\n const toCanonicalTo = UNIT_TO_CANONICAL[toUnits];\n return toCanonicalFrom / toCanonicalTo;\n};\n\nconst convertUtils = {\n getFactor,\n};\n\nexport default convertUtils;\n","import { round } from \"../math/math\";\nimport { ConvertOptions } from \"./convert.types\";\nimport utils from \"./convert.utils\";\n\nconst { getFactor } = utils;\n\nexport const convert = (\n value: number,\n { fromUnits, toUnits, roundTo }: ConvertOptions,\n) => {\n const factor = getFactor(fromUnits, toUnits);\n\n return round(value * factor, roundTo);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,cAAW;AAFD,SAAAA;AAAA,GAAA;AAKL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,WAAQ;AAHE,SAAAA;AAAA,GAAA;AAML,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,iBAAc;AALJ,SAAAA;AAAA,GAAA;AAQL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,QAAK;AACL,EAAAA,aAAA,OAAI;AACJ,EAAAA,aAAA,QAAK;AACL,EAAAA,aAAA,UAAO;AAJG,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,QAAK;AACL,EAAAA,eAAA,QAAK;AACL,EAAAA,eAAA,QAAK;AACL,EAAAA,eAAA,SAAM;AAJI,SAAAA;AAAA,GAAA;;;AC1BL,IAAM,QAAQ,CAAC,OAAe,kBAA2B;AAC9D,MAAI,kBAAkB,OAAW,QAAO;AAExC,SAAO,WAAW,MAAM,QAAQ,aAAa,CAAC;AAChD;;;ACIO,IAAM,oBAA2C;AAAA,EACtD,cAAe,GAAG;AAAA,EAClB,YAAc,GAAG;AAAA,EACjB,cAAiB,GAAG;AAAA,EACpB,cAAiB,GAAG;AAAA,EACpB,cAAe,GAAG;AAAA,EAClB,cAAiB,GAAG;AAAA,EACpB,kBAAiB,GAAG;AAAA,EACpB,gBAAkB,GAAG;AACvB;AAEO,IAAM,iBAA2C;AAAA,EACtD,cAAe;AAAA,EACf,YAAc;AAAA,EACd,cAAiB;AAAA,EACjB,cAAiB;AAAA,EACjB,cAAe;AAAA,EACf,cAAiB;AAAA,EACjB,kBAAiB;AAAA,EACjB,gBAAkB;AACpB;;;AC5BA,IAAM,UAAU;AAAA,EACd,0BACE;AACJ;AAEA,IAAO,kBAAQ;;;ACLR,IAAM,gBAAgB,CAAC,YAAoB,SAChD,QAAQ;AAAA,EAAQ;AAAA,EAAY,CAAC,OAAO,WAClC,KAAK,MAAM,MAAM,SAAY,KAAK,MAAM,IAAI;AAC9C;;;ACOF,IAAM,uBAAuB,CAAC,EAAE,WAAW,QAAQ,MAAsB;AACvE,QAAM,UAAU,eAAe,SAAS;AACxC,QAAM,QAAQ,eAAe,OAAO;AAEpC,QAAM,IAAI;AAAA,IACR;AAAA,MACE,gBAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,YAAY,CAAC,WAAkB,YAAmB;AACtD,MAAI,cAAc,QAAS,QAAO;AAElC,QAAM,UAAU,eAAe,SAAS;AACxC,QAAM,QAAQ,eAAe,OAAO;AAEpC,MAAI,YAAY,MAAO,sBAAqB,EAAE,WAAW,QAAQ,CAAC;AAElE,QAAM,kBAAkB,kBAAkB,SAAS;AACnD,QAAM,gBAAgB,kBAAkB,OAAO;AAC/C,SAAO,kBAAkB;AAC3B;AAEA,IAAM,eAAe;AAAA,EACnB;AACF;AAEA,IAAO,wBAAQ;;;ACtCf,IAAM,EAAE,WAAAC,WAAU,IAAI;AAEf,IAAM,UAAU,CACrB,OACA,EAAE,WAAW,SAAS,QAAQ,MAC3B;AACH,QAAM,SAASA,WAAU,WAAW,OAAO;AAE3C,SAAO,MAAM,QAAQ,QAAQ,OAAO;AACtC;","names":["UnitSystem","Dimension","MeasurementType","MetricUnits","ImperialUnits","getFactor"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// src/constants/common/common.constants.ts
|
|
2
|
+
var UnitSystem = /* @__PURE__ */ ((UnitSystem2) => {
|
|
3
|
+
UnitSystem2["METRIC"] = "Si";
|
|
4
|
+
UnitSystem2["IMPERIAL"] = "Imperial";
|
|
5
|
+
return UnitSystem2;
|
|
6
|
+
})(UnitSystem || {});
|
|
7
|
+
var Dimension = /* @__PURE__ */ ((Dimension2) => {
|
|
8
|
+
Dimension2["LENGTH"] = "length";
|
|
9
|
+
Dimension2["WEIGHT"] = "weight";
|
|
10
|
+
Dimension2["SPEED"] = "speed";
|
|
11
|
+
return Dimension2;
|
|
12
|
+
})(Dimension || {});
|
|
13
|
+
var MeasurementType = /* @__PURE__ */ ((MeasurementType2) => {
|
|
14
|
+
MeasurementType2["LENGTH"] = "length";
|
|
15
|
+
MeasurementType2["WEIGHT"] = "weight";
|
|
16
|
+
MeasurementType2["SPEED"] = "speed";
|
|
17
|
+
MeasurementType2["HEIGHT"] = "height";
|
|
18
|
+
MeasurementType2["LENGTH_FEET"] = "length_feet";
|
|
19
|
+
return MeasurementType2;
|
|
20
|
+
})(MeasurementType || {});
|
|
21
|
+
var MetricUnits = /* @__PURE__ */ ((MetricUnits2) => {
|
|
22
|
+
MetricUnits2["CM"] = "cm";
|
|
23
|
+
MetricUnits2["M"] = "m";
|
|
24
|
+
MetricUnits2["KG"] = "kg";
|
|
25
|
+
MetricUnits2["KM_H"] = "km/h";
|
|
26
|
+
return MetricUnits2;
|
|
27
|
+
})(MetricUnits || {});
|
|
28
|
+
var ImperialUnits = /* @__PURE__ */ ((ImperialUnits2) => {
|
|
29
|
+
ImperialUnits2["IN"] = "in";
|
|
30
|
+
ImperialUnits2["FT"] = "ft";
|
|
31
|
+
ImperialUnits2["LB"] = "lb";
|
|
32
|
+
ImperialUnits2["MPH"] = "mph";
|
|
33
|
+
return ImperialUnits2;
|
|
34
|
+
})(ImperialUnits || {});
|
|
35
|
+
|
|
36
|
+
// src/utils/math/math.ts
|
|
37
|
+
var round = (value, decimalPlaces) => {
|
|
38
|
+
if (decimalPlaces === void 0) return value;
|
|
39
|
+
return parseFloat(value.toFixed(decimalPlaces));
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// src/constants/conversion/conversion.constants.ts
|
|
43
|
+
var UNIT_TO_CANONICAL = {
|
|
44
|
+
["cm" /* CM */]: 1,
|
|
45
|
+
["m" /* M */]: 100,
|
|
46
|
+
["in" /* IN */]: 2.54,
|
|
47
|
+
["ft" /* FT */]: 30.48,
|
|
48
|
+
["kg" /* KG */]: 1,
|
|
49
|
+
["lb" /* LB */]: 0.45359237,
|
|
50
|
+
["km/h" /* KM_H */]: 1,
|
|
51
|
+
["mph" /* MPH */]: 1.609344
|
|
52
|
+
};
|
|
53
|
+
var UNIT_DIMENSION = {
|
|
54
|
+
["cm" /* CM */]: "length" /* LENGTH */,
|
|
55
|
+
["m" /* M */]: "length" /* LENGTH */,
|
|
56
|
+
["in" /* IN */]: "length" /* LENGTH */,
|
|
57
|
+
["ft" /* FT */]: "length" /* LENGTH */,
|
|
58
|
+
["kg" /* KG */]: "weight" /* WEIGHT */,
|
|
59
|
+
["lb" /* LB */]: "weight" /* WEIGHT */,
|
|
60
|
+
["km/h" /* KM_H */]: "speed" /* SPEED */,
|
|
61
|
+
["mph" /* MPH */]: "speed" /* SPEED */
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// src/constants/strings/strings.ts
|
|
65
|
+
var strings = {
|
|
66
|
+
convertDimensionMismatch: "Cannot convert between different dimensions: {0} ({1}) and {2} ({3})"
|
|
67
|
+
};
|
|
68
|
+
var strings_default = strings;
|
|
69
|
+
|
|
70
|
+
// src/utils/strings/strings.utils.ts
|
|
71
|
+
var formatMessage = (message, ...args) => message.replace(
|
|
72
|
+
/{(\d+)}/g,
|
|
73
|
+
(match, number) => args[number] !== void 0 ? args[number] : match
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
// src/utils/convert/convert.utils.ts
|
|
77
|
+
var throwConversionError = ({ fromUnits, toUnits }) => {
|
|
78
|
+
const fromDim = UNIT_DIMENSION[fromUnits];
|
|
79
|
+
const toDim = UNIT_DIMENSION[toUnits];
|
|
80
|
+
throw new Error(
|
|
81
|
+
formatMessage(
|
|
82
|
+
strings_default.convertDimensionMismatch,
|
|
83
|
+
fromUnits,
|
|
84
|
+
fromDim,
|
|
85
|
+
toUnits,
|
|
86
|
+
toDim
|
|
87
|
+
)
|
|
88
|
+
);
|
|
89
|
+
};
|
|
90
|
+
var getFactor = (fromUnits, toUnits) => {
|
|
91
|
+
if (fromUnits === toUnits) return 1;
|
|
92
|
+
const fromDim = UNIT_DIMENSION[fromUnits];
|
|
93
|
+
const toDim = UNIT_DIMENSION[toUnits];
|
|
94
|
+
if (fromDim !== toDim) throwConversionError({ fromUnits, toUnits });
|
|
95
|
+
const toCanonicalFrom = UNIT_TO_CANONICAL[fromUnits];
|
|
96
|
+
const toCanonicalTo = UNIT_TO_CANONICAL[toUnits];
|
|
97
|
+
return toCanonicalFrom / toCanonicalTo;
|
|
98
|
+
};
|
|
99
|
+
var convertUtils = {
|
|
100
|
+
getFactor
|
|
101
|
+
};
|
|
102
|
+
var convert_utils_default = convertUtils;
|
|
103
|
+
|
|
104
|
+
// src/utils/convert/convert.ts
|
|
105
|
+
var { getFactor: getFactor2 } = convert_utils_default;
|
|
106
|
+
var convert = (value, { fromUnits, toUnits, roundTo }) => {
|
|
107
|
+
const factor = getFactor2(fromUnits, toUnits);
|
|
108
|
+
return round(value * factor, roundTo);
|
|
109
|
+
};
|
|
110
|
+
export {
|
|
111
|
+
Dimension,
|
|
112
|
+
ImperialUnits,
|
|
113
|
+
MeasurementType,
|
|
114
|
+
MetricUnits,
|
|
115
|
+
UnitSystem,
|
|
116
|
+
convert,
|
|
117
|
+
round
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants/common/common.constants.ts","../src/utils/math/math.ts","../src/constants/conversion/conversion.constants.ts","../src/constants/strings/strings.ts","../src/utils/strings/strings.utils.ts","../src/utils/convert/convert.utils.ts","../src/utils/convert/convert.ts"],"sourcesContent":["export enum UnitSystem {\n METRIC = \"Si\",\n IMPERIAL = \"Imperial\",\n}\n\nexport enum Dimension {\n LENGTH = \"length\",\n WEIGHT = \"weight\",\n SPEED = \"speed\",\n}\n\nexport enum MeasurementType {\n LENGTH = \"length\",\n WEIGHT = \"weight\",\n SPEED = \"speed\",\n HEIGHT = \"height\",\n LENGTH_FEET = \"length_feet\",\n}\n\nexport enum MetricUnits {\n CM = \"cm\",\n M = \"m\",\n KG = \"kg\",\n KM_H = \"km/h\",\n}\n\nexport enum ImperialUnits {\n IN = \"in\",\n FT = \"ft\",\n LB = \"lb\",\n MPH = \"mph\",\n}\n\nexport type Units = MetricUnits | ImperialUnits;\n","export const round = (value: number, decimalPlaces?: number) => {\n if (decimalPlaces === undefined) return value;\n\n return parseFloat(value.toFixed(decimalPlaces));\n};\n","import {\n Dimension,\n ImperialUnits,\n MetricUnits,\n Units,\n} from \"../common/common.constants\";\n\n/** Factor to multiply value by to get value in canonical unit for that dimension. */\nexport const UNIT_TO_CANONICAL: Record<Units, number> = {\n [MetricUnits.CM]: 1,\n [MetricUnits.M]: 100,\n [ImperialUnits.IN]: 2.54,\n [ImperialUnits.FT]: 30.48,\n [MetricUnits.KG]: 1,\n [ImperialUnits.LB]: 0.45359237,\n [MetricUnits.KM_H]: 1,\n [ImperialUnits.MPH]: 1.609344,\n};\n\nexport const UNIT_DIMENSION: Record<Units, Dimension> = {\n [MetricUnits.CM]: Dimension.LENGTH,\n [MetricUnits.M]: Dimension.LENGTH,\n [ImperialUnits.IN]: Dimension.LENGTH,\n [ImperialUnits.FT]: Dimension.LENGTH,\n [MetricUnits.KG]: Dimension.WEIGHT,\n [ImperialUnits.LB]: Dimension.WEIGHT,\n [MetricUnits.KM_H]: Dimension.SPEED,\n [ImperialUnits.MPH]: Dimension.SPEED,\n};\n","const strings = {\n convertDimensionMismatch:\n \"Cannot convert between different dimensions: {0} ({1}) and {2} ({3})\",\n};\n\nexport default strings;\n","export const formatMessage = (message: string, ...args: any[]) =>\n message.replace(/{(\\d+)}/g, (match, number) =>\n args[number] !== undefined ? args[number] : match,\n );\n","import { Units } from \"../../constants/common/common.constants\";\nimport {\n UNIT_DIMENSION,\n UNIT_TO_CANONICAL,\n} from \"../../constants/conversion/conversion.constants\";\nimport strings from \"../../constants/strings/strings\";\nimport { round } from \"../math/math\";\nimport { formatMessage } from \"../strings/strings.utils\";\nimport { ConvertOptions } from \"./convert.types\";\n\nconst throwConversionError = ({ fromUnits, toUnits }: ConvertOptions) => {\n const fromDim = UNIT_DIMENSION[fromUnits];\n const toDim = UNIT_DIMENSION[toUnits];\n\n throw new Error(\n formatMessage(\n strings.convertDimensionMismatch,\n fromUnits,\n fromDim,\n toUnits,\n toDim,\n ),\n );\n};\n\nconst getFactor = (fromUnits: Units, toUnits: Units) => {\n if (fromUnits === toUnits) return 1;\n\n const fromDim = UNIT_DIMENSION[fromUnits];\n const toDim = UNIT_DIMENSION[toUnits];\n\n if (fromDim !== toDim) throwConversionError({ fromUnits, toUnits });\n\n const toCanonicalFrom = UNIT_TO_CANONICAL[fromUnits];\n const toCanonicalTo = UNIT_TO_CANONICAL[toUnits];\n return toCanonicalFrom / toCanonicalTo;\n};\n\nconst convertUtils = {\n getFactor,\n};\n\nexport default convertUtils;\n","import { round } from \"../math/math\";\nimport { ConvertOptions } from \"./convert.types\";\nimport utils from \"./convert.utils\";\n\nconst { getFactor } = utils;\n\nexport const convert = (\n value: number,\n { fromUnits, toUnits, roundTo }: ConvertOptions,\n) => {\n const factor = getFactor(fromUnits, toUnits);\n\n return round(value * factor, roundTo);\n};\n"],"mappings":";AAAO,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,cAAW;AAFD,SAAAA;AAAA,GAAA;AAKL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,WAAQ;AAHE,SAAAA;AAAA,GAAA;AAML,IAAK,kBAAL,kBAAKC,qBAAL;AACL,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,iBAAc;AALJ,SAAAA;AAAA,GAAA;AAQL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,QAAK;AACL,EAAAA,aAAA,OAAI;AACJ,EAAAA,aAAA,QAAK;AACL,EAAAA,aAAA,UAAO;AAJG,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,QAAK;AACL,EAAAA,eAAA,QAAK;AACL,EAAAA,eAAA,QAAK;AACL,EAAAA,eAAA,SAAM;AAJI,SAAAA;AAAA,GAAA;;;AC1BL,IAAM,QAAQ,CAAC,OAAe,kBAA2B;AAC9D,MAAI,kBAAkB,OAAW,QAAO;AAExC,SAAO,WAAW,MAAM,QAAQ,aAAa,CAAC;AAChD;;;ACIO,IAAM,oBAA2C;AAAA,EACtD,cAAe,GAAG;AAAA,EAClB,YAAc,GAAG;AAAA,EACjB,cAAiB,GAAG;AAAA,EACpB,cAAiB,GAAG;AAAA,EACpB,cAAe,GAAG;AAAA,EAClB,cAAiB,GAAG;AAAA,EACpB,kBAAiB,GAAG;AAAA,EACpB,gBAAkB,GAAG;AACvB;AAEO,IAAM,iBAA2C;AAAA,EACtD,cAAe;AAAA,EACf,YAAc;AAAA,EACd,cAAiB;AAAA,EACjB,cAAiB;AAAA,EACjB,cAAe;AAAA,EACf,cAAiB;AAAA,EACjB,kBAAiB;AAAA,EACjB,gBAAkB;AACpB;;;AC5BA,IAAM,UAAU;AAAA,EACd,0BACE;AACJ;AAEA,IAAO,kBAAQ;;;ACLR,IAAM,gBAAgB,CAAC,YAAoB,SAChD,QAAQ;AAAA,EAAQ;AAAA,EAAY,CAAC,OAAO,WAClC,KAAK,MAAM,MAAM,SAAY,KAAK,MAAM,IAAI;AAC9C;;;ACOF,IAAM,uBAAuB,CAAC,EAAE,WAAW,QAAQ,MAAsB;AACvE,QAAM,UAAU,eAAe,SAAS;AACxC,QAAM,QAAQ,eAAe,OAAO;AAEpC,QAAM,IAAI;AAAA,IACR;AAAA,MACE,gBAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,YAAY,CAAC,WAAkB,YAAmB;AACtD,MAAI,cAAc,QAAS,QAAO;AAElC,QAAM,UAAU,eAAe,SAAS;AACxC,QAAM,QAAQ,eAAe,OAAO;AAEpC,MAAI,YAAY,MAAO,sBAAqB,EAAE,WAAW,QAAQ,CAAC;AAElE,QAAM,kBAAkB,kBAAkB,SAAS;AACnD,QAAM,gBAAgB,kBAAkB,OAAO;AAC/C,SAAO,kBAAkB;AAC3B;AAEA,IAAM,eAAe;AAAA,EACnB;AACF;AAEA,IAAO,wBAAQ;;;ACtCf,IAAM,EAAE,WAAAC,WAAU,IAAI;AAEf,IAAM,UAAU,CACrB,OACA,EAAE,WAAW,SAAS,QAAQ,MAC3B;AACH,QAAM,SAASA,WAAU,WAAW,OAAO;AAE3C,SAAO,MAAM,QAAQ,QAAQ,OAAO;AACtC;","names":["UnitSystem","Dimension","MeasurementType","MetricUnits","ImperialUnits","getFactor"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "uconvert",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": ["dist"],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsup",
|
|
18
|
+
"dev": "tsup --watch",
|
|
19
|
+
"example": "npm run build && node example/run.mjs",
|
|
20
|
+
"example:cjs": "node example/run.cjs",
|
|
21
|
+
"format": "prettier --write .",
|
|
22
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
23
|
+
},
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/AndrewTkachuk42/uconvert.git"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [],
|
|
29
|
+
"author": "",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"type": "commonjs",
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/AndrewTkachuk42/uconvert/issues"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://github.com/AndrewTkachuk42/uconvert#readme",
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"prettier": "^3.4.2",
|
|
38
|
+
"prettier-plugin-organize-imports": "^4.1.0",
|
|
39
|
+
"tsup": "^8.5.1",
|
|
40
|
+
"typescript": "^5.9.3"
|
|
41
|
+
}
|
|
42
|
+
}
|