bit-byte-bit 0.0.0-stage → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +24 -2
  2. package/assets/bg/blue.mp4 +0 -0
  3. package/assets/bg/green.mp4 +0 -0
  4. package/assets/bg/poster.jpg +0 -0
  5. package/assets/bg/teal.mp4 +0 -0
  6. package/assets/fonts/auge-bold.otf +0 -0
  7. package/assets/fonts/auge-regular.otf +0 -0
  8. package/assets/fonts/auge-semibold.otf +0 -0
  9. package/assets/fonts/inter-var.ttf +0 -0
  10. package/assets/fonts/jetbrains-mono-var.ttf +0 -0
  11. package/assets/fonts/pacifico.ttf +0 -0
  12. package/assets/fonts/space-grotesk-var.ttf +0 -0
  13. package/assets/logos/bit-byte-bit-backup.svg +48 -0
  14. package/assets/logos/bit-byte-bit.svg +19 -0
  15. package/assets/site/backup/Pacifico-Regular-95szj24p.ttf +0 -0
  16. package/assets/site/backup/auge-bold-vywa1g7b.otf +0 -0
  17. package/assets/site/backup/auge-regular-hz0spgka.otf +0 -0
  18. package/assets/site/backup/auge-semibold-td2xkdwf.otf +0 -0
  19. package/assets/site/backup/copium-meme.png +0 -0
  20. package/assets/site/backup/engine/controller.api.js +1344 -0
  21. package/assets/site/backup/engine/controller.inject.js +511 -0
  22. package/assets/site/backup/engine/controller.sw.js +418 -0
  23. package/assets/site/backup/engine/corridor.js +13215 -0
  24. package/assets/site/backup/engine/corridor.wasm +0 -0
  25. package/assets/site/backup/site-backup.css +1 -0
  26. package/assets/site/backup/site-backup.js +74 -0
  27. package/assets/site/backup/sw.js +224 -0
  28. package/assets/site/index.html +113 -0
  29. package/assets/site/site.css +226 -0
  30. package/assets/site/site.js +188 -0
  31. package/index.cjs +83 -0
  32. package/index.d.ts +14 -0
  33. package/package.json +29 -4
@@ -0,0 +1,188 @@
1
+ /* bit-byte-bit site bundle — docs demo with bundled helpers */
2
+ (function () {
3
+ "use strict";
4
+
5
+ var DEC_UNITS = ["B", "KB", "MB", "GB", "TB", "PB"];
6
+ var BIN_UNITS = ["B", "KiB", "MiB", "GiB", "TiB", "PiB"];
7
+
8
+ function formatBytes(bytes, opts) {
9
+ opts = opts || {};
10
+ var decimals = opts.decimals === undefined ? 1 : opts.decimals;
11
+ var binary = !!opts.binary;
12
+ var base = opts.base || (binary ? 1024 : 1000);
13
+ var units = binary ? BIN_UNITS : DEC_UNITS;
14
+ var n = Number(bytes);
15
+ if (!isFinite(n) || n < 0) return "0 B";
16
+ if (n === 0) return "0 B";
17
+ var i = Math.min(Math.floor(Math.log(n) / Math.log(base)), units.length - 1);
18
+ if (n < base) i = 0;
19
+ var v = n / Math.pow(base, i);
20
+ var s = v >= 100 || i === 0 ? String(Math.round(v)) : v.toFixed(decimals).replace(/\.0+$/, "");
21
+ return s + " " + units[i];
22
+ }
23
+
24
+ function parseBytes(input) {
25
+ if (typeof input === "number") return input;
26
+ if (typeof input !== "string") return NaN;
27
+ var m = input.trim().match(/^([\d.]+)\s*(b|bytes?|bit|bits?|kb|kib|mb|mib|gb|gib|tb|tib|pb|pib)$/i);
28
+ if (!m) return NaN;
29
+ var n = parseFloat(m[1]);
30
+ if (!isFinite(n) || n < 0) return NaN;
31
+ var u = m[2].toLowerCase();
32
+ var table = {
33
+ b: 1, byte: 1, bytes: 1, bit: 0.125, bits: 0.125,
34
+ kb: 1e3, kib: 1024, mb: 1e6, mib: 1048576,
35
+ gb: 1e9, gib: 1073741824, tb: 1e12, tib: 1099511627776,
36
+ pb: 1e15, pib: 1125899906842624,
37
+ };
38
+ return n * (table[u] || 1);
39
+ }
40
+
41
+ function bitsToBytes(bits) { return Number(bits) / 8; }
42
+ function bytesToBits(bytes) { return Math.round(Number(bytes) * 8); }
43
+ function formatBits(bits, opts) { return formatBytes(bitsToBytes(bits), opts); }
44
+
45
+ function bytesToHex(bytes) {
46
+ var arr = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
47
+ var out = "";
48
+ for (var i = 0; i < arr.length; i++) out += arr[i].toString(16).padStart(2, "0");
49
+ return out;
50
+ }
51
+
52
+ function hexToBytes(hex) {
53
+ var h = String(hex).replace(/^0x/i, "");
54
+ if (h.length % 2 || /[^0-9a-f]/i.test(h)) return new Uint8Array(0);
55
+ var out = new Uint8Array(h.length / 2);
56
+ for (var i = 0; i < out.length; i++) out[i] = parseInt(h.substr(i * 2, 2), 16);
57
+ return out;
58
+ }
59
+
60
+ function crc32(buf) {
61
+ var bytes = buf instanceof Uint8Array ? buf : new Uint8Array(buf);
62
+ var crc = 0xffffffff;
63
+ for (var i = 0; i < bytes.length; i++) {
64
+ crc ^= bytes[i];
65
+ for (var j = 0; j < 8; j++) crc = (crc >>> 1) ^ (0xedb88320 & -(crc & 1));
66
+ }
67
+ return (crc ^ 0xffffffff) >>> 0;
68
+ }
69
+
70
+ function randomBytes(len) {
71
+ var out = new Uint8Array(len);
72
+ crypto.getRandomValues(out);
73
+ return out;
74
+ }
75
+
76
+ var API = [
77
+ ["formatBytes", "formatBytes(n, opts?)", "Human-readable sizes: 1.5 KB.", "sizes"],
78
+ ["formatBits", "formatBits(n, opts?)", "Same, for bit counts.", "sizes"],
79
+ ["parseBytes", "parseBytes(str)", "\"2 MiB\" / \"512 kb\" to a number.", "sizes"],
80
+ ["bytesToBits", "bytesToBits(n)", "Bytes to bits.", "convert"],
81
+ ["bitsToBytes", "bitsToBytes(n)", "Bits to bytes.", "convert"],
82
+ ["bytesToHex", "bytesToHex(buf)", "Bytes to lowercase hex.", "hex"],
83
+ ["hexToBytes", "hexToBytes(str)", "Hex string to Uint8Array.", "hex"],
84
+ ["crc32", "crc32(buf)", "CRC-32 checksum.", "checksums"],
85
+ ["randomBytes", "randomBytes(len)", "Crypto-random Uint8Array.", "generate"],
86
+ ];
87
+
88
+ var GROUP_LABEL = { sizes: "sizes", convert: "conversion", hex: "hex", checksums: "checksums", generate: "generate" };
89
+
90
+ function esc(s) {
91
+ return String(s).replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
92
+ }
93
+
94
+ function mount() {
95
+ var tbody = document.getElementById("api-rows");
96
+ if (tbody) {
97
+ var lastGroup = null;
98
+ API.forEach(function (row) {
99
+ if (GROUP_LABEL[row[3]] !== lastGroup) {
100
+ lastGroup = GROUP_LABEL[row[3]];
101
+ var h = document.createElement("tr");
102
+ var hc = document.createElement("td");
103
+ hc.colSpan = 3;
104
+ hc.className = "group";
105
+ hc.textContent = lastGroup;
106
+ h.appendChild(hc);
107
+ tbody.appendChild(h);
108
+ }
109
+ var tr = document.createElement("tr");
110
+ tr.innerHTML =
111
+ '<td class="name">' + esc(row[0]) + "</td>" +
112
+ '<td class="sig">' + esc(row[1]) + "</td>" +
113
+ '<td class="what">' + esc(row[2]) + "</td>";
114
+ tbody.appendChild(tr);
115
+ });
116
+ }
117
+
118
+ var set = function (id, text) {
119
+ var el = document.getElementById(id);
120
+ if (el) el.textContent = text;
121
+ };
122
+
123
+ set(
124
+ "demo-cn",
125
+ "formatBytes(1536) => " + formatBytes(1536) + "\n" +
126
+ "formatBytes(1536, { binary: true }) => " + formatBytes(1536, { binary: true }) + "\n" +
127
+ "formatBytes(248291048) => " + formatBytes(248291048)
128
+ );
129
+
130
+ set(
131
+ "demo-fmt",
132
+ 'parseBytes("2 MiB") => ' + parseBytes("2 MiB") + "\n" +
133
+ 'parseBytes("512 kb") => ' + parseBytes("512 kb") + "\n" +
134
+ 'parseBytes("1.5 GB") => ' + parseBytes("1.5 GB")
135
+ );
136
+
137
+ set(
138
+ "demo-time",
139
+ "bytesToBits(256) => " + bytesToBits(256) + " bits\n" +
140
+ "bitsToBytes(1024) => " + bitsToBytes(1024) + " bytes\n" +
141
+ "formatBits(1e9) => " + formatBits(1e9)
142
+ );
143
+
144
+ set(
145
+ "demo-deb",
146
+ "bytesToHex([255, 0, 171, 16]) => " + bytesToHex([255, 0, 171, 16]) + "\n" +
147
+ "crc32(\"hello\") => " + crc32(new TextEncoder().encode("hello")) + "\n" +
148
+ "randomBytes(8).length => " + randomBytes(8).length
149
+ );
150
+
151
+ var btn = document.getElementById("copy-install");
152
+ if (btn) {
153
+ btn.addEventListener("click", function () {
154
+ var text = "npm install bit-byte-bit";
155
+ var done = function () {
156
+ btn.textContent = "copied";
157
+ btn.classList.add("done");
158
+ setTimeout(function () {
159
+ btn.textContent = "copy";
160
+ btn.classList.remove("done");
161
+ }, 1400);
162
+ };
163
+ if (navigator.clipboard && navigator.clipboard.writeText) {
164
+ navigator.clipboard.writeText(text).then(done, fallback);
165
+ } else {
166
+ fallback();
167
+ }
168
+ function fallback() {
169
+ var ta = document.createElement("textarea");
170
+ ta.value = text;
171
+ ta.style.position = "fixed";
172
+ ta.style.opacity = "0";
173
+ document.body.appendChild(ta);
174
+ ta.select();
175
+ try { document.execCommand("copy"); } catch (e) {}
176
+ document.body.removeChild(ta);
177
+ done();
178
+ }
179
+ });
180
+ }
181
+ }
182
+
183
+ if (document.readyState === "loading") {
184
+ document.addEventListener("DOMContentLoaded", mount);
185
+ } else {
186
+ mount();
187
+ }
188
+ })();
package/index.cjs ADDED
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ const DEC_UNITS = ["B", "KB", "MB", "GB", "TB", "PB"];
4
+ const BIN_UNITS = ["B", "KiB", "MiB", "GiB", "TiB", "PiB"];
5
+
6
+ function formatBytes(bytes, opts = {}) {
7
+ const { decimals = 1, binary = false, base = binary ? 1024 : 1000 } = opts;
8
+ const units = binary ? BIN_UNITS : DEC_UNITS;
9
+ const n = Number(bytes);
10
+ if (!isFinite(n) || n < 0) return "0 B";
11
+ if (n === 0) return "0 B";
12
+ let i = Math.min(Math.floor(Math.log(n) / Math.log(base)), units.length - 1);
13
+ if (n < base) i = 0;
14
+ const v = n / Math.pow(base, i);
15
+ const s = v >= 100 || i === 0 ? String(Math.round(v)) : v.toFixed(decimals).replace(/\.0+$/, "");
16
+ return `${s} ${units[i]}`;
17
+ }
18
+
19
+ function parseBytes(input) {
20
+ if (typeof input === "number") return input;
21
+ if (typeof input !== "string") return NaN;
22
+ const m = input.trim().match(/^([\d.]+)\s*(b|bytes?|bit|bits?|kb|kib|mb|mib|gb|gib|tb|tib|pb|pib)$/i);
23
+ if (!m) return NaN;
24
+ const n = parseFloat(m[1]);
25
+ if (!isFinite(n) || n < 0) return NaN;
26
+ const u = m[2].toLowerCase();
27
+ const table = {
28
+ b: 1, byte: 1, bytes: 1, bit: 0.125, bits: 0.125,
29
+ kb: 1e3, kib: 1024, mb: 1e6, mib: 1048576,
30
+ gb: 1e9, gib: 1073741824, tb: 1e12, tib: 1099511627776, pb: 1e15, pib: 1125899906842624,
31
+ };
32
+ return n * (table[u] || 1);
33
+ }
34
+
35
+ function bytesToBits(bytes) {
36
+ return Math.round(Number(bytes) * 8);
37
+ }
38
+
39
+ function bitsToBytes(bits) {
40
+ return Number(bits) / 8;
41
+ }
42
+
43
+ function formatBits(bits, opts = {}) {
44
+ return formatBytes(bitsToBytes(bits), opts);
45
+ }
46
+
47
+ function bytesToHex(bytes) {
48
+ const arr = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
49
+ let out = "";
50
+ for (let i = 0; i < arr.length; i++) out += arr[i].toString(16).padStart(2, "0");
51
+ return out;
52
+ }
53
+
54
+ function hexToBytes(hex) {
55
+ const h = String(hex).replace(/^0x/i, "");
56
+ if (h.length % 2 || /[^0-9a-f]/i.test(h)) return new Uint8Array(0);
57
+ const out = new Uint8Array(h.length / 2);
58
+ for (let i = 0; i < out.length; i++) out[i] = parseInt(h.substr(i * 2, 2), 16);
59
+ return out;
60
+ }
61
+
62
+ function crc32(buf) {
63
+ const bytes = buf instanceof Uint8Array ? buf : new Uint8Array(buf);
64
+ let crc = 0xffffffff;
65
+ for (let i = 0; i < bytes.length; i++) {
66
+ crc ^= bytes[i];
67
+ for (let j = 0; j < 8; j++) crc = (crc >>> 1) ^ (0xedb88320 & -(crc & 1));
68
+ }
69
+ return (crc ^ 0xffffffff) >>> 0;
70
+ }
71
+
72
+ function randomBytes(len) {
73
+ const out = new Uint8Array(len);
74
+ const c = globalThis.crypto || require("crypto").webcrypto;
75
+ c.getRandomValues(out);
76
+ return out;
77
+ }
78
+
79
+ module.exports = {
80
+ formatBytes, parseBytes, formatBits,
81
+ bytesToBits, bitsToBytes, bytesToHex, hexToBytes,
82
+ crc32, randomBytes,
83
+ };
package/index.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export interface FormatBytesOptions {
2
+ decimals?: number;
3
+ binary?: boolean;
4
+ base?: number;
5
+ }
6
+ export declare function formatBytes(bytes: number, opts?: FormatBytesOptions): string;
7
+ export declare function parseBytes(input: string | number): number;
8
+ export declare function formatBits(bits: number, opts?: FormatBytesOptions): string;
9
+ export declare function bytesToBits(bytes: number): number;
10
+ export declare function bitsToBytes(bits: number): number;
11
+ export declare function bytesToHex(bytes: Uint8Array | ArrayBuffer | number[]): string;
12
+ export declare function hexToBytes(hex: string): Uint8Array;
13
+ export declare function crc32(buf: Uint8Array | ArrayBuffer): number;
14
+ export declare function randomBytes(len: number): Uint8Array;
package/package.json CHANGED
@@ -1,6 +1,31 @@
1
1
  {
2
2
  "name": "bit-byte-bit",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "2.1.2",
4
+ "description": "Small, dependency-free utilities for bytes, bits, hex, and data sizes.",
5
+ "main": "index.cjs",
6
+ "types": "index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./index.d.ts",
10
+ "import": "./index.cjs",
11
+ "require": "./index.cjs"
12
+ }
13
+ },
14
+ "files": [
15
+ "index.cjs",
16
+ "index.d.ts",
17
+ "README.md",
18
+ "assets"
19
+ ],
20
+ "keywords": [
21
+ "bytes",
22
+ "bits",
23
+ "hex",
24
+ "formatBytes",
25
+ "crc32",
26
+ "zero-dependency"
27
+ ],
28
+ "license": "MIT",
29
+ "engines": { "node": ">=14" },
30
+ "sideEffects": false
31
+ }