@sveltebase/utils 0.5.3 → 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 CHANGED
@@ -25,6 +25,7 @@ bun add svelte-sonner
25
25
  - `tryCatch` — run a task with built-in toast/error handling
26
26
  - `timestamps` — generate `createdAt` / `updatedAt` values
27
27
  - `wait` — simple promise-based delay helper
28
+ - `createId` — generate random UUIDs with fallback support
28
29
  - `TryCatchReturn` — shared return type for async helpers
29
30
 
30
31
  ## Exports
@@ -33,6 +34,7 @@ bun add svelte-sonner
33
34
  import {
34
35
  Cookies,
35
36
  createAsync,
37
+ createId,
36
38
  timestamps,
37
39
  tryCatch,
38
40
  wait,
@@ -261,6 +263,26 @@ Useful for:
261
263
 
262
264
  ---
263
265
 
266
+ ## `createId`
267
+
268
+ Generates a version 4 UUID compliant string. It uses `globalThis.crypto.randomUUID()` when available in modern environments, falls back to `globalThis.crypto.getRandomValues()` if available (e.g. in most serverless/edge environments), and has a pure JS `Math.random` fallback for absolute compatibility.
269
+
270
+ ### Example
271
+
272
+ ```ts
273
+ import { createId } from "@sveltebase/utils";
274
+
275
+ const id = createId(); // "e3b0c442-98fc-1c14-9afb-f4c8996fb924"
276
+ ```
277
+
278
+ Useful for:
279
+
280
+ - generating unique client-side element IDs
281
+ - local database key creation (e.g. Dexie/IndexedDB)
282
+ - generating temp keys for list items
283
+
284
+ ---
285
+
264
286
  ## `TryCatchReturn`
265
287
 
266
288
  A shared type for functions used with `createAsync` and `tryCatch`.
package/dist/index.d.ts CHANGED
@@ -22,4 +22,5 @@ export type { TryCatchReturn } from "./async.svelte.js";
22
22
  export declare function tryCatch(task: () => Promise<TryCatchReturn> | TryCatchReturn): Promise<void>;
23
23
  export declare const wait: (ms: number) => Promise<unknown>;
24
24
  export { createAsync } from "./async.svelte.js";
25
+ export declare function createId(): string;
25
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAuCD,eAAO,MAAM,OAAO;cACR,MAAM,SAAS,MAAM,YAAW,aAAa,GAAQ,IAAI;cA6CzD,MAAM,GAAG,MAAM,GAAG,IAAI;iBAYnB,MAAM,YAAW,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAQ,IAAI;CAGjF,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,SAAS,OAAO,EAC1C,UAAU,EAAE,CAAC,GACZ,CAAC,SAAS,IAAI,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAInF;AAED,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,iBAkBlF;AAED,eAAO,MAAM,IAAI,GAAI,IAAI,MAAM,qBAAsD,CAAC;AAEtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAuCD,eAAO,MAAM,OAAO;cACR,MAAM,SAAS,MAAM,YAAW,aAAa,GAAQ,IAAI;cA6CzD,MAAM,GAAG,MAAM,GAAG,IAAI;iBAYnB,MAAM,YAAW,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAQ,IAAI;CAGjF,CAAC;AAEF,wBAAgB,UAAU,CAAC,CAAC,SAAS,OAAO,EAC1C,UAAU,EAAE,CAAC,GACZ,CAAC,SAAS,IAAI,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAInF;AAED,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,iBAkBlF;AAED,eAAO,MAAM,IAAI,GAAI,IAAI,MAAM,qBAAsD,CAAC;AAEtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,wBAAgB,QAAQ,IAAI,MAAM,CAgBjC"}
package/dist/index.js CHANGED
@@ -94,3 +94,18 @@ export async function tryCatch(task) {
94
94
  }
95
95
  export const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
96
96
  export { createAsync } from "./async.svelte.js";
97
+ export function createId() {
98
+ if (typeof globalThis !== "undefined" && globalThis.crypto?.randomUUID) {
99
+ return globalThis.crypto.randomUUID();
100
+ }
101
+ if (typeof globalThis !== "undefined" && globalThis.crypto?.getRandomValues) {
102
+ // Fallback using crypto.getRandomValues (RFC 4122 version 4 UUID compliant)
103
+ return ("" + 1e7 + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) => (c ^ (globalThis.crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16));
104
+ }
105
+ // Fallback using Math.random (works absolutely anywhere)
106
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
107
+ const r = (Math.random() * 16) | 0;
108
+ const v = c === "x" ? r : (r & 0x3) | 0x8;
109
+ return v.toString(16);
110
+ });
111
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltebase/utils",
3
- "version": "0.5.3",
3
+ "version": "1.0.0",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"