@mapomodule/utils 2.0.0-beta.1 → 2.0.0-beta.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.
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Format a byte count as a human-readable string (ported from Mapo v1).
3
+ *
4
+ * @param bytes Number of bytes.
5
+ * @param si Use metric (powers of 1000, "kB/MB") instead of binary (powers of 1024, "KiB/MiB"). Default `false`.
6
+ * @param dp Decimal places. Default `1`.
7
+ */
8
+ export function humanFileSize(bytes, si = false, dp = 1) {
9
+ const thresh = si ? 1000 : 1024;
10
+ if (Math.abs(bytes) < thresh) {
11
+ return `${bytes} B`;
12
+ }
13
+ const units = si
14
+ ? ["kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
15
+ : ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
16
+ let u = -1;
17
+ const r = 10 ** dp;
18
+ let value = bytes;
19
+ do {
20
+ value /= thresh;
21
+ ++u;
22
+ } while (Math.round(Math.abs(value) * r) / r >= thresh &&
23
+ u < units.length - 1);
24
+ return `${value.toFixed(dp)} ${units[u]}`;
25
+ }
26
+ /**
27
+ * Convert a string into a URL-safe slug: lowercase, accents stripped,
28
+ * non-alphanumerics collapsed into single dashes (ported from Mapo v1).
29
+ * Camomilla folder payloads require a `slug` derived from the title.
30
+ */
31
+ export function slugify(str) {
32
+ let s = (str ?? "").trim().toLowerCase();
33
+ const from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
34
+ const to = "aaaaeeeeiiiioooouuuunc------";
35
+ for (let i = 0; i < from.length; i++) {
36
+ s = s.replaceAll(from.charAt(i), to.charAt(i));
37
+ }
38
+ return s
39
+ .replace(/[^a-z0-9 -]/g, "")
40
+ .replace(/\s+/g, "-")
41
+ .replace(/-+/g, "-");
42
+ }
43
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,CAAC;IAC7D,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAEhC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC;QAC7B,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,EAAE;QACd,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAClD,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACX,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAEnB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,GAAG,CAAC;QACF,KAAK,IAAI,MAAM,CAAC;QAChB,EAAE,CAAC,CAAC;IACN,CAAC,QACC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM;QAC7C,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EACpB;IAEF,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAA8B;IACpD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEzC,MAAM,IAAI,GAAG,8BAA8B,CAAC;IAC5C,MAAM,EAAE,GAAG,8BAA8B,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAC;SACL,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;SAC3B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ export { deepClone, isFile, isBlob, isFileOrBlob, findPropPaths, filesInObject,
3
3
  export { getNestedValue, setNestedValue, setNestedValueMutating, } from "./nestedValue.js";
4
4
  export { objectDiff } from "./objectDiff.js";
5
5
  export { formatDate } from "./formatDate.js";
6
+ export { humanFileSize, slugify } from "./formatters.js";
6
7
  export { debounce } from "./debounce.js";
7
8
  export { slotNamespace } from "./slotNamespace.js";
8
9
  export { buildRouteTree, calcMaxMenuNestDepth } from "./menuHelpers.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,SAAS,EACT,MAAM,EACN,MAAM,EACN,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,SAAS,EACT,MAAM,EACN,MAAM,EACN,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Format a byte count as a human-readable string (ported from Mapo v1).
3
+ *
4
+ * @param bytes Number of bytes.
5
+ * @param si Use metric (powers of 1000, "kB/MB") instead of binary (powers of 1024, "KiB/MiB"). Default `false`.
6
+ * @param dp Decimal places. Default `1`.
7
+ */
8
+ export declare function humanFileSize(bytes: number, si?: boolean, dp?: number): string;
9
+ /**
10
+ * Convert a string into a URL-safe slug: lowercase, accents stripped,
11
+ * non-alphanumerics collapsed into single dashes (ported from Mapo v1).
12
+ * Camomilla folder payloads require a `slug` derived from the title.
13
+ */
14
+ export declare function slugify(str: string | null | undefined): string;
15
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/formatters.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,UAAQ,EAAE,EAAE,SAAI,GAAG,MAAM,CAuBvE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAa9D"}
@@ -3,6 +3,7 @@ export { deepClone, isFile, isBlob, isFileOrBlob, findPropPaths, filesInObject,
3
3
  export { getNestedValue, setNestedValue, setNestedValueMutating, } from "./nestedValue.js";
4
4
  export { objectDiff } from "./objectDiff.js";
5
5
  export { formatDate } from "./formatDate.js";
6
+ export { humanFileSize, slugify } from "./formatters.js";
6
7
  export { debounce } from "./debounce.js";
7
8
  export { slotNamespace } from "./slotNamespace.js";
8
9
  export { buildRouteTree, calcMaxMenuNestDepth } from "./menuHelpers.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,SAAS,EACT,MAAM,EACN,MAAM,EACN,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,SAAS,EACT,MAAM,EACN,MAAM,EACN,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxE,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChF,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapomodule/utils",
3
- "version": "2.0.0-beta.1",
3
+ "version": "2.0.0-beta.2",
4
4
  "description": "Mapo typed utilities",
5
5
  "type": "module",
6
6
  "license": "MIT",