dphelper 3.7.1 → 3.7.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.
- package/docs/README.md +385 -0
- package/docs/SUMMARY.md +83 -0
- package/docs/_config.yml +1 -0
- package/docs/markdown/ai.md +345 -0
- package/docs/markdown/anchor.md +156 -0
- package/docs/markdown/array.md +208 -0
- package/docs/markdown/audio.md +113 -0
- package/docs/markdown/avoid.md +53 -0
- package/docs/markdown/biometric.md +338 -0
- package/docs/markdown/browser.md +203 -0
- package/docs/markdown/check.md +65 -0
- package/docs/markdown/color.md +159 -0
- package/docs/markdown/compress.md +310 -0
- package/docs/markdown/cookie.md +115 -0
- package/docs/markdown/coords.md +127 -0
- package/docs/markdown/credits.md +56 -0
- package/docs/markdown/date.md +260 -0
- package/docs/markdown/disable.md +109 -0
- package/docs/markdown/dispatch.md +108 -0
- package/docs/markdown/element.md +53 -0
- package/docs/markdown/event.md +85 -0
- package/docs/markdown/fetch.md +122 -0
- package/docs/markdown/form.md +302 -0
- package/docs/markdown/format.md +122 -0
- package/docs/markdown/i18n.md +292 -0
- package/docs/markdown/image.md +298 -0
- package/docs/markdown/json.md +269 -0
- package/docs/markdown/load.md +133 -0
- package/docs/markdown/logging.md +99 -0
- package/docs/markdown/math.md +172 -0
- package/docs/markdown/memory.md +85 -0
- package/docs/markdown/navigation.md +152 -0
- package/docs/markdown/net.md +60 -0
- package/docs/markdown/obj.md +242 -0
- package/docs/markdown/path.md +46 -0
- package/docs/markdown/promise.md +94 -0
- package/docs/markdown/sanitize.md +118 -0
- package/docs/markdown/screen.md +78 -0
- package/docs/markdown/scrollbar.md +82 -0
- package/docs/markdown/security.md +289 -0
- package/docs/markdown/shortcut.md +100 -0
- package/docs/markdown/socket.md +134 -0
- package/docs/markdown/sse.md +120 -0
- package/docs/markdown/svg.md +167 -0
- package/docs/markdown/sync.md +147 -0
- package/docs/markdown/system.md +78 -0
- package/docs/markdown/terminal.md +73 -0
- package/docs/markdown/text.md +245 -0
- package/docs/markdown/timer.md +98 -0
- package/docs/markdown/tools.md +111 -0
- package/docs/markdown/translators.md +65 -0
- package/docs/markdown/trigger.md +99 -0
- package/docs/markdown/triggers.md +133 -0
- package/docs/markdown/type.md +109 -0
- package/docs/markdown/types.md +102 -0
- package/docs/markdown/ui.md +45 -0
- package/docs/markdown/window.md +211 -0
- package/docs/markdown/worker.md +223 -0
- package/index.cjs +1 -1
- package/index.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# memory
|
|
2
|
+
|
|
3
|
+
Memory and state management.
|
|
4
|
+
|
|
5
|
+
## Functions
|
|
6
|
+
|
|
7
|
+
| Function | Description | Example |
|
|
8
|
+
|----------|-------------|---------|
|
|
9
|
+
| `lock` | Lock a state property | `dphelper.memory.lock('state[key]')` |
|
|
10
|
+
| `unlock` | Unlock a state property | `dphelper.memory.unlock('state[key]')` |
|
|
11
|
+
|
|
12
|
+
## Description
|
|
13
|
+
|
|
14
|
+
State property protection:
|
|
15
|
+
- **Lock** - Make property non-writable and non-configurable
|
|
16
|
+
- **Unlock** - Restore writability and configurability
|
|
17
|
+
- **Global State** - Work with window-level state objects
|
|
18
|
+
|
|
19
|
+
## Usage Examples
|
|
20
|
+
|
|
21
|
+
### Lock State Property
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
// Define global state
|
|
25
|
+
window.myApp = {
|
|
26
|
+
config: { theme: 'dark' },
|
|
27
|
+
user: { name: 'John' }
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// Lock the config
|
|
31
|
+
dphelper.memory.lock('myApp.config');
|
|
32
|
+
|
|
33
|
+
// Try to modify (will fail silently or throw in strict mode)
|
|
34
|
+
myApp.config = {}; // Won't work - locked
|
|
35
|
+
|
|
36
|
+
// Can still modify properties if not locked
|
|
37
|
+
myApp.config.theme = 'light'; // May work depending on implementation
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Unlock State Property
|
|
41
|
+
|
|
42
|
+
```javascript
|
|
43
|
+
// Unlock previously locked property
|
|
44
|
+
dphelper.memory.unlock('myApp.config');
|
|
45
|
+
|
|
46
|
+
// Now can modify
|
|
47
|
+
myApp.config = { theme: 'light' };
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Protect Application State
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
// Create protected app state
|
|
54
|
+
const appState = {
|
|
55
|
+
version: '1.0.0',
|
|
56
|
+
initialized: false,
|
|
57
|
+
data: {}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// Add to window
|
|
61
|
+
window.appState = appState;
|
|
62
|
+
|
|
63
|
+
// Lock critical properties
|
|
64
|
+
dphelper.memory.lock('appState.version'); // Prevent version changes
|
|
65
|
+
dphelper.memory.lock('appState.initialized'); // Prevent re-initialization
|
|
66
|
+
|
|
67
|
+
// Unlock when needed (e.g., updates)
|
|
68
|
+
function updateVersion(newVersion) {
|
|
69
|
+
dphelper.memory.unlock('appState.version');
|
|
70
|
+
appState.version = newVersion;
|
|
71
|
+
dphelper.memory.lock('appState.version');
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Details
|
|
76
|
+
|
|
77
|
+
- **Author:** Dario Passariello
|
|
78
|
+
- **Version:** 0.0.2
|
|
79
|
+
- **Creation Date:** 20230101
|
|
80
|
+
- **Last Modified:** 20230111
|
|
81
|
+
- **Environment:** client (browser)
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
*Automatically generated document*
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# navigation
|
|
2
|
+
|
|
3
|
+
AJAX-based Single Page Application (SPA) navigation engine for seamless page transitions.
|
|
4
|
+
|
|
5
|
+
## Functions
|
|
6
|
+
|
|
7
|
+
| Function | Description | Example |
|
|
8
|
+
|----------|-------------|---------|
|
|
9
|
+
| `ajax` | Initialize SPA navigation engine | `dphelper.navigation.ajax()` |
|
|
10
|
+
| `load` | Load page via AJAX | `dphelper.navigation.load('/about')` |
|
|
11
|
+
|
|
12
|
+
## Description
|
|
13
|
+
|
|
14
|
+
Complete SPA navigation solution:
|
|
15
|
+
- **AJAX Loading** - Load pages without refresh
|
|
16
|
+
- **History Management** - Browser back/forward support
|
|
17
|
+
- **Hash Support** - Scroll to hash elements
|
|
18
|
+
- **XSS Protection** - HTML sanitization
|
|
19
|
+
|
|
20
|
+
## Usage Examples
|
|
21
|
+
|
|
22
|
+
### Initialize SPA Navigation
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
// Initialize on page load
|
|
26
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
27
|
+
dphelper.navigation.ajax();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Now all anchor links will use AJAX navigation
|
|
31
|
+
// <a href="/about">About</a> will load without refresh
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Manual Page Load
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
// Load a page programmatically
|
|
38
|
+
dphelper.navigation.load('/dashboard');
|
|
39
|
+
|
|
40
|
+
// Loads /dashboard content into current page
|
|
41
|
+
// Updates browser history
|
|
42
|
+
// Scrolls to top
|
|
43
|
+
|
|
44
|
+
// With slug normalization
|
|
45
|
+
dphelper.navigation.load('about'); // Loads 'about/'
|
|
46
|
+
dphelper.navigation.load('/contact'); // Loads 'contact/'
|
|
47
|
+
dphelper.navigation.load('home'); // Loads 'home/'
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### How It Works
|
|
51
|
+
|
|
52
|
+
1. **Initialization** - `ajax()` binds all anchor tags
|
|
53
|
+
2. **Click Interception** - Links are converted to AJAX handlers
|
|
54
|
+
3. **Content Loading** - Page content fetched via fetch API
|
|
55
|
+
4. **Content Injection** - Body content replaced (sanitized)
|
|
56
|
+
5. **History Update** - Browser history updated with pushState
|
|
57
|
+
|
|
58
|
+
### HTML Structure
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<!-- Standard links - automatically handled -->
|
|
62
|
+
<nav>
|
|
63
|
+
<a href="/">Home</a>
|
|
64
|
+
<a href="/about">About</a>
|
|
65
|
+
<a href="/contact">Contact</a>
|
|
66
|
+
</nav>
|
|
67
|
+
|
|
68
|
+
<!-- Main content area -->
|
|
69
|
+
<main id="app">
|
|
70
|
+
<!-- Content loaded here -->
|
|
71
|
+
</main>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Hash Navigation
|
|
75
|
+
|
|
76
|
+
```html
|
|
77
|
+
<!-- Scroll to element on page -->
|
|
78
|
+
<a href="#section1">Section 1</a>
|
|
79
|
+
|
|
80
|
+
<!-- Smooth scroll to section -->
|
|
81
|
+
<div id="section1">Content</div>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Security Features
|
|
85
|
+
|
|
86
|
+
- **XSS Prevention** - HTML content is sanitized
|
|
87
|
+
- **Same-origin** - Only same-origin URLs allowed
|
|
88
|
+
- **Open Redirect Prevention** - Validates URL origins
|
|
89
|
+
|
|
90
|
+
## Advanced Usage
|
|
91
|
+
|
|
92
|
+
### Conditional Navigation
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
class SPANavigator {
|
|
96
|
+
constructor() {
|
|
97
|
+
this.init();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
init() {
|
|
101
|
+
dphelper.navigation.ajax();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
navigate(path) {
|
|
105
|
+
dphelper.navigation.load(path);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Programmatic navigation
|
|
109
|
+
goHome() {
|
|
110
|
+
this.navigate('/');
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
goTo(path) {
|
|
114
|
+
this.navigate(path);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const navigator = new SPANavigator();
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Loading State
|
|
122
|
+
|
|
123
|
+
```javascript
|
|
124
|
+
// The loader is automatically added
|
|
125
|
+
// Customize with CSS:
|
|
126
|
+
/*
|
|
127
|
+
.loader {
|
|
128
|
+
position: fixed;
|
|
129
|
+
top: 0;
|
|
130
|
+
left: 0;
|
|
131
|
+
width: 100%;
|
|
132
|
+
height: 100%;
|
|
133
|
+
background: rgba(255,255,255,0.9);
|
|
134
|
+
z-index: 9999;
|
|
135
|
+
display: flex;
|
|
136
|
+
justify-content: center;
|
|
137
|
+
align-items: center;
|
|
138
|
+
}
|
|
139
|
+
*/
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Details
|
|
143
|
+
|
|
144
|
+
- **Author:** Dario Passariello
|
|
145
|
+
- **Version:** 0.0.2
|
|
146
|
+
- **Creation Date:** 20260223
|
|
147
|
+
- **Last Modified:** 20260223
|
|
148
|
+
- **Environment:** Client-side only (browser)
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
*Automatically generated document*
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# net
|
|
2
|
+
|
|
3
|
+
Resilient networking and fetch utilities.
|
|
4
|
+
|
|
5
|
+
## Functions
|
|
6
|
+
|
|
7
|
+
| Function | Description | Example |
|
|
8
|
+
|----------|-------------|---------|
|
|
9
|
+
| `smartFetch` | Fetch with automatic retry | `dphelper.net.smartFetch(url, options)` |
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Network communication utilities:
|
|
14
|
+
- **Smart Fetch** - Automatic retry with exponential backoff
|
|
15
|
+
- **Resilience** - Handle transient network errors
|
|
16
|
+
- **Retry Strategy** - Configurable retry attempts and delays
|
|
17
|
+
|
|
18
|
+
## Usage Examples
|
|
19
|
+
|
|
20
|
+
### Smart Fetch with Retry
|
|
21
|
+
|
|
22
|
+
```javascript
|
|
23
|
+
// Basic smart fetch
|
|
24
|
+
const response = await dphelper.net.smartFetch('/api/data');
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
|
|
27
|
+
// Fetch with options
|
|
28
|
+
const result = await dphelper.net.smartFetch('https://api.example.com', {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: { 'Content-Type': 'application/json' },
|
|
31
|
+
body: JSON.stringify({ key: 'value' })
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### API Error Handling
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
// Robust API calls
|
|
39
|
+
async function fetchUserData(userId) {
|
|
40
|
+
try {
|
|
41
|
+
const response = await dphelper.net.smartFetch(`/api/users/${userId}`);
|
|
42
|
+
return await response.json();
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.error('Failed to fetch user:', error);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Details
|
|
51
|
+
|
|
52
|
+
- **Author:** Dario Passariello & Jo
|
|
53
|
+
- **Version:** 0.0.1
|
|
54
|
+
- **Creation Date:** 20260220
|
|
55
|
+
- **Last Modified:** 20260220
|
|
56
|
+
- **Environment:** both (browser + Node.js)
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
*Automatically generated document*
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# obj (objects)
|
|
2
|
+
|
|
3
|
+
Utilities for JavaScript object manipulation.
|
|
4
|
+
|
|
5
|
+
## Functions
|
|
6
|
+
|
|
7
|
+
| Function | Description | Example |
|
|
8
|
+
|----------|-------------|---------|
|
|
9
|
+
| `replaceNullObjects` | Replace null values with empty strings | `dphelper.obj.replaceNullObjects(obj)` |
|
|
10
|
+
| `serialize` | Serialize objects preserving functions | `dphelper.obj.serialize(obj)` |
|
|
11
|
+
| `deSerialize` | Deserialize objects by processing values | `dphelper.obj.deSerialize(obj)` |
|
|
12
|
+
| `sort` | Sort object by keys | `dphelper.obj.sort(obj)` |
|
|
13
|
+
| `toXML` | Convert object to XML string | `dphelper.obj.toXML(obj)` |
|
|
14
|
+
| `updateByKey` | Update value if key exists | `dphelper.obj.updateByKey(obj, 'key', 'value')` |
|
|
15
|
+
| `parse` | Safe JSON.parse avoiding crashes | `dphelper.obj.parse(str)` |
|
|
16
|
+
| `isObject` | Check if value is non-null object | `dphelper.obj.isObject(val)` |
|
|
17
|
+
| `diff` | Show differences between two objects | `dphelper.obj.diff(obj1, obj2)` |
|
|
18
|
+
| `path` | Create path string from properties | `dphelper.obj.path('prop', ['a','b'])` |
|
|
19
|
+
| `setProps` | Recursively set property descriptors | `dphelper.obj.setProps(obj, {writable: false})` |
|
|
20
|
+
|
|
21
|
+
## Description
|
|
22
|
+
|
|
23
|
+
Advanced JavaScript object manipulation:
|
|
24
|
+
- **Serialization** - Convert objects to JSON/XML, handle functions
|
|
25
|
+
- **Parsing** - Safe JSON parsing with error handling
|
|
26
|
+
- **Comparison** - Find differences between objects
|
|
27
|
+
- **Transformation** - Sort keys, update by key
|
|
28
|
+
- **Property Control** - Set enumerable/writable/configurable
|
|
29
|
+
|
|
30
|
+
## Usage Examples
|
|
31
|
+
|
|
32
|
+
### Replace Null Values
|
|
33
|
+
|
|
34
|
+
```javascript
|
|
35
|
+
// Replace null values with empty strings
|
|
36
|
+
const data = {
|
|
37
|
+
name: 'John',
|
|
38
|
+
email: null,
|
|
39
|
+
phone: null,
|
|
40
|
+
age: 30
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
dphelper.obj.replaceNullObjects(data);
|
|
44
|
+
// Now: { name: 'John', email: '', phone: '', age: 30 }
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Object Serialization
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
// Serialize object (including functions as strings)
|
|
51
|
+
const obj = {
|
|
52
|
+
name: 'test',
|
|
53
|
+
method: function() { return 'hello'; },
|
|
54
|
+
value: 42
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const serialized = dphelper.obj.serialize(obj);
|
|
58
|
+
// Functions are converted to toString()
|
|
59
|
+
|
|
60
|
+
// Deserialize back
|
|
61
|
+
const deserialized = dphelper.obj.deSerialize(serialized);
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Object to XML
|
|
65
|
+
|
|
66
|
+
```javascript
|
|
67
|
+
// Convert JSON to XML
|
|
68
|
+
const data = {
|
|
69
|
+
user: {
|
|
70
|
+
name: 'John',
|
|
71
|
+
email: 'john@example.com',
|
|
72
|
+
address: {
|
|
73
|
+
city: 'NYC',
|
|
74
|
+
zip: '10001'
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const xml = dphelper.obj.toXML(data);
|
|
80
|
+
/*
|
|
81
|
+
<user>
|
|
82
|
+
<name>John</name>
|
|
83
|
+
<email>john@example.com</email>
|
|
84
|
+
<address>
|
|
85
|
+
<city>NYC</city>
|
|
86
|
+
<zip>10001</zip>
|
|
87
|
+
</address>
|
|
88
|
+
</user>
|
|
89
|
+
*/
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Safe JSON Parse
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
// Safe parse - won't crash on invalid JSON
|
|
96
|
+
const validJson = '{"name": "John", "age": 30}';
|
|
97
|
+
const obj = dphelper.obj.parse(validJson);
|
|
98
|
+
// { name: "John", age: 30 }
|
|
99
|
+
|
|
100
|
+
const invalidJson = 'not valid json';
|
|
101
|
+
const result = dphelper.obj.parse(invalidJson);
|
|
102
|
+
// Returns original string, logs error
|
|
103
|
+
|
|
104
|
+
// Use for API responses
|
|
105
|
+
function handleApiResponse(response) {
|
|
106
|
+
return dphelper.obj.parse(response);
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Object Difference
|
|
111
|
+
|
|
112
|
+
```javascript
|
|
113
|
+
// Find differences between two objects
|
|
114
|
+
const obj1 = {
|
|
115
|
+
name: 'John',
|
|
116
|
+
age: 30,
|
|
117
|
+
city: 'NYC'
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const obj2 = {
|
|
121
|
+
name: 'Jane',
|
|
122
|
+
age: 30,
|
|
123
|
+
city: 'LA'
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const differences = dphelper.obj.diff(obj1, obj2);
|
|
127
|
+
/*
|
|
128
|
+
{
|
|
129
|
+
name: { obj1: 'John', obj2: 'Jane' },
|
|
130
|
+
city: { obj1: 'NYC', obj2: 'LA' }
|
|
131
|
+
}
|
|
132
|
+
*/
|
|
133
|
+
|
|
134
|
+
// Use in testing
|
|
135
|
+
function assertObjectsEqual(a, b) {
|
|
136
|
+
const diff = dphelper.obj.diff(a, b);
|
|
137
|
+
if (Object.keys(diff).length > 0) {
|
|
138
|
+
console.error('Differences found:', diff);
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Sort Object Keys
|
|
146
|
+
|
|
147
|
+
```javascript
|
|
148
|
+
// Sort object alphabetically by keys
|
|
149
|
+
const unsorted = {
|
|
150
|
+
z: 1,
|
|
151
|
+
a: 2,
|
|
152
|
+
m: 5,
|
|
153
|
+
b: 3
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const sorted = dphelper.obj.sort(unsorted);
|
|
157
|
+
// { a: 2, b: 3, m: 5, z: 1 }
|
|
158
|
+
|
|
159
|
+
// Useful for consistent JSON stringify
|
|
160
|
+
JSON.stringify(dphelper.obj.sort(unsorted));
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Update By Key
|
|
164
|
+
|
|
165
|
+
```javascript
|
|
166
|
+
// Update value if key exists
|
|
167
|
+
const user = {
|
|
168
|
+
name: 'John',
|
|
169
|
+
email: 'john@example.com'
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
dphelper.obj.updateByKey(user, 'email', 'newemail@example.com');
|
|
173
|
+
// { name: 'John', email: 'newemail@example.com' }
|
|
174
|
+
|
|
175
|
+
dphelper.obj.updateByKey(user, 'phone', '555-1234');
|
|
176
|
+
// Key doesn't exist, no change
|
|
177
|
+
// { name: 'John', email: 'newemail@example.com' }
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Object Path
|
|
181
|
+
|
|
182
|
+
```javascript
|
|
183
|
+
// Create dot-notation path
|
|
184
|
+
const path = dphelper.obj.path('name', ['user', 'profile']);
|
|
185
|
+
// "user.profile.name"
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Set Properties
|
|
189
|
+
|
|
190
|
+
```javascript
|
|
191
|
+
// Make object immutable
|
|
192
|
+
const config = {
|
|
193
|
+
apiUrl: 'https://api.example.com',
|
|
194
|
+
timeout: 5000
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
dphelper.obj.setProps(config, {
|
|
198
|
+
writable: false,
|
|
199
|
+
configurable: false
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// Now config.apiUrl = 'changed'; // Error in strict mode
|
|
203
|
+
|
|
204
|
+
// Make all properties non-enumerable
|
|
205
|
+
const data = { a: 1, b: 2, c: 3 };
|
|
206
|
+
dphelper.obj.setProps(data, { enumerable: false });
|
|
207
|
+
|
|
208
|
+
// for...in won't show these properties
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Is Object Check
|
|
212
|
+
|
|
213
|
+
```javascript
|
|
214
|
+
// Check if value is a plain object
|
|
215
|
+
console.log(dphelper.obj.isObject({})); // true
|
|
216
|
+
console.log(dphelper.obj.isObject({ a: 1 })); // true
|
|
217
|
+
console.log(dphelper.obj.isObject(null)); // false
|
|
218
|
+
console.log(dphelper.obj.isObject([])); // true (arrays are objects!)
|
|
219
|
+
console.log(dphelper.obj.isObject('string')); // false
|
|
220
|
+
console.log(dphelper.obj.isObject(123)); // false
|
|
221
|
+
|
|
222
|
+
// Use in type checking
|
|
223
|
+
function processValue(val) {
|
|
224
|
+
if (dphelper.obj.isObject(val)) {
|
|
225
|
+
console.log('Processing object:', val);
|
|
226
|
+
} else {
|
|
227
|
+
console.log('Not an object:', typeof val);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Details
|
|
233
|
+
|
|
234
|
+
- **Author:** Dario Passariello
|
|
235
|
+
- **Version:** 0.0.2
|
|
236
|
+
- **Creation Date:** 20210101
|
|
237
|
+
- **Last Modified:** 20260220
|
|
238
|
+
- **Environment:** both (browser + Node.js)
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
*Automatically generated document*
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# path
|
|
2
|
+
|
|
3
|
+
Management of URL paths.
|
|
4
|
+
|
|
5
|
+
## Functions
|
|
6
|
+
|
|
7
|
+
| Function | Description | Example |
|
|
8
|
+
|----------|-------------|---------|
|
|
9
|
+
| `rail` | Extracts path segments from the URL | `dphelper.path.rail()` |
|
|
10
|
+
| `hash` | Extracts hash from the URL | `dphelper.path.hash([hashUrl])` |
|
|
11
|
+
| `query` | Extracts query parameters from the URL | `dphelper.path.query([queryString])` |
|
|
12
|
+
|
|
13
|
+
## Description
|
|
14
|
+
|
|
15
|
+
Tool for extracting segments, hashes, and query parameters from URLs.
|
|
16
|
+
|
|
17
|
+
## Usage Examples
|
|
18
|
+
|
|
19
|
+
### Extract URL segments
|
|
20
|
+
|
|
21
|
+
If the URL is `https://example.com/blog/article-1`, `rail()` will return `['blog', 'article-1']`.
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
const segments = dphelper.path.rail();
|
|
25
|
+
console.log(segments[0]); // 'blog'
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Extract Query parameters
|
|
29
|
+
|
|
30
|
+
If the URL is `?id=123&user=dario`, `query()` will return `{"id": "123", "user": "dario"}`.
|
|
31
|
+
|
|
32
|
+
```javascript
|
|
33
|
+
const params = dphelper.path.query();
|
|
34
|
+
console.log(params.id); // '123'
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Details
|
|
38
|
+
|
|
39
|
+
- **Author:** Dario Passariello
|
|
40
|
+
- **Version:** 0.0.1
|
|
41
|
+
- **Creation Date:** 20210101
|
|
42
|
+
- **Last Modified:** 20250513
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
*Automatically generated document*
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# promise
|
|
2
|
+
|
|
3
|
+
Utilities for Promise management.
|
|
4
|
+
|
|
5
|
+
## Functions
|
|
6
|
+
|
|
7
|
+
| Function | Description | Example |
|
|
8
|
+
|----------|-------------|---------|
|
|
9
|
+
| `check` | Check if value is a Promise | `dphelper.promise.check(value)` |
|
|
10
|
+
|
|
11
|
+
## Description
|
|
12
|
+
|
|
13
|
+
Promise utility functions:
|
|
14
|
+
- **Type Check** - Detect if value is a Promise
|
|
15
|
+
- **Cross-Environment** - Works in browser and Node.js
|
|
16
|
+
- **Extended Support** - Checks for Promise-like objects (thenables)
|
|
17
|
+
|
|
18
|
+
## Usage Examples
|
|
19
|
+
|
|
20
|
+
### Check if Value is Promise
|
|
21
|
+
|
|
22
|
+
```javascript
|
|
23
|
+
// Standard Promise
|
|
24
|
+
const promise = fetch('https://api.example.com/data');
|
|
25
|
+
console.log(dphelper.promise.check(promise));
|
|
26
|
+
// true
|
|
27
|
+
|
|
28
|
+
// Promise created with Promise.resolve
|
|
29
|
+
const resolved = Promise.resolve('data');
|
|
30
|
+
console.log(dphelper.promise.check(resolved));
|
|
31
|
+
// true
|
|
32
|
+
|
|
33
|
+
// Thenable (Promise-like object)
|
|
34
|
+
const thenable = { then: (resolve) => resolve('data') };
|
|
35
|
+
console.log(dphelper.promise.check(thenable));
|
|
36
|
+
// true
|
|
37
|
+
|
|
38
|
+
// Regular value
|
|
39
|
+
console.log(dphelper.promise.check('hello'));
|
|
40
|
+
// false
|
|
41
|
+
|
|
42
|
+
console.log(dphelper.promise.check(123));
|
|
43
|
+
// false
|
|
44
|
+
|
|
45
|
+
console.log(dphelper.promise.check({}));
|
|
46
|
+
// false
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Safe Promise Handling
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
// Handle both Promise and non-Promise values
|
|
53
|
+
async function processValue(value) {
|
|
54
|
+
if (dphelper.promise.check(value)) {
|
|
55
|
+
return await value;
|
|
56
|
+
}
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Use in generic functions
|
|
61
|
+
function handleResult(result) {
|
|
62
|
+
if (dphelper.promise.check(result)) {
|
|
63
|
+
result.then(data => console.log('Async:', data));
|
|
64
|
+
} else {
|
|
65
|
+
console.log('Sync:', result);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Type Guard for TypeScript
|
|
71
|
+
|
|
72
|
+
```javascript
|
|
73
|
+
// Type guard usage
|
|
74
|
+
function logValue(val: any) {
|
|
75
|
+
if (dphelper.promise.check(val)) {
|
|
76
|
+
// TypeScript knows val is Promise here
|
|
77
|
+
val.then(data => console.log('Resolved:', data));
|
|
78
|
+
} else {
|
|
79
|
+
console.log('Value:', val);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Details
|
|
85
|
+
|
|
86
|
+
- **Author:** Dario Passariello
|
|
87
|
+
- **Version:** 0.0.2
|
|
88
|
+
- **Creation Date:** 20210101
|
|
89
|
+
- **Last Modified:** 20260220
|
|
90
|
+
- **Environment:** both (browser + Node.js)
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
*Automatically generated document*
|