mentie 0.1.15 → 0.1.16

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.
@@ -2,61 +2,128 @@
2
2
  // Platform and environment detection
3
3
  // ///////////////////////////////
4
4
 
5
+
6
+
7
+ /**
8
+ * Environment checks for various runtime contexts.
9
+ * Useful in compiled code where the runtime environment may not be known at compile time.
10
+ * @namespace
11
+ */
12
+ export const env = {}
13
+
14
+ /**
15
+ * Determines if the current runtime environment is a web browser.
16
+ * @returns {boolean} True if running in a web environment, otherwise false.
17
+ */
18
+ env.is_web = () => typeof window !== 'undefined'
19
+
20
+ /**
21
+ * Checks if the code is running in the Cypress testing environment within a web browser.
22
+ * @returns {boolean} True if running in Cypress, otherwise false.
23
+ */
24
+ env.is_cypress = () => env.is_web() && typeof window.Cypress !== 'undefined'
25
+
26
+ /**
27
+ * Determines if the current runtime environment is Node.js.
28
+ * @returns {boolean} True if running in Node.js, otherwise false.
29
+ */
30
+ env.is_node = () => typeof process !== 'undefined' && process.versions && process.versions?.node
31
+
32
+ /**
33
+ * Checks if the code is running in an emulator environment in Node.js.
34
+ * @returns {boolean} True if running in a Node.js emulator, otherwise false.
35
+ */
36
+ env.is_emulator = () => env.is_node() && process.env?.FUNCTIONS_EMULATOR === 'true'
37
+
38
+ /**
39
+ * Determines if the Node.js environment is in development mode.
40
+ * @returns {boolean} True if NODE_ENV is 'development', otherwise false.
41
+ */
42
+ env.node_dev = () => typeof process !== 'undefined' && process.env?.NODE_ENV === 'development'
43
+
44
+ /**
45
+ * Determines if the web environment is in development mode.
46
+ * @returns {boolean} True if the URL includes 'debug=true' or 'localhost', otherwise false.
47
+ */
48
+ env.web_dev = () => typeof location !== 'undefined' && ( `${ location.href }`.includes( 'debug=true' ) || `${ location.href }`.includes( 'localhost' ) )
49
+
50
+ /**
51
+ * Determines if the environment is in development mode (either web or Node.js).
52
+ * @returns {boolean} True if either web_dev or node_dev returns true, otherwise false.
53
+ */
54
+ env.dev = () => env.node_dev() || env.web_dev()
55
+
56
+ /**
57
+ * Retrieves the log level set via URL parameters in a web environment.
58
+ * @returns {string|null} The log level from URL parameters, or null if not set.
59
+ */
60
+ env.web_loglevel = () => env.is_web() && new URLSearchParams( location?.search ).get( 'loglevel' )
61
+
62
+ /**
63
+ * Retrieves the log level set via environment variables in a Node.js environment.
64
+ * @returns {string|undefined} The log level from environment variables, or undefined if not set.
65
+ */
66
+ env.node_loglevel = () => env.is_node() && process.env?.LOG_LEVEL
67
+
68
+ /**
69
+ * Retrieves the effective log level based on the environment. Defaults to 'info' in development environments, 'error' otherwise.
70
+ * @returns {string} The determined log level.
71
+ */
72
+ env.loglevel = () => env.web_loglevel() || env.node_loglevel() || env.dev() ? 'info' : 'error'
73
+
74
+
5
75
  /**
6
76
  * Checks if the code is running in a web environment.
7
77
  * @returns {boolean} Returns true if the code is running in a web environment, otherwise returns false.
8
78
  */
9
- export const is_web = typeof window !== 'undefined'
79
+ export const is_web = env.is_web()
10
80
 
11
81
  /**
12
82
  * Checks if the code is running within a Cypress environment.
13
83
  * @returns {boolean} Returns true if the code is running in a Cypress environment, otherwise returns false.
14
84
  */
15
- export const is_cypress = is_web && typeof window.Cypress !== 'undefined'
85
+ export const is_cypress = env.is_cypress()
16
86
 
17
87
  /**
18
88
  * Checks if the code is running in a Node environment.
19
89
  * @returns {boolean} Returns true if the code is running in a Node environment, otherwise returns false.
20
90
  */
21
- export const is_node = typeof process !== 'undefined' && process.versions && process.versions?.node
91
+ export const is_node = env.is_node()
22
92
 
23
93
  /**
24
94
  * Checks if the code is running in a Firebase functions emulator environment.
25
95
  * @returns {boolean} Returns true if the code is running in a Firebase environment, otherwise returns false.
26
96
  */
27
- export const is_emulator = typeof process !== 'undefined' && process.env?.FUNCTIONS_EMULATOR === 'true'
97
+ export const is_emulator = env.is_emulator()
28
98
 
29
99
  // ///////////////////////////////
30
100
  // Mode and loglevel detection
31
101
  // ///////////////////////////////
32
102
 
33
- const node_dev = typeof process !== 'undefined' && process.env?.NODE_ENV === 'development'
34
- const web_dev = typeof location !== 'undefined' && ( `${ location.href }`.includes( 'debug=true' ) || `${ location.href }`.includes( 'localhost' ) )
35
-
36
103
  /**
37
104
  * Represents the development environment.
38
105
  * @type {boolean}
39
106
  */
40
- export const dev = node_dev || web_dev
107
+ export const dev = env.dev()
41
108
 
42
109
  /**
43
110
  * The log level for web applications.
44
111
  * @type {string} - Log level. Valid values are: 'info', 'warn', 'error'
45
112
  */
46
- export const web_loglevel = is_web && new URLSearchParams( location?.search ).get( 'loglevel' )
113
+ export const web_loglevel = env.web_loglevel()
47
114
 
48
115
  /**
49
116
  * The log level for the Node environment.
50
117
  * @type {string} - Log level. Valid values are: 'info', 'warn', 'error'
51
118
  */
52
- export const node_loglevel = typeof process !== 'undefined' && process.env?.LOG_LEVEL
119
+ export const node_loglevel = env.node_loglevel()
53
120
 
54
121
 
55
122
  /**
56
123
  * The log level used in the environment.
57
124
  * @type {string}
58
125
  */
59
- export const loglevel = web_loglevel || node_loglevel || dev ? 'info' : 'error'
126
+ export const loglevel = env.loglevel()
60
127
 
61
128
 
62
129
  /**
@@ -1,8 +1,10 @@
1
1
  // Import environment data
2
- import { dev, is_cypress, is_emulator, loglevel } from "./environment.js"
2
+ import { dev, env } from "./environment.js"
3
3
 
4
4
  const should_log = levels => {
5
5
 
6
+ const loglevel = env.loglevel()
7
+
6
8
  // Check if the loglevel matches this call
7
9
  const valid_levels = [ 'info', 'warn', 'error' ]
8
10
 
@@ -63,7 +65,7 @@ const annotate_messages = messages => {
63
65
 
64
66
 
65
67
  // If we are running in cypress, stringify the messages because they become unavailable in the console
66
- if( is_cypress ) {
68
+ if( env.is_cypress() ) {
67
69
 
68
70
  try {
69
71
  messages = messages.map( message => JSON.stringify( message, null, 2 ) )
@@ -122,7 +124,7 @@ log.info = function( ...messages ) {
122
124
  const levels = [ 'info' ]
123
125
 
124
126
  // Log the messages if the loglevel matches
125
- if( is_emulator || should_log( levels ) ) {
127
+ if( env.is_emulator() || should_log( levels ) ) {
126
128
 
127
129
  // Annotate the provided messages
128
130
  annotate_messages( messages )
@@ -170,7 +172,7 @@ log.error = function( ...messages ) {
170
172
 
171
173
  // Check if the loglevel matches this call
172
174
  const levels = [ 'error', 'warn', 'info' ]
173
- const should_log = dev || levels.includes( loglevel )
175
+ const should_log = dev || levels.includes( env.loglevel() )
174
176
  if( !dev || !should_log ) return
175
177
 
176
178
  // Log the messages if the loglevel matches
@@ -180,4 +182,4 @@ log.error = function( ...messages ) {
180
182
  }
181
183
 
182
184
  // Set the loglevel on the log function
183
- log.loglevel = loglevel
185
+ log.loglevel = env.loglevel()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mentie",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "description": "Mentor's toolbelt",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -30,5 +30,8 @@
30
30
  "peerDependencies": {
31
31
  "promise-parallel-throttle": "^3.5.0",
32
32
  "promise-retry": "^2.0.1"
33
+ },
34
+ "dependencies": {
35
+ "safe-stable-stringify": "^2.4.3"
33
36
  }
34
37
  }