@utilix-tech/sdk 0.10.0 → 0.12.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/CHANGELOG.md +7 -0
- package/README.md +25 -7
- package/dist/{chunk-YVFM5WYI.js → chunk-CJGHHS5M.js} +188 -1
- package/dist/{chunk-GUUYEIU6.js → chunk-XMKJYVKB.js} +35 -1
- package/dist/index.cjs +225 -4
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/{media-C3ZvGyKc.d.cts → media-9HEpTPGA.d.cts} +29 -2
- package/dist/{media-C3ZvGyKc.d.ts → media-9HEpTPGA.d.ts} +29 -2
- package/dist/tools/media.cjs +34 -0
- package/dist/tools/media.d.cts +1 -1
- package/dist/tools/media.d.ts +1 -1
- package/dist/tools/media.js +1 -1
- package/dist/tools/units.cjs +187 -0
- package/dist/tools/units.d.cts +1 -1
- package/dist/tools/units.d.ts +1 -1
- package/dist/tools/units.js +1 -1
- package/dist/{units-DRT6W-vu.d.cts → units-Dt80-S2j.d.cts} +69 -2
- package/dist/{units-DRT6W-vu.d.ts → units-Dt80-S2j.d.ts} +69 -2
- package/package.json +1 -1
|
@@ -108,9 +108,35 @@ interface Id3TagsError {
|
|
|
108
108
|
* ID3v2.2 tags are detected but their 3-character frame IDs are not decoded.
|
|
109
109
|
*/
|
|
110
110
|
declare function readId3Tags(bytes: Uint8Array): Id3Tags | Id3TagsError;
|
|
111
|
+
interface IcoImageEntry {
|
|
112
|
+
width: number;
|
|
113
|
+
height: number;
|
|
114
|
+
colorCount: number | null;
|
|
115
|
+
planes: number;
|
|
116
|
+
bitCount: number;
|
|
117
|
+
bytesInRes: number;
|
|
118
|
+
imageOffset: number;
|
|
119
|
+
}
|
|
120
|
+
interface IcoInfo {
|
|
121
|
+
imageCount: number;
|
|
122
|
+
images: IcoImageEntry[];
|
|
123
|
+
}
|
|
124
|
+
interface IcoInfoError {
|
|
125
|
+
error: string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Read a .ico file's ICONDIR/ICONDIRENTRY header table to report how many
|
|
129
|
+
* images it embeds and each one's width, height, color depth, and size,
|
|
130
|
+
* without decoding any pixel data. Rejects .cur cursor files, which share
|
|
131
|
+
* the same container format but a different type flag.
|
|
132
|
+
*/
|
|
133
|
+
declare function readIcoInfo(bytes: Uint8Array): IcoInfo | IcoInfoError;
|
|
111
134
|
|
|
112
135
|
type media_ExifData = ExifData;
|
|
113
136
|
type media_ExifError = ExifError;
|
|
137
|
+
type media_IcoImageEntry = IcoImageEntry;
|
|
138
|
+
type media_IcoInfo = IcoInfo;
|
|
139
|
+
type media_IcoInfoError = IcoInfoError;
|
|
114
140
|
type media_Id3Tags = Id3Tags;
|
|
115
141
|
type media_Id3TagsError = Id3TagsError;
|
|
116
142
|
type media_ImageFormat = ImageFormat;
|
|
@@ -121,12 +147,13 @@ type media_PdfMetadataError = PdfMetadataError;
|
|
|
121
147
|
type media_WavInfo = WavInfo;
|
|
122
148
|
type media_WavInfoError = WavInfoError;
|
|
123
149
|
declare const media_readExifData: typeof readExifData;
|
|
150
|
+
declare const media_readIcoInfo: typeof readIcoInfo;
|
|
124
151
|
declare const media_readId3Tags: typeof readId3Tags;
|
|
125
152
|
declare const media_readImageInfo: typeof readImageInfo;
|
|
126
153
|
declare const media_readPdfMetadata: typeof readPdfMetadata;
|
|
127
154
|
declare const media_readWavInfo: typeof readWavInfo;
|
|
128
155
|
declare namespace media {
|
|
129
|
-
export { type media_ExifData as ExifData, type media_ExifError as ExifError, type media_Id3Tags as Id3Tags, type media_Id3TagsError as Id3TagsError, type media_ImageFormat as ImageFormat, type media_ImageInfo as ImageInfo, type media_ImageInfoError as ImageInfoError, type media_PdfMetadata as PdfMetadata, type media_PdfMetadataError as PdfMetadataError, type media_WavInfo as WavInfo, type media_WavInfoError as WavInfoError, media_readExifData as readExifData, media_readId3Tags as readId3Tags, media_readImageInfo as readImageInfo, media_readPdfMetadata as readPdfMetadata, media_readWavInfo as readWavInfo };
|
|
156
|
+
export { type media_ExifData as ExifData, type media_ExifError as ExifError, type media_IcoImageEntry as IcoImageEntry, type media_IcoInfo as IcoInfo, type media_IcoInfoError as IcoInfoError, type media_Id3Tags as Id3Tags, type media_Id3TagsError as Id3TagsError, type media_ImageFormat as ImageFormat, type media_ImageInfo as ImageInfo, type media_ImageInfoError as ImageInfoError, type media_PdfMetadata as PdfMetadata, type media_PdfMetadataError as PdfMetadataError, type media_WavInfo as WavInfo, type media_WavInfoError as WavInfoError, media_readExifData as readExifData, media_readIcoInfo as readIcoInfo, media_readId3Tags as readId3Tags, media_readImageInfo as readImageInfo, media_readPdfMetadata as readPdfMetadata, media_readWavInfo as readWavInfo };
|
|
130
157
|
}
|
|
131
158
|
|
|
132
|
-
export { type ExifData as E, type
|
|
159
|
+
export { type ExifData as E, type IcoImageEntry as I, type PdfMetadata as P, type WavInfo as W, type ExifError as a, type IcoInfo as b, type IcoInfoError as c, type Id3Tags as d, type Id3TagsError as e, type ImageFormat as f, type ImageInfo as g, type ImageInfoError as h, type PdfMetadataError as i, type WavInfoError as j, readIcoInfo as k, readId3Tags as l, media as m, readImageInfo as n, readPdfMetadata as o, readWavInfo as p, readExifData as r };
|
|
@@ -108,9 +108,35 @@ interface Id3TagsError {
|
|
|
108
108
|
* ID3v2.2 tags are detected but their 3-character frame IDs are not decoded.
|
|
109
109
|
*/
|
|
110
110
|
declare function readId3Tags(bytes: Uint8Array): Id3Tags | Id3TagsError;
|
|
111
|
+
interface IcoImageEntry {
|
|
112
|
+
width: number;
|
|
113
|
+
height: number;
|
|
114
|
+
colorCount: number | null;
|
|
115
|
+
planes: number;
|
|
116
|
+
bitCount: number;
|
|
117
|
+
bytesInRes: number;
|
|
118
|
+
imageOffset: number;
|
|
119
|
+
}
|
|
120
|
+
interface IcoInfo {
|
|
121
|
+
imageCount: number;
|
|
122
|
+
images: IcoImageEntry[];
|
|
123
|
+
}
|
|
124
|
+
interface IcoInfoError {
|
|
125
|
+
error: string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Read a .ico file's ICONDIR/ICONDIRENTRY header table to report how many
|
|
129
|
+
* images it embeds and each one's width, height, color depth, and size,
|
|
130
|
+
* without decoding any pixel data. Rejects .cur cursor files, which share
|
|
131
|
+
* the same container format but a different type flag.
|
|
132
|
+
*/
|
|
133
|
+
declare function readIcoInfo(bytes: Uint8Array): IcoInfo | IcoInfoError;
|
|
111
134
|
|
|
112
135
|
type media_ExifData = ExifData;
|
|
113
136
|
type media_ExifError = ExifError;
|
|
137
|
+
type media_IcoImageEntry = IcoImageEntry;
|
|
138
|
+
type media_IcoInfo = IcoInfo;
|
|
139
|
+
type media_IcoInfoError = IcoInfoError;
|
|
114
140
|
type media_Id3Tags = Id3Tags;
|
|
115
141
|
type media_Id3TagsError = Id3TagsError;
|
|
116
142
|
type media_ImageFormat = ImageFormat;
|
|
@@ -121,12 +147,13 @@ type media_PdfMetadataError = PdfMetadataError;
|
|
|
121
147
|
type media_WavInfo = WavInfo;
|
|
122
148
|
type media_WavInfoError = WavInfoError;
|
|
123
149
|
declare const media_readExifData: typeof readExifData;
|
|
150
|
+
declare const media_readIcoInfo: typeof readIcoInfo;
|
|
124
151
|
declare const media_readId3Tags: typeof readId3Tags;
|
|
125
152
|
declare const media_readImageInfo: typeof readImageInfo;
|
|
126
153
|
declare const media_readPdfMetadata: typeof readPdfMetadata;
|
|
127
154
|
declare const media_readWavInfo: typeof readWavInfo;
|
|
128
155
|
declare namespace media {
|
|
129
|
-
export { type media_ExifData as ExifData, type media_ExifError as ExifError, type media_Id3Tags as Id3Tags, type media_Id3TagsError as Id3TagsError, type media_ImageFormat as ImageFormat, type media_ImageInfo as ImageInfo, type media_ImageInfoError as ImageInfoError, type media_PdfMetadata as PdfMetadata, type media_PdfMetadataError as PdfMetadataError, type media_WavInfo as WavInfo, type media_WavInfoError as WavInfoError, media_readExifData as readExifData, media_readId3Tags as readId3Tags, media_readImageInfo as readImageInfo, media_readPdfMetadata as readPdfMetadata, media_readWavInfo as readWavInfo };
|
|
156
|
+
export { type media_ExifData as ExifData, type media_ExifError as ExifError, type media_IcoImageEntry as IcoImageEntry, type media_IcoInfo as IcoInfo, type media_IcoInfoError as IcoInfoError, type media_Id3Tags as Id3Tags, type media_Id3TagsError as Id3TagsError, type media_ImageFormat as ImageFormat, type media_ImageInfo as ImageInfo, type media_ImageInfoError as ImageInfoError, type media_PdfMetadata as PdfMetadata, type media_PdfMetadataError as PdfMetadataError, type media_WavInfo as WavInfo, type media_WavInfoError as WavInfoError, media_readExifData as readExifData, media_readIcoInfo as readIcoInfo, media_readId3Tags as readId3Tags, media_readImageInfo as readImageInfo, media_readPdfMetadata as readPdfMetadata, media_readWavInfo as readWavInfo };
|
|
130
157
|
}
|
|
131
158
|
|
|
132
|
-
export { type ExifData as E, type
|
|
159
|
+
export { type ExifData as E, type IcoImageEntry as I, type PdfMetadata as P, type WavInfo as W, type ExifError as a, type IcoInfo as b, type IcoInfoError as c, type Id3Tags as d, type Id3TagsError as e, type ImageFormat as f, type ImageInfo as g, type ImageInfoError as h, type PdfMetadataError as i, type WavInfoError as j, readIcoInfo as k, readId3Tags as l, media as m, readImageInfo as n, readPdfMetadata as o, readWavInfo as p, readExifData as r };
|
package/dist/tools/media.cjs
CHANGED
|
@@ -722,8 +722,42 @@ function readId3Tags(bytes) {
|
|
|
722
722
|
}
|
|
723
723
|
return { error: "No ID3v1 or ID3v2.3/2.4 tags found in this file" };
|
|
724
724
|
}
|
|
725
|
+
function readU16LE(bytes, offset) {
|
|
726
|
+
return bytes[offset] | bytes[offset + 1] << 8;
|
|
727
|
+
}
|
|
728
|
+
function readU32LE(bytes, offset) {
|
|
729
|
+
return (bytes[offset] | bytes[offset + 1] << 8 | bytes[offset + 2] << 16 | bytes[offset + 3] << 24) >>> 0;
|
|
730
|
+
}
|
|
731
|
+
function readIcoInfo(bytes) {
|
|
732
|
+
if (bytes.length < 6) return { error: "File too small to be a valid ICO file" };
|
|
733
|
+
if (readU16LE(bytes, 0) !== 0) return { error: "Not a valid ICO file (reserved header field must be 0)" };
|
|
734
|
+
const type = readU16LE(bytes, 2);
|
|
735
|
+
if (type === 2) return { error: "This is a .cur cursor file (type 2), not a .ico icon file" };
|
|
736
|
+
if (type !== 1) return { error: `Unrecognized ICONDIR type (${type}); expected 1 for an icon file` };
|
|
737
|
+
const count = readU16LE(bytes, 4);
|
|
738
|
+
if (count === 0) return { error: "ICO file declares zero embedded images" };
|
|
739
|
+
const images = [];
|
|
740
|
+
for (let i = 0; i < count; i++) {
|
|
741
|
+
const offset = 6 + i * 16;
|
|
742
|
+
if (offset + 16 > bytes.length) return { error: `Truncated ICONDIRENTRY for image ${i}` };
|
|
743
|
+
const widthRaw = bytes[offset];
|
|
744
|
+
const heightRaw = bytes[offset + 1];
|
|
745
|
+
const colorCountRaw = bytes[offset + 2];
|
|
746
|
+
images.push({
|
|
747
|
+
width: widthRaw === 0 ? 256 : widthRaw,
|
|
748
|
+
height: heightRaw === 0 ? 256 : heightRaw,
|
|
749
|
+
colorCount: colorCountRaw === 0 ? null : colorCountRaw,
|
|
750
|
+
planes: readU16LE(bytes, offset + 4),
|
|
751
|
+
bitCount: readU16LE(bytes, offset + 6),
|
|
752
|
+
bytesInRes: readU32LE(bytes, offset + 8),
|
|
753
|
+
imageOffset: readU32LE(bytes, offset + 12)
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
return { imageCount: count, images };
|
|
757
|
+
}
|
|
725
758
|
|
|
726
759
|
exports.readExifData = readExifData;
|
|
760
|
+
exports.readIcoInfo = readIcoInfo;
|
|
727
761
|
exports.readId3Tags = readId3Tags;
|
|
728
762
|
exports.readImageInfo = readImageInfo;
|
|
729
763
|
exports.readPdfMetadata = readPdfMetadata;
|
package/dist/tools/media.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { E as ExifData, a as ExifError, I as
|
|
1
|
+
export { E as ExifData, a as ExifError, I as IcoImageEntry, b as IcoInfo, c as IcoInfoError, d as Id3Tags, e as Id3TagsError, f as ImageFormat, g as ImageInfo, h as ImageInfoError, P as PdfMetadata, i as PdfMetadataError, W as WavInfo, j as WavInfoError, r as readExifData, k as readIcoInfo, l as readId3Tags, n as readImageInfo, o as readPdfMetadata, p as readWavInfo } from '../media-9HEpTPGA.cjs';
|
package/dist/tools/media.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { E as ExifData, a as ExifError, I as
|
|
1
|
+
export { E as ExifData, a as ExifError, I as IcoImageEntry, b as IcoInfo, c as IcoInfoError, d as Id3Tags, e as Id3TagsError, f as ImageFormat, g as ImageInfo, h as ImageInfoError, P as PdfMetadata, i as PdfMetadataError, W as WavInfo, j as WavInfoError, r as readExifData, k as readIcoInfo, l as readId3Tags, n as readImageInfo, o as readPdfMetadata, p as readWavInfo } from '../media-9HEpTPGA.js';
|
package/dist/tools/media.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { readExifData, readId3Tags, readImageInfo, readPdfMetadata, readWavInfo } from '../chunk-
|
|
1
|
+
export { readExifData, readIcoInfo, readId3Tags, readImageInfo, readPdfMetadata, readWavInfo } from '../chunk-XMKJYVKB.js';
|
|
2
2
|
import '../chunk-MLKGABMK.js';
|
package/dist/tools/units.cjs
CHANGED
|
@@ -891,6 +891,190 @@ function validateCardNumber(input) {
|
|
|
891
891
|
const formatted = formatCardNumber(digits, network);
|
|
892
892
|
return { valid, network, length: digits.length, formatted };
|
|
893
893
|
}
|
|
894
|
+
var IBAN_COUNTRY_LENGTHS = {
|
|
895
|
+
AD: 24,
|
|
896
|
+
AE: 23,
|
|
897
|
+
AL: 28,
|
|
898
|
+
AT: 20,
|
|
899
|
+
AZ: 28,
|
|
900
|
+
BA: 20,
|
|
901
|
+
BE: 16,
|
|
902
|
+
BG: 22,
|
|
903
|
+
BH: 22,
|
|
904
|
+
BR: 29,
|
|
905
|
+
BY: 28,
|
|
906
|
+
CH: 21,
|
|
907
|
+
CR: 22,
|
|
908
|
+
CY: 28,
|
|
909
|
+
CZ: 24,
|
|
910
|
+
DE: 22,
|
|
911
|
+
DK: 18,
|
|
912
|
+
DO: 28,
|
|
913
|
+
EE: 20,
|
|
914
|
+
EG: 29,
|
|
915
|
+
ES: 24,
|
|
916
|
+
FI: 18,
|
|
917
|
+
FO: 18,
|
|
918
|
+
FR: 27,
|
|
919
|
+
GB: 22,
|
|
920
|
+
GE: 22,
|
|
921
|
+
GI: 23,
|
|
922
|
+
GL: 18,
|
|
923
|
+
GR: 27,
|
|
924
|
+
GT: 28,
|
|
925
|
+
HR: 21,
|
|
926
|
+
HU: 28,
|
|
927
|
+
IE: 22,
|
|
928
|
+
IL: 23,
|
|
929
|
+
IQ: 23,
|
|
930
|
+
IS: 26,
|
|
931
|
+
IT: 27,
|
|
932
|
+
JO: 30,
|
|
933
|
+
KW: 30,
|
|
934
|
+
KZ: 20,
|
|
935
|
+
LB: 28,
|
|
936
|
+
LC: 32,
|
|
937
|
+
LI: 21,
|
|
938
|
+
LT: 20,
|
|
939
|
+
LU: 20,
|
|
940
|
+
LV: 21,
|
|
941
|
+
LY: 25,
|
|
942
|
+
MC: 27,
|
|
943
|
+
MD: 24,
|
|
944
|
+
ME: 22,
|
|
945
|
+
MK: 19,
|
|
946
|
+
MR: 27,
|
|
947
|
+
MT: 31,
|
|
948
|
+
MU: 30,
|
|
949
|
+
NL: 18,
|
|
950
|
+
NO: 15,
|
|
951
|
+
PK: 24,
|
|
952
|
+
PL: 28,
|
|
953
|
+
PS: 29,
|
|
954
|
+
PT: 25,
|
|
955
|
+
QA: 29,
|
|
956
|
+
RO: 24,
|
|
957
|
+
RS: 22,
|
|
958
|
+
SA: 24,
|
|
959
|
+
SC: 31,
|
|
960
|
+
SE: 24,
|
|
961
|
+
SI: 19,
|
|
962
|
+
SK: 24,
|
|
963
|
+
SM: 27,
|
|
964
|
+
ST: 25,
|
|
965
|
+
SV: 28,
|
|
966
|
+
TL: 23,
|
|
967
|
+
TN: 24,
|
|
968
|
+
TR: 26,
|
|
969
|
+
UA: 29,
|
|
970
|
+
VA: 22,
|
|
971
|
+
VG: 24,
|
|
972
|
+
XK: 20
|
|
973
|
+
};
|
|
974
|
+
function ibanMod97(numeric) {
|
|
975
|
+
let remainder = 0;
|
|
976
|
+
for (let i = 0; i < numeric.length; i += 7) {
|
|
977
|
+
remainder = parseInt(String(remainder) + numeric.substr(i, 7), 10) % 97;
|
|
978
|
+
}
|
|
979
|
+
return remainder;
|
|
980
|
+
}
|
|
981
|
+
function formatIban(cleaned) {
|
|
982
|
+
return cleaned.match(/.{1,4}/g)?.join(" ") ?? cleaned;
|
|
983
|
+
}
|
|
984
|
+
function validateIban(input) {
|
|
985
|
+
if (!input || !input.trim()) return { error: "Input is empty" };
|
|
986
|
+
const cleaned = input.replace(/\s/g, "").toUpperCase();
|
|
987
|
+
if (!/^[A-Z0-9]+$/.test(cleaned)) return { error: "IBAN must contain only letters and digits" };
|
|
988
|
+
if (cleaned.length < 4 || cleaned.length > 34) {
|
|
989
|
+
return { error: `IBAN length (${cleaned.length}) is outside the valid range of 4-34 characters` };
|
|
990
|
+
}
|
|
991
|
+
if (!/^[A-Z]{2}\d{2}/.test(cleaned)) {
|
|
992
|
+
return { error: "IBAN must start with a 2-letter country code followed by 2 check digits" };
|
|
993
|
+
}
|
|
994
|
+
const countryCode = cleaned.slice(0, 2);
|
|
995
|
+
const checkDigits = cleaned.slice(2, 4);
|
|
996
|
+
const bban = cleaned.slice(4);
|
|
997
|
+
const rearranged = cleaned.slice(4) + cleaned.slice(0, 4);
|
|
998
|
+
const numeric = rearranged.split("").map((ch) => /[A-Z]/.test(ch) ? String(ch.charCodeAt(0) - 55) : ch).join("");
|
|
999
|
+
const checksumValid = ibanMod97(numeric) === 1;
|
|
1000
|
+
const expectedLength = IBAN_COUNTRY_LENGTHS[countryCode] ?? null;
|
|
1001
|
+
const lengthValid = expectedLength === null ? null : cleaned.length === expectedLength;
|
|
1002
|
+
const valid = checksumValid && lengthValid !== false;
|
|
1003
|
+
return {
|
|
1004
|
+
valid,
|
|
1005
|
+
formatted: formatIban(cleaned),
|
|
1006
|
+
countryCode,
|
|
1007
|
+
checkDigits,
|
|
1008
|
+
bban,
|
|
1009
|
+
length: cleaned.length,
|
|
1010
|
+
expectedLength,
|
|
1011
|
+
checksumValid,
|
|
1012
|
+
lengthValid
|
|
1013
|
+
};
|
|
1014
|
+
}
|
|
1015
|
+
function round2(n) {
|
|
1016
|
+
return Math.round(n * 100) / 100;
|
|
1017
|
+
}
|
|
1018
|
+
function calculateLoan(principal, annualRatePercent, termMonths) {
|
|
1019
|
+
if (!Number.isFinite(principal) || principal <= 0) return { error: "Principal must be a positive number" };
|
|
1020
|
+
if (!Number.isFinite(annualRatePercent) || annualRatePercent < 0) {
|
|
1021
|
+
return { error: "Annual interest rate must be zero or a positive number" };
|
|
1022
|
+
}
|
|
1023
|
+
if (!Number.isInteger(termMonths) || termMonths <= 0) {
|
|
1024
|
+
return { error: "Term must be a positive whole number of months" };
|
|
1025
|
+
}
|
|
1026
|
+
const monthlyRate = annualRatePercent / 100 / 12;
|
|
1027
|
+
let monthlyPayment;
|
|
1028
|
+
if (monthlyRate === 0) {
|
|
1029
|
+
monthlyPayment = principal / termMonths;
|
|
1030
|
+
} else {
|
|
1031
|
+
const factor = Math.pow(1 + monthlyRate, termMonths);
|
|
1032
|
+
monthlyPayment = principal * monthlyRate * factor / (factor - 1);
|
|
1033
|
+
}
|
|
1034
|
+
const schedule = [];
|
|
1035
|
+
let balance = round2(principal);
|
|
1036
|
+
let totalPayment = 0;
|
|
1037
|
+
for (let month = 1; month <= termMonths; month++) {
|
|
1038
|
+
const interest = monthlyRate === 0 ? 0 : round2(balance * monthlyRate);
|
|
1039
|
+
let principalPortion = round2(monthlyPayment) - interest;
|
|
1040
|
+
if (month === termMonths || principalPortion > balance) principalPortion = balance;
|
|
1041
|
+
const payment = round2(principalPortion + interest);
|
|
1042
|
+
balance = round2(balance - principalPortion);
|
|
1043
|
+
totalPayment += payment;
|
|
1044
|
+
schedule.push({ month, payment, principal: round2(principalPortion), interest, balance: Math.max(balance, 0) });
|
|
1045
|
+
}
|
|
1046
|
+
return {
|
|
1047
|
+
monthlyPayment: round2(monthlyPayment),
|
|
1048
|
+
totalPayment: round2(totalPayment),
|
|
1049
|
+
totalInterest: round2(totalPayment - principal),
|
|
1050
|
+
termMonths,
|
|
1051
|
+
schedule
|
|
1052
|
+
};
|
|
1053
|
+
}
|
|
1054
|
+
var BARCODE_FORMAT_BY_LENGTH = { 8: "EAN-8", 12: "UPC-A", 13: "EAN-13" };
|
|
1055
|
+
function computeBarcodeCheckDigit(dataDigits) {
|
|
1056
|
+
let sum = 0;
|
|
1057
|
+
const n = dataDigits.length;
|
|
1058
|
+
for (let i = 0; i < n; i++) {
|
|
1059
|
+
const distanceFromEnd = n - 1 - i;
|
|
1060
|
+
const weight = distanceFromEnd % 2 === 0 ? 3 : 1;
|
|
1061
|
+
sum += dataDigits[i] * weight;
|
|
1062
|
+
}
|
|
1063
|
+
return (10 - sum % 10) % 10;
|
|
1064
|
+
}
|
|
1065
|
+
function validateBarcode(input) {
|
|
1066
|
+
if (!input || !input.trim()) return { error: "Input is empty" };
|
|
1067
|
+
const digits = input.replace(/[\s-]/g, "");
|
|
1068
|
+
if (!/^\d+$/.test(digits)) return { error: "Barcode must contain only digits (spaces and hyphens are ignored)" };
|
|
1069
|
+
const format = BARCODE_FORMAT_BY_LENGTH[digits.length];
|
|
1070
|
+
if (!format) {
|
|
1071
|
+
return { error: `Unsupported barcode length (${digits.length} digits); expected 8 (EAN-8), 12 (UPC-A), or 13 (EAN-13)` };
|
|
1072
|
+
}
|
|
1073
|
+
const dataDigits = digits.slice(0, -1).split("").map(Number);
|
|
1074
|
+
const checkDigit = Number(digits[digits.length - 1]);
|
|
1075
|
+
const expectedCheckDigit = computeBarcodeCheckDigit(dataDigits);
|
|
1076
|
+
return { valid: checkDigit === expectedCheckDigit, format, digits, checkDigit, expectedCheckDigit };
|
|
1077
|
+
}
|
|
894
1078
|
|
|
895
1079
|
exports.BASE_LABELS = BASE_LABELS;
|
|
896
1080
|
exports.BASE_PREFIXES = BASE_PREFIXES;
|
|
@@ -905,6 +1089,7 @@ exports.autoFormat = autoFormat;
|
|
|
905
1089
|
exports.bumpVersion = bumpVersion;
|
|
906
1090
|
exports.calcAspectRatio = calcAspectRatio;
|
|
907
1091
|
exports.calcSubnet = calcSubnet;
|
|
1092
|
+
exports.calculateLoan = calculateLoan;
|
|
908
1093
|
exports.compareSemver = compareSemver;
|
|
909
1094
|
exports.convert = convert;
|
|
910
1095
|
exports.convertBytes = convertBytes;
|
|
@@ -949,5 +1134,7 @@ exports.scaleByWidth = scaleByWidth;
|
|
|
949
1134
|
exports.sortVersions = sortVersions;
|
|
950
1135
|
exports.splitSubnet = splitSubnet;
|
|
951
1136
|
exports.symbolicToPermissions = symbolicToPermissions;
|
|
1137
|
+
exports.validateBarcode = validateBarcode;
|
|
952
1138
|
exports.validateCardNumber = validateCardNumber;
|
|
1139
|
+
exports.validateIban = validateIban;
|
|
953
1140
|
exports.viewportToPx = viewportToPx;
|
package/dist/tools/units.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { A as AspectRatioResult, B as BASE_LABELS,
|
|
1
|
+
export { A as AmortizationRow, a as AspectRatioResult, B as BASE_LABELS, b as BASE_PREFIXES, c as BYTE_UNITS, d as BarcodeFormat, e as BarcodeValidationResult, f as BaseConvertResult, g as ByteConvertResult, h as ByteUnit, C as COMMON_CURRENCIES, i as COMMON_LOCALES, j as COMMON_PERMISSIONS, k as COMMON_RATIOS, l as COMMON_SIZES, m as COMMON_VIEWPORTS, n as CardValidationResult, D as Dimensions, F as FilePermissions, o as FormatOptions, I as IbanValidationResult, p as IpConversion, L as LoanResult, N as NotationStyle, q as NumberBase, P as Permission, r as PxConvertResult, S as SemverVersion, s as SubnetInfo, V as ViewportConvertResult, t as autoFormat, v as bumpVersion, w as calcAspectRatio, x as calcSubnet, y as calculateLoan, z as compareSemver, E as convert, G as convertBytes, H as convertIp, J as coverBox, K as decimalToIp, M as decimalToIpCidr, O as describePermissions, Q as fitIntoBox, R as formatNumber, T as formatValue, U as formatVwValue, W as formatWithSeparator, X as gcd, Y as ipFromBinary, Z as ipFromDecimal, _ as ipFromHex, $ as ipToBinary, a0 as ipToDecimal, a1 as ipToDecimalCidr, a2 as ipToHex, a3 as ipToOctal, a4 as isValid, a5 as isValidCidr, a6 as isValidIp, a7 as isValidIpv4, a8 as octalToPermissions, a9 as parseFileSize, aa as parseInput, ab as parseNumberString, ac as parseSemver, ad as permissionsToChmod, ae as permissionsToOctal, af as permissionsToSymbolic, ag as ptToPx, ah as pxToAll, ai as pxToViewport, aj as remToPx, ak as satisfiesRange, al as scaleByHeight, am as scaleByWidth, an as sortVersions, ao as splitSubnet, ap as symbolicToPermissions, aq as validateBarcode, ar as validateCardNumber, as as validateIban, at as viewportToPx } from '../units-Dt80-S2j.cjs';
|
package/dist/tools/units.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { A as AspectRatioResult, B as BASE_LABELS,
|
|
1
|
+
export { A as AmortizationRow, a as AspectRatioResult, B as BASE_LABELS, b as BASE_PREFIXES, c as BYTE_UNITS, d as BarcodeFormat, e as BarcodeValidationResult, f as BaseConvertResult, g as ByteConvertResult, h as ByteUnit, C as COMMON_CURRENCIES, i as COMMON_LOCALES, j as COMMON_PERMISSIONS, k as COMMON_RATIOS, l as COMMON_SIZES, m as COMMON_VIEWPORTS, n as CardValidationResult, D as Dimensions, F as FilePermissions, o as FormatOptions, I as IbanValidationResult, p as IpConversion, L as LoanResult, N as NotationStyle, q as NumberBase, P as Permission, r as PxConvertResult, S as SemverVersion, s as SubnetInfo, V as ViewportConvertResult, t as autoFormat, v as bumpVersion, w as calcAspectRatio, x as calcSubnet, y as calculateLoan, z as compareSemver, E as convert, G as convertBytes, H as convertIp, J as coverBox, K as decimalToIp, M as decimalToIpCidr, O as describePermissions, Q as fitIntoBox, R as formatNumber, T as formatValue, U as formatVwValue, W as formatWithSeparator, X as gcd, Y as ipFromBinary, Z as ipFromDecimal, _ as ipFromHex, $ as ipToBinary, a0 as ipToDecimal, a1 as ipToDecimalCidr, a2 as ipToHex, a3 as ipToOctal, a4 as isValid, a5 as isValidCidr, a6 as isValidIp, a7 as isValidIpv4, a8 as octalToPermissions, a9 as parseFileSize, aa as parseInput, ab as parseNumberString, ac as parseSemver, ad as permissionsToChmod, ae as permissionsToOctal, af as permissionsToSymbolic, ag as ptToPx, ah as pxToAll, ai as pxToViewport, aj as remToPx, ak as satisfiesRange, al as scaleByHeight, am as scaleByWidth, an as sortVersions, ao as splitSubnet, ap as symbolicToPermissions, aq as validateBarcode, ar as validateCardNumber, as as validateIban, at as viewportToPx } from '../units-Dt80-S2j.js';
|
package/dist/tools/units.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { BASE_LABELS, BASE_PREFIXES, BYTE_UNITS, COMMON_CURRENCIES, COMMON_LOCALES, COMMON_PERMISSIONS, COMMON_RATIOS, COMMON_SIZES, COMMON_VIEWPORTS, autoFormat, bumpVersion, calcAspectRatio, calcSubnet, compareSemver, convert, convertBytes, convertIp, coverBox, decimalToIp, decimalToIpCidr, describePermissions, fitIntoBox, formatNumber, formatValue, formatVwValue, formatWithSeparator, gcd, ipFromBinary, ipFromDecimal, ipFromHex, ipToBinary, ipToDecimal, ipToDecimalCidr, ipToHex, ipToOctal, isValid, isValidCidr, isValidIp, isValidIpv4, octalToPermissions, parseFileSize, parseInput, parseNumberString, parseSemver, permissionsToChmod, permissionsToOctal, permissionsToSymbolic, ptToPx, pxToAll, pxToViewport, remToPx, satisfiesRange, scaleByHeight, scaleByWidth, sortVersions, splitSubnet, symbolicToPermissions, validateCardNumber, viewportToPx } from '../chunk-
|
|
1
|
+
export { BASE_LABELS, BASE_PREFIXES, BYTE_UNITS, COMMON_CURRENCIES, COMMON_LOCALES, COMMON_PERMISSIONS, COMMON_RATIOS, COMMON_SIZES, COMMON_VIEWPORTS, autoFormat, bumpVersion, calcAspectRatio, calcSubnet, calculateLoan, compareSemver, convert, convertBytes, convertIp, coverBox, decimalToIp, decimalToIpCidr, describePermissions, fitIntoBox, formatNumber, formatValue, formatVwValue, formatWithSeparator, gcd, ipFromBinary, ipFromDecimal, ipFromHex, ipToBinary, ipToDecimal, ipToDecimalCidr, ipToHex, ipToOctal, isValid, isValidCidr, isValidIp, isValidIpv4, octalToPermissions, parseFileSize, parseInput, parseNumberString, parseSemver, permissionsToChmod, permissionsToOctal, permissionsToSymbolic, ptToPx, pxToAll, pxToViewport, remToPx, satisfiesRange, scaleByHeight, scaleByWidth, sortVersions, splitSubnet, symbolicToPermissions, validateBarcode, validateCardNumber, validateIban, viewportToPx } from '../chunk-CJGHHS5M.js';
|
|
2
2
|
import '../chunk-MLKGABMK.js';
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* - cidr-calc : calcSubnet, splitSubnet, isValidCidr, isValidIp, ipToDecimal (cidr), decimalToIp (cidr)
|
|
14
14
|
* - semver : parseSemver, isValid, compareSemver, satisfiesRange, bumpVersion, sortVersions
|
|
15
15
|
* - credit-card-validator : validateCardNumber
|
|
16
|
+
* - iban-validator : validateIban
|
|
17
|
+
* - loan-calculator : calculateLoan
|
|
16
18
|
*/
|
|
17
19
|
interface PxConvertResult {
|
|
18
20
|
px: number;
|
|
@@ -236,11 +238,71 @@ interface CardValidationResult {
|
|
|
236
238
|
declare function validateCardNumber(input: string): CardValidationResult | {
|
|
237
239
|
error: string;
|
|
238
240
|
};
|
|
241
|
+
interface IbanValidationResult {
|
|
242
|
+
valid: boolean;
|
|
243
|
+
formatted: string;
|
|
244
|
+
countryCode: string;
|
|
245
|
+
checkDigits: string;
|
|
246
|
+
bban: string;
|
|
247
|
+
length: number;
|
|
248
|
+
expectedLength: number | null;
|
|
249
|
+
checksumValid: boolean;
|
|
250
|
+
lengthValid: boolean | null;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Validate an IBAN via the mod-97 checksum defined by ISO 13616 and format
|
|
254
|
+
* it into the standard human-readable grouped form. Also cross-checks the
|
|
255
|
+
* total length against the country's registered fixed length where known.
|
|
256
|
+
*/
|
|
257
|
+
declare function validateIban(input: string): IbanValidationResult | {
|
|
258
|
+
error: string;
|
|
259
|
+
};
|
|
260
|
+
interface AmortizationRow {
|
|
261
|
+
month: number;
|
|
262
|
+
payment: number;
|
|
263
|
+
principal: number;
|
|
264
|
+
interest: number;
|
|
265
|
+
balance: number;
|
|
266
|
+
}
|
|
267
|
+
interface LoanResult {
|
|
268
|
+
monthlyPayment: number;
|
|
269
|
+
totalPayment: number;
|
|
270
|
+
totalInterest: number;
|
|
271
|
+
termMonths: number;
|
|
272
|
+
schedule: AmortizationRow[];
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Compute the monthly payment, total interest, and full amortization
|
|
276
|
+
* schedule for a fixed-rate loan or mortgage, given the principal, annual
|
|
277
|
+
* interest rate (as a percent, e.g. 6.5), and term in months.
|
|
278
|
+
*/
|
|
279
|
+
declare function calculateLoan(principal: number, annualRatePercent: number, termMonths: number): LoanResult | {
|
|
280
|
+
error: string;
|
|
281
|
+
};
|
|
282
|
+
type BarcodeFormat = "EAN-13" | "EAN-8" | "UPC-A";
|
|
283
|
+
interface BarcodeValidationResult {
|
|
284
|
+
valid: boolean;
|
|
285
|
+
format: BarcodeFormat;
|
|
286
|
+
digits: string;
|
|
287
|
+
checkDigit: number;
|
|
288
|
+
expectedCheckDigit: number;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Validate an EAN-13, EAN-8, or UPC-A barcode number via its weighted
|
|
292
|
+
* mod-10 check digit algorithm. The format is inferred from the digit
|
|
293
|
+
* count (8, 12, or 13) once spaces and hyphens are stripped.
|
|
294
|
+
*/
|
|
295
|
+
declare function validateBarcode(input: string): BarcodeValidationResult | {
|
|
296
|
+
error: string;
|
|
297
|
+
};
|
|
239
298
|
|
|
299
|
+
type units_AmortizationRow = AmortizationRow;
|
|
240
300
|
type units_AspectRatioResult = AspectRatioResult;
|
|
241
301
|
declare const units_BASE_LABELS: typeof BASE_LABELS;
|
|
242
302
|
declare const units_BASE_PREFIXES: typeof BASE_PREFIXES;
|
|
243
303
|
declare const units_BYTE_UNITS: typeof BYTE_UNITS;
|
|
304
|
+
type units_BarcodeFormat = BarcodeFormat;
|
|
305
|
+
type units_BarcodeValidationResult = BarcodeValidationResult;
|
|
244
306
|
type units_BaseConvertResult = BaseConvertResult;
|
|
245
307
|
type units_ByteConvertResult = ByteConvertResult;
|
|
246
308
|
type units_ByteUnit = ByteUnit;
|
|
@@ -254,7 +316,9 @@ type units_CardValidationResult = CardValidationResult;
|
|
|
254
316
|
type units_Dimensions = Dimensions;
|
|
255
317
|
type units_FilePermissions = FilePermissions;
|
|
256
318
|
type units_FormatOptions = FormatOptions;
|
|
319
|
+
type units_IbanValidationResult = IbanValidationResult;
|
|
257
320
|
type units_IpConversion = IpConversion;
|
|
321
|
+
type units_LoanResult = LoanResult;
|
|
258
322
|
type units_NotationStyle = NotationStyle;
|
|
259
323
|
type units_NumberBase = NumberBase;
|
|
260
324
|
type units_Permission = Permission;
|
|
@@ -266,6 +330,7 @@ declare const units_autoFormat: typeof autoFormat;
|
|
|
266
330
|
declare const units_bumpVersion: typeof bumpVersion;
|
|
267
331
|
declare const units_calcAspectRatio: typeof calcAspectRatio;
|
|
268
332
|
declare const units_calcSubnet: typeof calcSubnet;
|
|
333
|
+
declare const units_calculateLoan: typeof calculateLoan;
|
|
269
334
|
declare const units_compareSemver: typeof compareSemver;
|
|
270
335
|
declare const units_convert: typeof convert;
|
|
271
336
|
declare const units_convertBytes: typeof convertBytes;
|
|
@@ -310,10 +375,12 @@ declare const units_scaleByWidth: typeof scaleByWidth;
|
|
|
310
375
|
declare const units_sortVersions: typeof sortVersions;
|
|
311
376
|
declare const units_splitSubnet: typeof splitSubnet;
|
|
312
377
|
declare const units_symbolicToPermissions: typeof symbolicToPermissions;
|
|
378
|
+
declare const units_validateBarcode: typeof validateBarcode;
|
|
313
379
|
declare const units_validateCardNumber: typeof validateCardNumber;
|
|
380
|
+
declare const units_validateIban: typeof validateIban;
|
|
314
381
|
declare const units_viewportToPx: typeof viewportToPx;
|
|
315
382
|
declare namespace units {
|
|
316
|
-
export { type units_AspectRatioResult as AspectRatioResult, units_BASE_LABELS as BASE_LABELS, units_BASE_PREFIXES as BASE_PREFIXES, units_BYTE_UNITS as BYTE_UNITS, type units_BaseConvertResult as BaseConvertResult, type units_ByteConvertResult as ByteConvertResult, type units_ByteUnit as ByteUnit, units_COMMON_CURRENCIES as COMMON_CURRENCIES, units_COMMON_LOCALES as COMMON_LOCALES, units_COMMON_PERMISSIONS as COMMON_PERMISSIONS, units_COMMON_RATIOS as COMMON_RATIOS, units_COMMON_SIZES as COMMON_SIZES, units_COMMON_VIEWPORTS as COMMON_VIEWPORTS, type units_CardValidationResult as CardValidationResult, type units_Dimensions as Dimensions, type units_FilePermissions as FilePermissions, type units_FormatOptions as FormatOptions, type units_IpConversion as IpConversion, type units_NotationStyle as NotationStyle, type units_NumberBase as NumberBase, type units_Permission as Permission, type units_PxConvertResult as PxConvertResult, type units_SemverVersion as SemverVersion, type units_SubnetInfo as SubnetInfo, type units_ViewportConvertResult as ViewportConvertResult, units_autoFormat as autoFormat, units_bumpVersion as bumpVersion, units_calcAspectRatio as calcAspectRatio, units_calcSubnet as calcSubnet, units_compareSemver as compareSemver, units_convert as convert, units_convertBytes as convertBytes, units_convertIp as convertIp, units_coverBox as coverBox, units_decimalToIp as decimalToIp, units_decimalToIpCidr as decimalToIpCidr, units_describePermissions as describePermissions, units_fitIntoBox as fitIntoBox, units_formatNumber as formatNumber, units_formatValue as formatValue, units_formatVwValue as formatVwValue, units_formatWithSeparator as formatWithSeparator, units_gcd as gcd, units_ipFromBinary as ipFromBinary, units_ipFromDecimal as ipFromDecimal, units_ipFromHex as ipFromHex, units_ipToBinary as ipToBinary, units_ipToDecimal as ipToDecimal, units_ipToDecimalCidr as ipToDecimalCidr, units_ipToHex as ipToHex, units_ipToOctal as ipToOctal, units_isValid as isValid, units_isValidCidr as isValidCidr, units_isValidIp as isValidIp, units_isValidIpv4 as isValidIpv4, units_octalToPermissions as octalToPermissions, units_parseFileSize as parseFileSize, units_parseInput as parseInput, units_parseNumberString as parseNumberString, units_parseSemver as parseSemver, units_permissionsToChmod as permissionsToChmod, units_permissionsToOctal as permissionsToOctal, units_permissionsToSymbolic as permissionsToSymbolic, units_ptToPx as ptToPx, units_pxToAll as pxToAll, units_pxToViewport as pxToViewport, units_remToPx as remToPx, units_satisfiesRange as satisfiesRange, units_scaleByHeight as scaleByHeight, units_scaleByWidth as scaleByWidth, units_sortVersions as sortVersions, units_splitSubnet as splitSubnet, units_symbolicToPermissions as symbolicToPermissions, units_validateCardNumber as validateCardNumber, units_viewportToPx as viewportToPx };
|
|
383
|
+
export { type units_AmortizationRow as AmortizationRow, type units_AspectRatioResult as AspectRatioResult, units_BASE_LABELS as BASE_LABELS, units_BASE_PREFIXES as BASE_PREFIXES, units_BYTE_UNITS as BYTE_UNITS, type units_BarcodeFormat as BarcodeFormat, type units_BarcodeValidationResult as BarcodeValidationResult, type units_BaseConvertResult as BaseConvertResult, type units_ByteConvertResult as ByteConvertResult, type units_ByteUnit as ByteUnit, units_COMMON_CURRENCIES as COMMON_CURRENCIES, units_COMMON_LOCALES as COMMON_LOCALES, units_COMMON_PERMISSIONS as COMMON_PERMISSIONS, units_COMMON_RATIOS as COMMON_RATIOS, units_COMMON_SIZES as COMMON_SIZES, units_COMMON_VIEWPORTS as COMMON_VIEWPORTS, type units_CardValidationResult as CardValidationResult, type units_Dimensions as Dimensions, type units_FilePermissions as FilePermissions, type units_FormatOptions as FormatOptions, type units_IbanValidationResult as IbanValidationResult, type units_IpConversion as IpConversion, type units_LoanResult as LoanResult, type units_NotationStyle as NotationStyle, type units_NumberBase as NumberBase, type units_Permission as Permission, type units_PxConvertResult as PxConvertResult, type units_SemverVersion as SemverVersion, type units_SubnetInfo as SubnetInfo, type units_ViewportConvertResult as ViewportConvertResult, units_autoFormat as autoFormat, units_bumpVersion as bumpVersion, units_calcAspectRatio as calcAspectRatio, units_calcSubnet as calcSubnet, units_calculateLoan as calculateLoan, units_compareSemver as compareSemver, units_convert as convert, units_convertBytes as convertBytes, units_convertIp as convertIp, units_coverBox as coverBox, units_decimalToIp as decimalToIp, units_decimalToIpCidr as decimalToIpCidr, units_describePermissions as describePermissions, units_fitIntoBox as fitIntoBox, units_formatNumber as formatNumber, units_formatValue as formatValue, units_formatVwValue as formatVwValue, units_formatWithSeparator as formatWithSeparator, units_gcd as gcd, units_ipFromBinary as ipFromBinary, units_ipFromDecimal as ipFromDecimal, units_ipFromHex as ipFromHex, units_ipToBinary as ipToBinary, units_ipToDecimal as ipToDecimal, units_ipToDecimalCidr as ipToDecimalCidr, units_ipToHex as ipToHex, units_ipToOctal as ipToOctal, units_isValid as isValid, units_isValidCidr as isValidCidr, units_isValidIp as isValidIp, units_isValidIpv4 as isValidIpv4, units_octalToPermissions as octalToPermissions, units_parseFileSize as parseFileSize, units_parseInput as parseInput, units_parseNumberString as parseNumberString, units_parseSemver as parseSemver, units_permissionsToChmod as permissionsToChmod, units_permissionsToOctal as permissionsToOctal, units_permissionsToSymbolic as permissionsToSymbolic, units_ptToPx as ptToPx, units_pxToAll as pxToAll, units_pxToViewport as pxToViewport, units_remToPx as remToPx, units_satisfiesRange as satisfiesRange, units_scaleByHeight as scaleByHeight, units_scaleByWidth as scaleByWidth, units_sortVersions as sortVersions, units_splitSubnet as splitSubnet, units_symbolicToPermissions as symbolicToPermissions, units_validateBarcode as validateBarcode, units_validateCardNumber as validateCardNumber, units_validateIban as validateIban, units_viewportToPx as viewportToPx };
|
|
317
384
|
}
|
|
318
385
|
|
|
319
|
-
export {
|
|
386
|
+
export { ipToBinary as $, type AmortizationRow as A, BASE_LABELS as B, COMMON_CURRENCIES as C, type Dimensions as D, convert as E, type FilePermissions as F, convertBytes as G, convertIp as H, type IbanValidationResult as I, coverBox as J, decimalToIp as K, type LoanResult as L, decimalToIpCidr as M, type NotationStyle as N, describePermissions as O, type Permission as P, fitIntoBox as Q, formatNumber as R, type SemverVersion as S, formatValue as T, formatVwValue as U, type ViewportConvertResult as V, formatWithSeparator as W, gcd as X, ipFromBinary as Y, ipFromDecimal as Z, ipFromHex as _, type AspectRatioResult as a, ipToDecimal as a0, ipToDecimalCidr as a1, ipToHex as a2, ipToOctal as a3, isValid as a4, isValidCidr as a5, isValidIp as a6, isValidIpv4 as a7, octalToPermissions as a8, parseFileSize as a9, parseInput as aa, parseNumberString as ab, parseSemver as ac, permissionsToChmod as ad, permissionsToOctal as ae, permissionsToSymbolic as af, ptToPx as ag, pxToAll as ah, pxToViewport as ai, remToPx as aj, satisfiesRange as ak, scaleByHeight as al, scaleByWidth as am, sortVersions as an, splitSubnet as ao, symbolicToPermissions as ap, validateBarcode as aq, validateCardNumber as ar, validateIban as as, viewportToPx as at, BASE_PREFIXES as b, BYTE_UNITS as c, type BarcodeFormat as d, type BarcodeValidationResult as e, type BaseConvertResult as f, type ByteConvertResult as g, type ByteUnit as h, COMMON_LOCALES as i, COMMON_PERMISSIONS as j, COMMON_RATIOS as k, COMMON_SIZES as l, COMMON_VIEWPORTS as m, type CardValidationResult as n, type FormatOptions as o, type IpConversion as p, type NumberBase as q, type PxConvertResult as r, type SubnetInfo as s, autoFormat as t, units as u, bumpVersion as v, calcAspectRatio as w, calcSubnet as x, calculateLoan as y, compareSemver as z };
|