dphelper 4.6.0 → 4.6.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 (170) hide show
  1. package/COPYRIGHT.md +6 -6
  2. package/FUNDING.yml +12 -12
  3. package/LICENSE.md +21 -21
  4. package/README.md +637 -397
  5. package/SECURITY.md +26 -26
  6. package/SUMMARY.md +83 -83
  7. package/index.cjs +1 -1
  8. package/index.d.ts +1 -1
  9. package/index.js +1 -1
  10. package/llms.txt +515 -73
  11. package/modules/ai.cjs +1 -1
  12. package/modules/ai.d.ts +11 -11
  13. package/modules/ai.js +1 -1
  14. package/modules/anchor.cjs +1 -1
  15. package/modules/anchor.d.ts +6 -6
  16. package/modules/anchor.js +1 -1
  17. package/modules/array.cjs +1 -1
  18. package/modules/array.d.ts +21 -21
  19. package/modules/array.js +1 -1
  20. package/modules/audio.cjs +1 -1
  21. package/modules/audio.d.ts +10 -10
  22. package/modules/audio.js +1 -1
  23. package/modules/avoid.cjs +1 -1
  24. package/modules/avoid.d.ts +2 -2
  25. package/modules/avoid.js +1 -1
  26. package/modules/biometric.cjs +1 -1
  27. package/modules/biometric.d.ts +14 -14
  28. package/modules/biometric.js +1 -1
  29. package/modules/browser.cjs +1 -1
  30. package/modules/browser.d.ts +10 -10
  31. package/modules/browser.js +1 -1
  32. package/modules/check.cjs +1 -1
  33. package/modules/check.d.ts +4 -4
  34. package/modules/check.js +1 -1
  35. package/modules/color.cjs +1 -1
  36. package/modules/color.d.ts +6 -6
  37. package/modules/color.js +1 -1
  38. package/modules/compress.cjs +1 -1
  39. package/modules/compress.d.ts +13 -13
  40. package/modules/compress.js +1 -1
  41. package/modules/cookie.cjs +1 -1
  42. package/modules/cookie.d.ts +12 -12
  43. package/modules/cookie.js +1 -1
  44. package/modules/coords.cjs +1 -1
  45. package/modules/coords.d.ts +8 -8
  46. package/modules/coords.js +1 -1
  47. package/modules/credits.cjs +1 -1
  48. package/modules/credits.d.ts +11 -11
  49. package/modules/credits.js +1 -1
  50. package/modules/date.cjs +1 -1
  51. package/modules/date.d.ts +25 -25
  52. package/modules/date.js +1 -1
  53. package/modules/disable.cjs +1 -1
  54. package/modules/disable.d.ts +8 -8
  55. package/modules/disable.js +1 -1
  56. package/modules/dispatch.cjs +1 -1
  57. package/modules/dispatch.d.ts +4 -4
  58. package/modules/dispatch.js +1 -1
  59. package/modules/elements.cjs +1 -1
  60. package/modules/elements.d.ts +3 -3
  61. package/modules/elements.js +1 -1
  62. package/modules/events.cjs +1 -1
  63. package/modules/events.d.ts +6 -6
  64. package/modules/events.js +1 -1
  65. package/modules/fetch.cjs +1 -1
  66. package/modules/fetch.d.ts +15 -15
  67. package/modules/fetch.js +1 -1
  68. package/modules/form.cjs +1 -1
  69. package/modules/form.d.ts +13 -13
  70. package/modules/form.js +1 -1
  71. package/modules/format.cjs +1 -1
  72. package/modules/format.d.ts +3 -3
  73. package/modules/format.js +1 -1
  74. package/modules/i18n.cjs +1 -1
  75. package/modules/i18n.d.ts +11 -11
  76. package/modules/i18n.js +1 -1
  77. package/modules/image.cjs +1 -1
  78. package/modules/image.d.ts +13 -13
  79. package/modules/image.js +1 -1
  80. package/modules/json.cjs +1 -1
  81. package/modules/json.d.ts +8 -8
  82. package/modules/json.js +1 -1
  83. package/modules/load.cjs +1 -1
  84. package/modules/load.d.ts +8 -8
  85. package/modules/load.js +1 -1
  86. package/modules/logging.cjs +1 -1
  87. package/modules/logging.d.ts +8 -8
  88. package/modules/logging.js +1 -1
  89. package/modules/math.cjs +1 -1
  90. package/modules/math.d.ts +13 -13
  91. package/modules/math.js +1 -1
  92. package/modules/memory.cjs +1 -1
  93. package/modules/memory.d.ts +3 -3
  94. package/modules/memory.js +1 -1
  95. package/modules/navigation.cjs +1 -1
  96. package/modules/navigation.d.ts +4 -4
  97. package/modules/navigation.js +1 -1
  98. package/modules/net.cjs +1 -1
  99. package/modules/net.d.ts +10 -10
  100. package/modules/net.js +1 -1
  101. package/modules/objects.cjs +1 -1
  102. package/modules/objects.d.ts +15 -15
  103. package/modules/objects.js +1 -1
  104. package/modules/path.cjs +1 -1
  105. package/modules/path.d.ts +4 -4
  106. package/modules/path.js +1 -1
  107. package/modules/promise.cjs +1 -1
  108. package/modules/promise.d.ts +3 -3
  109. package/modules/promise.js +1 -1
  110. package/modules/sanitize.cjs +1 -1
  111. package/modules/sanitize.d.ts +2 -2
  112. package/modules/sanitize.js +1 -1
  113. package/modules/screen.cjs +1 -1
  114. package/modules/screen.d.ts +11 -11
  115. package/modules/screen.js +1 -1
  116. package/modules/scrollbar.cjs +1 -1
  117. package/modules/scrollbar.d.ts +9 -9
  118. package/modules/scrollbar.js +1 -1
  119. package/modules/security.cjs +1 -1
  120. package/modules/security.d.ts +15 -15
  121. package/modules/security.js +1 -1
  122. package/modules/shortcut.cjs +1 -1
  123. package/modules/shortcut.d.ts +2 -2
  124. package/modules/shortcut.js +1 -1
  125. package/modules/socket.cjs +1 -1
  126. package/modules/socket.d.ts +13 -13
  127. package/modules/socket.js +1 -1
  128. package/modules/sse.cjs +1 -1
  129. package/modules/sse.d.ts +8 -8
  130. package/modules/sse.js +1 -1
  131. package/modules/svg.cjs +1 -1
  132. package/modules/svg.d.ts +12 -12
  133. package/modules/svg.js +1 -1
  134. package/modules/sync.cjs +1 -1
  135. package/modules/sync.d.ts +13 -13
  136. package/modules/sync.js +1 -1
  137. package/modules/system.cjs +1 -1
  138. package/modules/system.d.ts +2 -2
  139. package/modules/system.js +1 -1
  140. package/modules/text.cjs +1 -1
  141. package/modules/text.d.ts +13 -13
  142. package/modules/text.js +1 -1
  143. package/modules/timer.cjs +1 -1
  144. package/modules/timer.d.ts +3 -3
  145. package/modules/timer.js +1 -1
  146. package/modules/tools.cjs +1 -1
  147. package/modules/tools.d.ts +5 -5
  148. package/modules/tools.js +1 -1
  149. package/modules/translators.cjs +1 -1
  150. package/modules/translators.d.ts +2 -2
  151. package/modules/translators.js +1 -1
  152. package/modules/triggers.cjs +1 -1
  153. package/modules/triggers.d.ts +43 -43
  154. package/modules/triggers.js +1 -1
  155. package/modules/types.cjs +1 -1
  156. package/modules/types.d.ts +5 -5
  157. package/modules/types.js +1 -1
  158. package/modules/ui.cjs +1 -1
  159. package/modules/ui.d.ts +3 -3
  160. package/modules/ui.js +1 -1
  161. package/modules/window.cjs +1 -1
  162. package/modules/window.d.ts +9 -9
  163. package/modules/window.js +1 -1
  164. package/modules/worker.cjs +1 -1
  165. package/modules/worker.d.ts +16 -16
  166. package/modules/worker.js +1 -1
  167. package/package.json +2 -2
  168. package/sbom.json +10 -15
  169. package/types/dphelper.d.ts +546 -546
  170. package/types/global.d.ts +8 -8
package/README.md CHANGED
@@ -1,397 +1,637 @@
1
- # [dphelper](https://npmjs.com/package/dphelper)
2
-
3
- ![dpHelper](https://raw.githubusercontent.com/passariello/container/refs/heads/main/dphelper/assets/images/banner.svg)
4
-
5
- > **The supercharged toolkit for modern web development, AI engineering & DevTools.**
6
-
7
- [![version](https://img.shields.io/npm/v/dphelper.svg)](https://npmjs.org/package/dphelper)
8
- [![downloads](https://img.shields.io/npm/dm/dphelper.svg)](https://npmjs.org/package/dphelper)
9
-
10
- ![Node.js](https://img.shields.io/badge/Node.js-gray?logo=node.js)
11
- ![tsup](https://img.shields.io/badge/tsup-gray?logo=esbuild)
12
-
13
- ![React](https://img.shields.io/badge/React-gray?logo=React)
14
- ![TypeScript](https://img.shields.io/badge/TypeScript-gray?logo=typescript)
15
- ![Javascript](https://img.shields.io/badge/Javascript-gray?logo=Javascript)
16
-
17
- ![Vitest](https://img.shields.io/badge/Vitest-gray?logo=vitest)
18
- ![OXlint](https://img.shields.io/badge/Oxlint-gray?logo=oxc)
19
- [![E2E with Playwright](https://img.shields.io/badge/E2E%20with-Playwright-2ECC71.svg)](https://playwright.dev/)
20
-
21
- ![AI Ready](https://img.shields.io/badge/AI-Ready-brightgreen?logo=openai)
22
- ![TOON](https://img.shields.io/badge/TOON-Format-blue)
23
-
24
- ---
25
-
26
- ## Table of Contents
27
-
28
- 1. [About](#about)
29
- 2. [Installation](#installation)
30
- 3. [AI Power User Guide](#ai-power-user-guide)
31
- 4. [Modular Architecture](#modular-architecture)
32
- 5. [Browser Extension (Chrome/Edge)](#browser-extension-chromeedge)
33
- 6. [Environment Compatibility](#environment-compatibility)
34
- 7. [Security](#security)
35
-
36
- ---
37
-
38
- ## About
39
-
40
- **dphelper** is a powerful, zero-dependency utility library that brings together **production-ready tools** for web developers, AI engineers, and DevTools creators.
41
-
42
- Think of it as your **universal toolbox** - from DOM manipulation to cryptographic operations, from real-time WebSocket handling to AI-powered token optimization. No more juggling multiple packages. One import, infinite possibilities.
43
-
44
- ### Why dphelper?
45
-
46
- - **⚡ Zero Dependencies** - Pure vanilla JavaScript/TypeScript. No bloat, no surprises.
47
- - **🤖 AI-First Design** - Built for LLM apps with TOON optimization, token counting, and RAG support.
48
- - **🌐 Universal** - Works in browser, Node.js, Bun, and Deno.
49
- - **🔒 Type-Safe** - Full TypeScript definitions auto-generated for every tool.
50
- - **📦 Tiny Bundle** - Only ~171KB minified, tree-shakeable.
51
- - **🔐 Security First** - NIST/NSA compliant, CNSA algorithms, PBKDF2 310k iterations
52
-
53
- > [!NOTE]
54
- > **Network Access:** This library includes networking primitives (`fetch`, `sse`, `socket`) by design for modern web development. Callers are responsible for validating and sanitizing URLs before use. See the [Security](#security) section for best practices.
55
-
56
- > *"dphelper is what you'd build if you combined lodash, socket.io, and an AI SDK - but lighter."*
57
-
58
- ---
59
-
60
- ## State and Store removed from dpHelper
61
-
62
- > [!IMPORTANT]
63
- > dpHelper do not integrate state management directly anymore
64
- >
65
- > Application state is currently handled through **Memorio** or **RGS**.
66
-
67
- If you need to use state/store management please consider:
68
-
69
- - [Memorio](http://www.npmjs.com/package/memorio) - State and Store Manager
70
- - [Argis RGS](https://www.npmjs.com/package/@biglogic/rgs) - Enterprise Lever State Manager
71
-
72
- ---
73
-
74
- ## Installation
75
-
76
- ```shell
77
- npm i dphelper --save-dev
78
- ```
79
-
80
- ### Usage
81
-
82
- Import it precisely **once** in your entry point (e.g., `index.js`, `main.ts`, or `App.tsx`):
83
-
84
- ```js
85
- // IMPORT ONCE AT YOUR APP ENTRY POINT
86
-
87
- import "dphelper";
88
- ```
89
-
90
- ### Modular imports
91
-
92
- For a smaller bundle or cleaner tree-shaking, import only the tool you need. Each modular entry point exposes the tool both as a **named export** and on the **global `dphelper`** object, so existing global-usage code keeps working unchanged.
93
-
94
- ```ts
95
- import { sanitize } from "dphelper/sanitize"
96
- import { format } from "dphelper/format"
97
- import { fetch } from "dphelper/fetch"
98
- import { security } from "dphelper/security"
99
-
100
- sanitize.html("<strong>safe text</strong>")
101
- format.currency(1234.56, "en-US", "USD")
102
- await fetch.get("https://api.example.com")
103
- security.ulid()
104
- ```
105
-
106
- The same tool is also available on the global after import:
107
-
108
- ```ts
109
- import "dphelper/format"
110
-
111
- // Identical to the named export above
112
- dphelper.format.currency(1234.56, "en-US", "USD")
113
- ```
114
-
115
- > [!NOTE]
116
- > Every tool under `tools/` is published as `dphelper/<tool>` (e.g. `dphelper/array`, `dphelper/i18n`, `dphelper/worker`). The full list is generated automatically from the `tools/` directory at build time, so adding a new tool creates its modular entry point with no extra configuration.
117
-
118
- > [!IMPORTANT]
119
- > **TypeScript + `resolvePackageJsonExports`:** Modular subpath imports (e.g. `import { sanitize } from "dphelper/sanitize"`) are resolved through the `exports` map in `dphelper`'s `package.json`. If your `tsconfig.json` sets `"resolvePackageJsonExports": false`, TypeScript will fall back to physical path resolution and fail with `Cannot find module 'dphelper/<tool>' or its corresponding type declarations` (TS2307), because the tool actually lives under `modules/<tool>` rather than at the package root.
120
- >
121
- > To fix it, either:
122
- > - keep `"resolvePackageJsonExports": true` (the default for `moduleResolution: "bundler"`), or
123
- > - import from the physical path: `import { sanitize } from "dphelper/modules/sanitize"`.
124
- >
125
- > Note: this is a TypeScript-only resolution issue. Vite and other bundlers resolve the subpath correctly at build/runtime via the `exports` map regardless of that flag.
126
-
127
- For plain HTML/CDN:
128
-
129
- ```html
130
- <script src="https://unpkg.com/dphelper/dphelper.js"></script>
131
-
132
- <!-- Optional check -->
133
- <script>
134
- console.debug(dphelper.version); // latest version
135
- console.debug(dphelper.isBrowser); // true
136
- </script>
137
- ```
138
-
139
- ---
140
-
141
- ## ⚙️ Web Worker Module
142
-
143
- ```javascript
144
- // Create worker from file
145
- const worker = dphelper.worker.create('worker.js', {
146
- onmessage: (e) => console.log(e.data)
147
- });
148
-
149
- // Create inline worker
150
- const inlineWorker = dphelper.worker.createInline(`
151
- self.onmessage = e => postMessage(e.data * 2);
152
- `);
153
-
154
- // Worker pool for parallel processing
155
- const pool = dphelper.worker.pool('worker.js', 4);
156
- const results = await dphelper.worker.poolExec(pool, [1, 2, 3, 4]);
157
-
158
- // SharedWorker for cross-tab communication
159
- const shared = dphelper.worker.shared('worker.js', { name: 'my-shared' });
160
- ```
161
-
162
- ---
163
-
164
- ## 🌍 i18n Module
165
-
166
- ```javascript
167
- // Set locale
168
- dphelper.i18n.setLocale('it');
169
-
170
- // Add translations
171
- dphelper.i18n.addTranslations('it', {
172
- hello: 'Ciao {name}!',
173
- items: '{count, plural, one{# item} other{# items}}'
174
- });
175
-
176
- // Translate with interpolation
177
- dphelper.i18n.t('hello', { name: 'World' }); // "Ciao World!"
178
-
179
- // Pluralize
180
- dphelper.i18n.pluralize(5, { one: 'item', other: 'items' }); // "items"
181
-
182
- // Format number/currency
183
- dphelper.i18n.number(1234.56, 'de-DE', { style: 'currency', currency: 'EUR' });
184
-
185
- // Relative time
186
- dphelper.i18n.relativeTime(Date.now() - 3600000); // "1 hour ago"
187
- ```
188
- ---
189
-
190
- ## 🗜️ Compression Module
191
-
192
- ```javascript
193
- // Gzip compression
194
- const compressed = await dphelper.compress.gzip('Hello World');
195
- const decompressed = await dphelper.compress.gunzip(compressed);
196
-
197
- // Base64 encoding
198
- const encoded = dphelper.compress.base64Encode('Hello');
199
- const decoded = dphelper.compress.base64Decode(encoded);
200
-
201
- // URL encoding
202
- const urlEncoded = dphelper.compress.urlEncode('Hello World!');
203
- const urlDecoded = dphelper.compress.urlDecode(urlEncoded);
204
-
205
- // HTML encoding
206
- const htmlEncoded = dphelper.compress.htmlEncode('<script>');
207
- const htmlDecoded = dphelper.compress.htmlDecode('&lt;script&gt;');
208
- ```
209
-
210
- ---
211
-
212
- ## 🔐 Biometric Module (WebAuthn)
213
-
214
- ```javascript
215
- // Check availability
216
- const available = dphelper.biometric.isAvailable();
217
-
218
- // Get support details
219
- const support = dphelper.biometric.getWebAuthnSupport();
220
-
221
- // Register credential
222
- const { success, credentialId } = await dphelper.biometric.register('user123');
223
-
224
- // Authenticate
225
- const { success } = await dphelper.biometric.authenticate('user123');
226
-
227
- // Check specific sensor
228
- const hasFingerprint = await dphelper.biometric.isSensorAvailable('fingerprint');
229
- ```
230
-
231
- ---
232
-
233
- ## AI Power User Guide
234
-
235
- The new `dphelper.ai` module is designed for the modern AI stack (LLMs, RAG, Vector Search).
236
-
237
- ```javascript
238
- // TOON: The ultimate JSON alternative for prompts
239
- const toonData = dphelper.ai.toon(myJsonObject);
240
- // Efficient, compact, and deterministic.
241
-
242
- // 📏 Context-Aware Token Counting
243
- const tokens = dphelper.ai.tokenCount(myJsonObject);
244
- // Automatically calculates tokens based on the optimal TOON representation.
245
-
246
- // 🧩 Smart Chunker (RAG Ready)
247
- const chunks = dphelper.ai.chunker(longText, { size: 1000, overlap: 200 });
248
-
249
- // 🔍 Semantic Similarity
250
- const score = dphelper.ai.similarity(embeddingA, embeddingB);
251
-
252
- // 🧠 Reasoning Extractor (DeepSeek/O1 support)
253
- const { reasoning, content } = dphelper.ai.extractReasoning(rawAiReply);
254
-
255
- // 📸 The AI Black Box (Snapshot)
256
- const appStateToon = dphelper.ai.snapshot();
257
- // Generates a complete app "mental dump" (URL, gState, Logs) optimized for LLMs.
258
- ```
259
-
260
- ---
261
-
262
- ## Modular Architecture
263
-
264
- Every tool in `dphelper` is now a self-contained module. Our new build system automatically:
265
-
266
- 1. Scans the `tools/` directory.
267
- 2. Generates dynamic imports for the core.
268
- 3. Synchronizes TypeScript interfaces in `dphelper.d.ts`.
269
-
270
- This ensures that adding new tools is instantaneous and always documented with full Intellisense support.
271
-
272
- ---
273
-
274
- ## 🔄 UI Mirror & Auto-Recovery
275
-
276
- `dphelper` makes your web app feel like a native desktop application with cross-tab intelligence.
277
-
278
- ```javascript
279
- // ⚓ Auto-Recovery: Save scroll and input values across reloads/crashes
280
- dphelper.UI.anchorContext();
281
-
282
- // 💓 Pulse: Real-time event bus between all open tabs (No Backend needed!)
283
- const bus = dphelper.sync.pulse('my-app', (msg) => {
284
- console.debug('Received from another tab:', msg);
285
- });
286
- bus.emit({ action: 'theme-change', value: 'dark' });
287
-
288
- // 🔒 Interlock: Monitor how many tabs of your app are active
289
- dphelper.browser.interlock((count) => {
290
- console.debug(`Active tabs: ${count}`);
291
- });
292
-
293
- // 🌊 SSE: Modern streaming (Support for POST & Headers)
294
- const stream = dphelper.sse.open('/api/ai', {
295
- method: 'POST',
296
- headers: { 'Authorization': 'Bearer ...' },
297
- body: JSON.stringify({ prompt: 'Hello AI' })
298
- });
299
-
300
- stream.on('message', (data) => console.debug('Chunk:', data));
301
- stream.on('error', (err) => console.error('Stream failure:', err));
302
- ```
303
-
304
- ---
305
-
306
- ## Browser Extension (Chrome/Edge)
307
-
308
- ![dphelper Banner](https://raw.githubusercontent.com/passariello/container/refs/heads/main/dphelper/assets/images/screenshot.png)
309
-
310
- Manage your `dphelper` environment, monitor memory usage, and access documentation directly from your browser.
311
-
312
- - [Download for Chrome](https://chrome.google.com/webstore/detail/dphelper-manager-dev-tool/oppppldaoknfddeikfloonnialijngbk)
313
- - [Download for Edge](https://microsoftedge.microsoft.com/addons/detail/dphelper-manager-dev-to/kphabkbdpaljlfagldhojilhfammepnk)
314
-
315
- ---
316
-
317
- ## Environment Compatibility
318
-
319
- `dphelper` tools are classified by their execution target to ensure stability across the stack.
320
-
321
- | Icon | Type | Description |
322
- | :--- | :--- | :--- |
323
- | 🌐 | **Client** | Browser only (requires DOM, window, or navigator). |
324
- | 🖥️ | **Server** | Node.js / Bun / Deno only (access to process, fs, etc). |
325
- | 🧬 | **Isomorphic** | Universal. Works in both Browser and Server (AI, Logic, Math). |
326
-
327
- ### Core Module Status
328
-
329
- - `dphelper.ai`: 🧬 Isomorphic
330
- - `dphelper.fetch`: 🧬 Isomorphic (Supports Node 18+)
331
- - `dphelper.sse`: 🌐 Client (Streaming fetch)
332
- - `dphelper.socket`: 🌐 Client (WebSocket)
333
- - `dphelper.sync`: 🌐 Client (BroadcastChannel)
334
- - `dphelper.UI`: 🌐 Client (DOM based)
335
-
336
- ---
337
-
338
- ## Security
339
-
340
- dphelper follows **NIST SP 800-53** and **NSA** security standards:
341
-
342
- ### Cryptography (CNSA Compliant)
343
- - **AES-256-GCM** encryption
344
- - **SHA-256** only (SHA-1 deprecated)
345
- - **PBKDF2** with 310,000 iterations (OWASP 2023)
346
-
347
- ### Network Security
348
- - HTTPS required for `fetch` and `SSE`
349
- - TLS enforced for `socket` (wss:// only)
350
- - URL validation built-in
351
-
352
- > [!IMPORTANT]
353
- > **For Library Users:** Network functions require **input validation** by the caller. Always sanitize URLs before passing to dphelper networking tools.
354
-
355
- ```javascript
356
- // Correct
357
- const safeUrl = dphelper.sanitize.url(userInput);
358
- await dphelper.fetch.get(safeUrl);
359
-
360
- // Never do this
361
- await dphelper.fetch.get(userInput); // ❌ Unvalidated
362
- ```
363
-
364
- ### Compliance
365
- - 100% NIST/NSA compliant
366
- - No known vulnerabilities
367
- - Automated security scanning in CI
368
-
369
- ---
370
-
371
- ### 🧬 The Core Architectural Ecosystem
372
-
373
- `dphelper` operates as a completely stateless, high-performance toolkit. To ensure clean separation of concerns and prevent race conditions or state contamination across asynchronous modules, state management has been extracted into dedicated standalone libraries.
374
-
375
- Always map your application architecture according to the following layout:
376
-
377
- | Layer & Purpose | Package | Operational Target | Design Philosophy |
378
- | :--- | :--- | :--- | :--- |
379
- | **Stateless Utilities & AI Tools** | `dphelper` | Isomorphic (Browser, Node.js, Bun, Deno) | **Zero-Dependency Universal Core.** Packs 303 production-ready modules including `ai` (TOON optimization, smart chunking), `worker` multi-threaded pools, `biometric` WebAuthn, `i18n`, desktop-grade cross-tab `sync.pulse`, and NIST-compliant cryptography. |
380
- | **Simple Global State** | `memorio` | Application-Wide Runtime | **Global Singleton Pattern.** High-performance, lightweight state management that eliminates boilerplate. It registers globally upon initial import and removes the need for custom context providers, actions, or dispatch files. |
381
- | **Enterprise State Architecture** | `Argis RGS` | Distributed / Complex SaaS Systems | **Heavy-Duty Reactive Structure.** Built for multi-module, enterprise-grade applications requiring strict state rules, relational data synchronization, and heavy concurrent data pipelines. |
382
-
383
- ---
384
-
385
- ### ⚠️ Integration Best Practices for AI & Humans
386
-
387
- 1. **Do Not Bundle State Logic in dphelper:** Any legacy codebase referencing `dphelper.store` or namespace getters/setters must be migrated to `memorio` or `Argis RGS`.
388
- 2. **Single-Entry Side Effect:** `dphelper` is designed to be imported exactly once in your root file (`import "dphelper";`). It will automatically map its 303 tools safely to the global scope.
389
- 3. **State Integrity:** When building micro-frontends or multi-tab web applications, use `dphelper.sync` primitives to handle cross-tab events, while allowing `memorio` to manage the underlying atomic state memory.
390
-
391
- ## License
392
-
393
- MIT License
394
-
395
- ## Credits
396
-
397
- Copyrigth (c) [Dario Passariello](https://dario.passariello.ca/)
1
+ # [dphelper](https://npmjs.com/package/dphelper)
2
+
3
+ ![dpHelper](https://raw.githubusercontent.com/passariello/container/refs/heads/main/dphelper/assets/images/banner.svg)
4
+
5
+ > **The supercharged toolkit for modern web development, AI engineering & DevTools.**
6
+
7
+ **The stateless, zero-dependency capability toolkit for Web, Node.js, Bun, Deno and AI systems.**
8
+
9
+ **Modules.**
10
+ **One namespace.**
11
+ **One consistent API.**
12
+
13
+ ---
14
+
15
+ [![version](https://img.shields.io/npm/v/dphelper.svg)](https://npmjs.org/package/dphelper)
16
+ [![downloads](https://img.shields.io/npm/dm/dphelper.svg)](https://npmjs.org/package/dphelper)
17
+
18
+ ![Node.js](https://img.shields.io/badge/Node.js-gray?logo=node.js)
19
+ ![tsup](https://img.shields.io/badge/tsup-gray?logo=esbuild)
20
+ ![React](https://img.shields.io/badge/React-gray?logo=React)
21
+ ![TypeScript](https://img.shields.io/badge/TypeScript-gray?logo=typescript)
22
+ ![JavaScript](https://img.shields.io/badge/JavaScript-gray?logo=Javascript)
23
+ ![Vitest](https://img.shields.io/badge/Vitest-gray?logo=vitest)
24
+ ![Oxlint](https://img.shields.io/badge/Oxlint-gray?logo=oxc)
25
+ [![E2E with Playwright](https://img.shields.io/badge/E2E%20with-Playwright-2ECC71.svg)](https://playwright.dev/)
26
+ ![AI Ready](https://img.shields.io/badge/AI-Ready-brightgreen?logo=openai)
27
+ ![TOON](https://img.shields.io/badge/TOON-Format-blue)
28
+
29
+ ---
30
+
31
+ ## Table of Contents
32
+
33
+ 1. [What is dphelper?](#what-is-dphelper)
34
+ 2. [Why dphelper?](#why-dphelper)
35
+ 3. [Installation](#installation)
36
+ 4. [The Capability Model](#the-capability-model)
37
+ 5. [AI Power User Guide](#ai-power-user-guide)
38
+ 6. [Modular Architecture](#modular-architecture)
39
+ 7. [Web Worker Module](#web-worker-module)
40
+ 8. [UI Mirror & Auto-Recovery](#ui-mirror--auto-recovery)
41
+ 9. [Browser Extension](#browser-extension)
42
+ 10. [Environment Compatibility](#environment-compatibility)
43
+ 11. [Security](#security)
44
+ 12. [State Architecture](#state-architecture)
45
+ 13. [License](#license)
46
+
47
+ ---
48
+
49
+ ## What is dphelper?
50
+
51
+ **dphelper** is a **stateless, zero-dependency capability toolkit** for modern JavaScript and TypeScript applications.
52
+
53
+ It provides a consistent collection of production-oriented capabilities for:
54
+
55
+ * Web development
56
+ * Node.js, Bun and Deno
57
+ * AI and LLM applications
58
+ * DevTools
59
+ * Browser applications
60
+ * Security and cryptography
61
+ * Networking
62
+ * Workers and parallel processing
63
+ * Data transformation
64
+ * Internationalization
65
+ * Runtime utilities
66
+
67
+ Instead of maintaining many small utility dependencies, applications can expose the capabilities they need through a single, consistent API.
68
+
69
+ ### The core idea
70
+
71
+ A **capability** is a self-contained operation exposed through a predictable namespace and API.
72
+
73
+ For example:
74
+
75
+ ```javascript
76
+ dphelper.security.ulid();
77
+ dphelper.format.currency(1234.56, "en-US", "USD");
78
+ dphelper.ai.tokenCount(data);
79
+ dphelper.worker.create("worker.js");
80
+ ```
81
+
82
+ The same capabilities can also be imported individually when modularity and tree-shaking are preferred.
83
+
84
+ ---
85
+
86
+ ## Why dphelper?
87
+
88
+ ### ⚡ Zero Dependencies
89
+
90
+ Pure JavaScript/TypeScript with no runtime dependency chain.
91
+
92
+ ### 🧩 Modular
93
+
94
+ Every tool is exposed as an independent module and can be imported separately.
95
+
96
+ ### 🌐 Universal
97
+
98
+ Tools are classified according to their execution environment and can target:
99
+
100
+ * Browser
101
+ * Node.js
102
+ * Bun
103
+ * Deno
104
+ * Isomorphic environments
105
+
106
+ ### 🔒 Type-Safe
107
+
108
+ TypeScript definitions are generated and synchronized with the available tools.
109
+
110
+ ### 📦 Compact
111
+
112
+ Approximately **171 KB minified**, with modular entry points available for smaller application bundles.
113
+
114
+ ### 🤖 AI Ready
115
+
116
+ AI-oriented capabilities include:
117
+
118
+ * TOON structured representation
119
+ * Context-aware token counting
120
+ * RAG-oriented chunking
121
+ * Semantic similarity
122
+ * AI response processing
123
+ * Runtime snapshots optimized for LLM consumption
124
+
125
+ ### 🔐 Security-Oriented
126
+
127
+ Uses established cryptographic primitives including:
128
+
129
+ * AES-256-GCM
130
+ * SHA-256
131
+ * PBKDF2
132
+
133
+ Security-sensitive functionality should always be evaluated according to the application's threat model and deployment environment.
134
+
135
+ > [!NOTE]
136
+ > **Network Access:** `dphelper` includes networking primitives such as `fetch`, `sse` and `socket`. Applications remain responsible for validating and sanitizing externally supplied URLs and other inputs.
137
+
138
+ ---
139
+
140
+ ## Installation
141
+
142
+ ```shell
143
+ npm install dphelper
144
+ ```
145
+
146
+ ### Usage
147
+
148
+ Import the package once at the application entry point when using the global namespace:
149
+
150
+ ```javascript
151
+ // Import once at your application entry point
152
+
153
+ import "dphelper";
154
+ ```
155
+
156
+ After initialization, capabilities are available through the global `dphelper` namespace.
157
+
158
+ ```javascript
159
+ dphelper.format.currency(1234.56, "en-US", "USD");
160
+ dphelper.security.ulid();
161
+ ```
162
+
163
+ ---
164
+
165
+ ## Modular Imports
166
+
167
+ For smaller bundles and explicit dependencies, import individual capabilities:
168
+
169
+ ```typescript
170
+ import { sanitize } from "dphelper/sanitize";
171
+ import { format } from "dphelper/format";
172
+ import { fetch } from "dphelper/fetch";
173
+ import { security } from "dphelper/security";
174
+
175
+ sanitize.html("<strong>safe text</strong>");
176
+
177
+ format.currency(1234.56, "en-US", "USD");
178
+
179
+ await fetch.get("https://api.example.com");
180
+
181
+ security.ulid();
182
+ ```
183
+
184
+ The same capability remains available through the global namespace after importing the module:
185
+
186
+ ```typescript
187
+ import "dphelper/format";
188
+
189
+ dphelper.format.currency(1234.56, "en-US", "USD");
190
+ ```
191
+
192
+ ### Automatic Module Generation
193
+
194
+ Every tool under `tools/` is published as a corresponding package subpath:
195
+
196
+ ```text
197
+ dphelper/array
198
+ dphelper/i18n
199
+ dphelper/worker
200
+ dphelper/security
201
+ dphelper/...
202
+ ```
203
+
204
+ The build system automatically discovers tools and generates their modular entry points and TypeScript interfaces.
205
+
206
+ Adding a tool therefore does not require manually maintaining a separate export registry.
207
+
208
+ ### TypeScript and `resolvePackageJsonExports`
209
+
210
+ Modular subpath imports are resolved through the `exports` map in `dphelper/package.json`.
211
+
212
+ If your `tsconfig.json` explicitly sets:
213
+
214
+ ```json
215
+ {
216
+ "resolvePackageJsonExports": false
217
+ }
218
+ ```
219
+
220
+ TypeScript may fall back to physical path resolution and fail with:
221
+
222
+ ```text
223
+ TS2307: Cannot find module 'dphelper/<tool>'
224
+ ```
225
+
226
+ Keep:
227
+
228
+ ```json
229
+ "resolvePackageJsonExports": true
230
+ ```
231
+
232
+ or use the physical module path when required:
233
+
234
+ ```typescript
235
+ import { sanitize } from "dphelper/modules/sanitize";
236
+ ```
237
+
238
+ This is a TypeScript resolution issue. Modern bundlers such as Vite resolve the package through the `exports` map at build/runtime.
239
+
240
+ ---
241
+
242
+ ## The Capability Model
243
+
244
+ `dphelper` is organized around three architectural principles.
245
+
246
+ ### Stateless
247
+
248
+ `dphelper` does not own application state.
249
+
250
+ Its capabilities perform operations without becoming the authoritative store for application data.
251
+
252
+ ### Modular
253
+
254
+ Each capability is independently addressable.
255
+
256
+ ```text
257
+ dphelper/<capability>
258
+ ```
259
+
260
+ This makes the system easier to compose, test and tree-shake.
261
+
262
+ ### Consistent
263
+
264
+ Capabilities follow a common namespace model:
265
+
266
+ ```text
267
+ dphelper.<domain>.<operation>
268
+ ```
269
+
270
+ For example:
271
+
272
+ ```text
273
+ dphelper.ai.toon()
274
+ dphelper.security.ulid()
275
+ dphelper.i18n.t()
276
+ dphelper.worker.create()
277
+ dphelper.sync.pulse()
278
+ ```
279
+
280
+ This consistency is intended to make capabilities easier to discover, integrate and reason about.
281
+
282
+ ---
283
+
284
+ ## AI Power User Guide
285
+
286
+ The `dphelper.ai` module provides utilities for modern AI applications, including LLM, RAG and vector-oriented workflows.
287
+
288
+ ### TOON
289
+
290
+ Generate a compact structured representation suitable for LLM prompts:
291
+
292
+ ```javascript
293
+ const toonData = dphelper.ai.toon(myJsonObject);
294
+ ```
295
+
296
+ ### Context-Aware Token Counting
297
+
298
+ ```javascript
299
+ const tokens = dphelper.ai.tokenCount(myJsonObject);
300
+ ```
301
+
302
+ Token estimation can take the resulting representation into account rather than treating the original object as the only representation.
303
+
304
+ ### RAG-Oriented Chunking
305
+
306
+ ```javascript
307
+ const chunks = dphelper.ai.chunker(longText, {
308
+ size: 1000,
309
+ overlap: 200
310
+ });
311
+ ```
312
+
313
+ ### Semantic Similarity
314
+
315
+ ```javascript
316
+ const score = dphelper.ai.similarity(
317
+ embeddingA,
318
+ embeddingB
319
+ );
320
+ ```
321
+
322
+ ### Reasoning Extraction
323
+
324
+ ```javascript
325
+ const { reasoning, content } =
326
+ dphelper.ai.extractReasoning(rawAiReply);
327
+ ```
328
+
329
+ Designed to process model responses that expose separate reasoning/content representations.
330
+
331
+ ### AI Runtime Snapshot
332
+
333
+ ```javascript
334
+ const appStateToon = dphelper.ai.snapshot();
335
+ ```
336
+
337
+ The snapshot capability generates a compact runtime representation intended for AI-assisted inspection, debugging and recovery.
338
+
339
+ Depending on the application environment, this can include information such as:
340
+
341
+ * URL
342
+ * runtime/global state
343
+ * application logs
344
+ * relevant runtime context
345
+
346
+ ---
347
+
348
+ ## Modular Architecture
349
+
350
+ Every tool in `dphelper` is maintained as a self-contained module.
351
+
352
+ The build system:
353
+
354
+ 1. Scans the `tools/` directory.
355
+ 2. Generates module entry points.
356
+ 3. Generates dynamic imports for the core.
357
+ 4. Synchronizes TypeScript interfaces.
358
+ 5. Keeps the public API aligned with the available tools.
359
+
360
+ This makes the module system extensible without requiring a manually maintained central registry.
361
+
362
+ ---
363
+
364
+ ## Web Worker Module
365
+
366
+ `dphelper.worker` provides worker creation, inline workers, worker pools and SharedWorker support.
367
+
368
+ ### Worker
369
+
370
+ ```javascript
371
+ const worker = dphelper.worker.create("worker.js", {
372
+ onmessage: (e) => console.log(e.data)
373
+ });
374
+ ```
375
+
376
+ ### Inline Worker
377
+
378
+ ```javascript
379
+ const inlineWorker = dphelper.worker.createInline(`
380
+ self.onmessage = e => postMessage(e.data * 2);
381
+ `);
382
+ ```
383
+
384
+ ### Worker Pool
385
+
386
+ ```javascript
387
+ const pool = dphelper.worker.pool("worker.js", 4);
388
+
389
+ const results = await dphelper.worker.poolExec(
390
+ pool,
391
+ [1, 2, 3, 4]
392
+ );
393
+ ```
394
+
395
+ ### SharedWorker
396
+
397
+ ```javascript
398
+ const shared = dphelper.worker.shared(
399
+ "worker.js",
400
+ { name: "my-shared" }
401
+ );
402
+ ```
403
+
404
+ ---
405
+
406
+ ## UI Mirror & Auto-Recovery
407
+
408
+ `dphelper` provides browser capabilities designed to make web applications behave more like persistent desktop applications.
409
+
410
+ ### Auto-Recovery
411
+
412
+ Persist useful UI context across reloads and crashes:
413
+
414
+ ```javascript
415
+ dphelper.UI.anchorContext();
416
+ ```
417
+
418
+ ### Cross-Tab Event Bus
419
+
420
+ Use `BroadcastChannel`-based synchronization without requiring a backend:
421
+
422
+ ```javascript
423
+ const bus = dphelper.sync.pulse(
424
+ "my-app",
425
+ (msg) => {
426
+ console.debug(
427
+ "Received from another tab:",
428
+ msg
429
+ );
430
+ }
431
+ );
432
+
433
+ bus.emit({
434
+ action: "theme-change",
435
+ value: "dark"
436
+ });
437
+ ```
438
+
439
+ ### Browser Interlock
440
+
441
+ Monitor the number of active application tabs:
442
+
443
+ ```javascript
444
+ dphelper.browser.interlock((count) => {
445
+ console.debug(`Active tabs: ${count}`);
446
+ });
447
+ ```
448
+
449
+ ### Server-Sent Events
450
+
451
+ ```javascript
452
+ const stream = dphelper.sse.open("/api/ai", {
453
+ method: "POST",
454
+ headers: {
455
+ "Authorization": "Bearer ..."
456
+ },
457
+ body: JSON.stringify({
458
+ prompt: "Hello AI"
459
+ })
460
+ });
461
+
462
+ stream.on("message", (data) => {
463
+ console.debug("Chunk:", data);
464
+ });
465
+
466
+ stream.on("error", (err) => {
467
+ console.error("Stream failure:", err);
468
+ });
469
+ ```
470
+
471
+ ---
472
+
473
+ ## Browser Extension
474
+
475
+ The **dphelper Manager** browser extension provides tools for managing the `dphelper` environment, monitoring memory usage and accessing documentation.
476
+
477
+ * [Chrome Web Store](https://chrome.google.com/webstore/detail/dphelper-manager-dev-tool/oppppldaoknfddeikfloonnialijngbk)
478
+ * [Microsoft Edge Add-ons](https://microsoftedge.microsoft.com/addons/detail/dphelper-manager-dev-to/kphabkbdpaljlfagldhojilhfammepnk)
479
+
480
+ ---
481
+
482
+ ## Environment Compatibility
483
+
484
+ Tools are classified according to their execution target.
485
+
486
+ | Type | Description |
487
+ | ----------------- | ------------------------------------------------------------------------------------- |
488
+ | 🌐 **Client** | Browser-only capabilities requiring DOM, `window`, `navigator` or other browser APIs. |
489
+ | 🖥️ **Server** | Node.js, Bun or Deno capabilities requiring server-side APIs. |
490
+ | 🧬 **Isomorphic** | Capabilities designed to work across browser and server environments. |
491
+
492
+ ### Core Module Status
493
+
494
+ | Module | Environment |
495
+ | ----------------- | --------------------------- |
496
+ | `dphelper.ai` | 🧬 Isomorphic |
497
+ | `dphelper.fetch` | 🧬 Isomorphic — Node.js 18+ |
498
+ | `dphelper.sse` | 🌐 Client |
499
+ | `dphelper.socket` | 🌐 Client |
500
+ | `dphelper.sync` | 🌐 Client |
501
+ | `dphelper.UI` | 🌐 Client |
502
+
503
+ ---
504
+
505
+ ## Security
506
+
507
+ Security-sensitive functionality should be evaluated according to the application's own threat model and deployment requirements.
508
+
509
+ ### Cryptography
510
+
511
+ `dphelper` uses established cryptographic primitives including:
512
+
513
+ * **AES-256-GCM**
514
+ * **SHA-256**
515
+ * **PBKDF2**
516
+ * **310,000 PBKDF2 iterations** where applicable
517
+
518
+ These choices are intended to align with widely recognized security guidance; they should not be interpreted as a blanket certification or compliance claim for every application using the library.
519
+
520
+ ### Network Security
521
+
522
+ Networking capabilities include:
523
+
524
+ * HTTPS for `fetch` and SSE where required by the application
525
+ * `wss://` for secure WebSocket connections
526
+ * URL validation capabilities
527
+
528
+ > [!IMPORTANT]
529
+ > **Library users remain responsible for input validation.**
530
+ >
531
+ > Always validate and sanitize externally supplied URLs before passing them to networking capabilities.
532
+
533
+ ```javascript
534
+ const safeUrl = dphelper.sanitize.url(userInput);
535
+
536
+ await dphelper.fetch.get(safeUrl);
537
+ ```
538
+
539
+ Avoid:
540
+
541
+ ```javascript
542
+ await dphelper.fetch.get(userInput);
543
+ ```
544
+
545
+ ### Web Workers
546
+
547
+ Worker APIs execute supplied scripts in the Worker context and therefore require trusted input.
548
+
549
+ Do not pass untrusted user-controlled code directly to:
550
+
551
+ ```javascript
552
+ dphelper.worker.createInline(code);
553
+ dphelper.worker.create(src);
554
+ dphelper.worker.pool(src);
555
+ dphelper.worker.importScripts(worker, scripts);
556
+ ```
557
+
558
+ For example:
559
+
560
+ ```javascript
561
+ // Trusted static worker
562
+ dphelper.worker.create("./my-trusted-worker.js");
563
+
564
+ // Trusted external resource
565
+ dphelper.worker.importScripts(
566
+ worker,
567
+ ["https://cdn.example.com/lib.js"]
568
+ );
569
+ ```
570
+
571
+ Never treat user-supplied code or URLs as trusted merely because they are passed through a library API.
572
+
573
+ ### Security Testing
574
+
575
+ The project uses automated security scanning as part of its development workflow.
576
+
577
+ ---
578
+
579
+ ## State Architecture
580
+
581
+ `dphelper` is intentionally **stateless**.
582
+
583
+ Application state management is separated into dedicated libraries to keep capability execution independent from application state.
584
+
585
+ ### Architecture
586
+
587
+ | Layer | Package | Operational Target | Design Philosophy |
588
+ | ---------------------------------- | ----------- | --------------------------- | ----------------------------------------------- |
589
+ | **Stateless Utilities & AI Tools** | `dphelper` | Browser, Node.js, Bun, Deno | Zero-dependency universal capability layer |
590
+ | **Simple Global State** | `memorio` | Application runtime | Lightweight global state management |
591
+ | **Enterprise State Architecture** | `Argis RGS` | Distributed / complex SaaS | Reactive state and complex data synchronization |
592
+
593
+ ### Why separate state?
594
+
595
+ Keeping application state outside `dphelper` provides a clear separation between:
596
+
597
+ ```text
598
+ CAPABILITIES
599
+
600
+
601
+ dphelper
602
+
603
+ │ stateless operations
604
+
605
+ APPLICATION
606
+
607
+
608
+ STATE
609
+
610
+ ┌───┴────┐
611
+ ▼ ▼
612
+ Memorio RGS
613
+ ```
614
+
615
+ This avoids coupling utility execution to application-specific state ownership.
616
+
617
+ ### Integration Guidance
618
+
619
+ Do not rely on legacy state APIs such as:
620
+
621
+ ```text
622
+ dphelper.store
623
+ ```
624
+
625
+ Migrate state management to the appropriate dedicated state system.
626
+
627
+ For cross-tab communication, `dphelper.sync` can provide the transport/event mechanism while a dedicated state manager remains responsible for application state.
628
+
629
+ ---
630
+
631
+ ## License
632
+
633
+ MIT License
634
+
635
+ ## Credits
636
+
637
+ Copyright (c) [Dario Passariello](https://dario.passariello.ca/)