mentie 0.2.37 → 0.3.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
@@ -2,3 +2,8 @@
2
2
 
3
3
  Mentor's favorite helpers.
4
4
 
5
+ ## Logging
6
+
7
+ Cross environment logging depends on the `LOGLEVEL` variable. In web it is set with `?loglevel=`, in others with an environment variable `LOGLEVEL`.
8
+
9
+ Valid values: `info`, `warn`, `error`.
package/modules/cache.js CHANGED
@@ -14,9 +14,10 @@ const _cache = {}
14
14
  *
15
15
  * @param {string} key - The key to cache the value.
16
16
  * @param {*} [value] - The value to be cached (optional).
17
+ * @param {number} [expires_in_ms=Infinity] - The expiration time in milliseconds (optional).
17
18
  * @returns {*} The cached value.
18
19
  */
19
- export function cache( key, value ) {
20
+ export function cache( key, value, expires_in_ms=Infinity ) {
20
21
 
21
22
  // If the key is undefined, log a warning
22
23
  if( key === undefined ) {
@@ -28,8 +29,14 @@ export function cache( key, value ) {
28
29
  log.warn( `The cache key ${ key } contains 'undefined', this may indicate a bug in your cache logic` )
29
30
  }
30
31
 
31
- if( value ) _cache[key] = value
32
- return _cache[key]
32
+ // If value is provided, save value and expiration
33
+ if( value ) _cache[key] = { value, expires: Date.now() + expires_in_ms }
34
+
35
+ // If cache has value, but it expired, remove it
36
+ if( _cache[key] && _cache[key].expires < Date.now() ) delete _cache[key]
37
+
38
+ // Return the value of the cache key, which may be undefined
39
+ return _cache[key]?.value
33
40
  }
34
41
 
35
42
  /**
@@ -77,6 +77,41 @@ env.node_loglevel = () => env.is_node() && process.env?.LOG_LEVEL
77
77
  */
78
78
  env.loglevel = () => env.web_loglevel() || env.node_loglevel() || env.dev() ? 'info' : 'error'
79
79
 
80
+ /**
81
+ * Checks if the code is running in a web browser and the platform is Mac.
82
+ * @returns {boolean} True if the code is running in a web browser and the platform is Mac, otherwise false.
83
+ */
84
+ env.is_mac = () => env.is_web() && navigator.userAgent?.toUpperCase().includes( 'MAC' )
85
+
86
+ /**
87
+ * Checks if the code is running in a web browser and the platform is iPhone.
88
+ * @returns {boolean} True if the code is running in a web browser and the platform is iPhone, otherwise false.
89
+ */
90
+ env.is_iphone = () => env.is_web() && navigator.userAgent?.toUpperCase().includes( 'IPHONE' )
91
+
92
+ /**
93
+ * Checks if the code is running in a web browser and the platform is Android.
94
+ * @returns {boolean} True if the code is running in a web browser and the platform is Android, otherwise false.
95
+ */
96
+ env.is_android = () => env.is_web() && navigator.userAgent?.toUpperCase().includes( 'ANDROID' )
97
+
98
+ /**
99
+ * Checks if the code is running in a web browser and the platform is iOS.
100
+ * @returns {boolean} True if the code is running in a web browser and the platform is made by Apple
101
+ */
102
+ env.is_apple = () => env.is_web() && navigator.userAgent?.toUpperCase().includes( 'MAC OS X' )
103
+
104
+ /**
105
+ * Checks if the code is running in a web browser and the platform is Windows.
106
+ * @returns {boolean} True if the code is running in a web browser and the platform is Linux, otherwise false.
107
+ */
108
+ env.is_linux = () => env.is_web() && navigator.userAgent?.toUpperCase().includes( 'LINUX' )
109
+
110
+ /**
111
+ * Checks if the code is running in a web browser and the platform is Windows.
112
+ * @returns {boolean} True if the code is running in a web browser and the platform is Windows, otherwise false.
113
+ */
114
+ env.is_windows = () => env.is_web() && navigator.userAgent?.toUpperCase().includes( 'WIN' )
80
115
 
81
116
  /**
82
117
  * Checks if the code is running in a web environment.
@@ -114,6 +149,36 @@ export const is_emulator = env.is_emulator()
114
149
  */
115
150
  export const is_github_actions = typeof process !== 'undefined' && process.env?.GITHUB_ACTIONS == true
116
151
 
152
+ /**
153
+ * @returns {boolean} Returns true if the code is running on an Apple device, otherwise returns false.
154
+ */
155
+ export const is_apple = env.is_apple()
156
+
157
+ /**
158
+ * @returns {boolean} Returns true if the code is running on an iPhone, otherwise returns false.
159
+ */
160
+ export const is_iphone = env.is_iphone()
161
+
162
+ /**
163
+ * @returns {boolean} Returns true if the code is running on a Mac, otherwise returns false.
164
+ */
165
+ export const is_mac = env.is_mac()
166
+
167
+ /**
168
+ * @returns {boolean} Returns true if the code is running on an Android device, otherwise returns false.
169
+ */
170
+ export const is_android = env.is_android()
171
+
172
+ /**
173
+ * @returns {boolean} Returns true if the code is running on a Linux device, otherwise returns false.
174
+ */
175
+ export const is_linux = env.is_linux()
176
+
177
+ /**
178
+ * @returns {boolean} Returns true if the code is running on a Windows device, otherwise returns false.
179
+ */
180
+ export const is_windows = env.is_windows()
181
+
117
182
  // ///////////////////////////////
118
183
  // Mode and loglevel detection
119
184
  // ///////////////////////////////
@@ -156,7 +221,15 @@ export const log_environment = logger => {
156
221
  is_web,
157
222
  loglevel: web_loglevel,
158
223
  window: typeof window !== 'undefined' && window,
159
- search: typeof location !== 'undefined' && location.search
224
+ search: typeof location !== 'undefined' && location.search,
225
+ platform: {
226
+ is_android,
227
+ is_apple,
228
+ is_iphone,
229
+ is_linux,
230
+ is_mac,
231
+ is_windows
232
+ }
160
233
  },
161
234
  node: {
162
235
  is_node,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mentie",
3
- "version": "0.2.37",
3
+ "version": "0.3.0",
4
4
  "description": "Mentor's toolbelt",
5
5
  "type": "module",
6
6
  "main": "index.js",