web-manager 3.2.45 → 3.2.47

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/index.js CHANGED
@@ -1207,7 +1207,7 @@ function Manager() {
1207
1207
  var buildTimeCurrent = self.properties.global.buildTime;
1208
1208
  var buildTimeLive = new Date(data['npm-build'].timestamp);
1209
1209
 
1210
- // Set buildTimeCurrent to 1 hour ahead
1210
+ // Set buildTimeCurrent to 1 hour ahead to account for the npm-build time which will ALWAYS be set to later since it happens later
1211
1211
  buildTimeCurrent.setHours(buildTimeCurrent.getHours() + 1);
1212
1212
 
1213
1213
  // Log
package/lib/account.js CHANGED
@@ -267,8 +267,9 @@ Account.prototype._resolveAccount = function (firebaseUser, account, options) {
267
267
 
268
268
  // @@@DEVELOPER
269
269
  // var date = '2024-04-23T00:07:29.183Z';
270
- // var date = `2024-03-23T00:07:29.183Z`;
271
- // account.plan.id = 'basic';
270
+ // // var date = `2024-03-23T00:07:29.183Z`;
271
+ // // account.plan.id = 'basic';
272
+ // account.plan.id = 'premium';
272
273
  // account.plan.trial = {
273
274
  // activated: false,
274
275
  // expires: {
@@ -281,6 +282,43 @@ Account.prototype._resolveAccount = function (firebaseUser, account, options) {
281
282
  // timestampUNIX: Math.round(new Date(date).getTime() / 1000),
282
283
  // }
283
284
  // account.plan.status = 'cancelled';
285
+ // account.plan = {
286
+ // "id": "premium",
287
+ // "payment": {
288
+ // "frequency": "monthly",
289
+ // "startDate": {
290
+ // "timestampUNIX": 1711373195,
291
+ // "timestamp": "2024-03-25T13:26:35.000Z"
292
+ // },
293
+ // "updatedBy": {
294
+ // "date": {
295
+ // "timestamp": "2024-04-02T13:46:47.441Z",
296
+ // "timestampUNIX": 1712065607
297
+ // },
298
+ // "event": {
299
+ // "name": "subscription-profile-fixer",
300
+ // "id": "subscription-profile-fixer"
301
+ // }
302
+ // },
303
+ // "resourceId": "AzyrfuU82V0cZ87qp",
304
+ // "orderId": "0908-176942-1223",
305
+ // "active": false,
306
+ // "processor": "chargebee"
307
+ // },
308
+ // "trial": {
309
+ // "expires": {
310
+ // "timestamp": "1970-01-01T00:00:00.000Z",
311
+ // "timestampUNIX": 0
312
+ // },
313
+ // "activated": true
314
+ // },
315
+ // "expires": {
316
+ // "timestampUNIX": 1714656799,
317
+ // "timestamp": "2024-05-02T13:33:19.000Z"
318
+ // },
319
+ // "limits": {},
320
+ // "status": "cancelled"
321
+ // },
284
322
 
285
323
  account.plan.limits = account.plan.limits || {};
286
324
  // account.plan.devices = account.plan.devices || 1;
@@ -516,11 +554,21 @@ Account.prototype._resolveAccount = function (firebaseUser, account, options) {
516
554
  // Change the status to 'failed' if the plan is suspended because room temperature IQ people think 'suspended' means 'cancelled'
517
555
  var visibleStatus = uppercase(account.plan.status === 'suspended' ? 'failed payment' : account.plan.status);
518
556
  // If user is on trial, start date is trial exp date
519
- var visibleStartDate = account.plan.trial.activated ? account.plan.trial.expires.timestamp : account.plan.payment.startDate.timestamp;
557
+ var visibleStartDate = null;
520
558
  // If basic, just show account creation date
521
559
  if (unresolvedPlanId === defaultPlanId) {
522
560
  visibleStartDate = accountCreationDate;
523
561
  billingStatusEl.setAttribute('hidden', true);
562
+ } else {
563
+ if (account.plan.status === 'cancelled') {
564
+ visibleStartDate = account.plan.payment.startDate.timestamp;
565
+ } else {
566
+ if (account.plan.trial.activated) {
567
+ visibleStartDate = account.plan.trial.expires.timestamp;
568
+ }
569
+ }
570
+
571
+ visibleStartDate = visibleStartDate || accountCreationDate;
524
572
  }
525
573
  var visibleFrequency = account.plan.payment.frequency === 'unknown' ? 'monthly' : account.plan.payment.frequency;
526
574
 
package/lib/debug.js CHANGED
@@ -8,7 +8,7 @@ function Debug(utilObj) {
8
8
  Debug.promise = function(status, data, options) {
9
9
  options = options || {};
10
10
  options.wait = options.wait || {enabled: false};
11
- return new Promise((resolve, reject) => {
11
+ return new Promise(function (resolve, reject) {
12
12
  if (status == 'resolve') {
13
13
  if (options.wait.enabled) {
14
14
  Debug.wait(options.wait.msec, options.wait.range)
@@ -48,7 +48,9 @@ Debug.wait = function(msec, range) {
48
48
  msec = msec + randomNumPlus - randomNumMinus;
49
49
  msec = (msec <= 0) ? 50 : msec;
50
50
  console.log('[DEBUG] waiting...', msec);
51
- return new Promise(resolve => setTimeout(resolve, msec));
51
+ return new Promise(function (resolve, reject) {
52
+ setTimeout(resolve, msec);
53
+ });
52
54
  }
53
55
 
54
56
  module.exports = Debug;
package/lib/dom.js CHANGED
@@ -275,7 +275,7 @@ Dom.loadScript = function(options, callback) {
275
275
 
276
276
  // Set the script attributes
277
277
  options.attributes
278
- .forEach(attribute => {
278
+ .forEach(function (attribute) {
279
279
  s.setAttribute(attribute.name, attribute.value);
280
280
  });
281
281
 
package/lib/utilities.js CHANGED
@@ -7,23 +7,26 @@ function Utilities(utilObj) {
7
7
  this.utilities = utilObj;
8
8
  }
9
9
 
10
- /* https://gist.github.com/jeneg/9767afdcca45601ea44930ea03e0febf */
11
- Utilities.get = function (obj, path, def) {
12
- var fullPath = (path || '')
13
- .replace(/\[/g, '.')
14
- .replace(/]/g, '')
15
- .split('.')
16
- .filter(Boolean);
10
+ Utilities.get = function (object, path, defaultValue) {
11
+ // If the path is not defined or it has false value
12
+ if (!path) {
13
+ return defaultValue;
14
+ }
17
15
 
18
- return fullPath.every(everyFunc) ? obj : def;
16
+ // Check if the path is a string or array. If it is a string, convert it to array
17
+ const pathArray = Array.isArray(path) ? path : path.split('.');
19
18
 
20
- function everyFunc(step) {
21
- // return !(step && (obj = obj[step]) === undefined);
22
- // console.log(' CHECK > ', !(step && (obj = obj[step]) === undefined));
23
- // console.log('step', step, 'obj', obj, 'objstep', obj[step]);
24
- // return !(step && (obj = obj[step]) === undefined);
25
- return !(step && (obj = obj[step]) === undefined);
19
+ // For each item in the path, dig into the object
20
+ let currentObject = object;
21
+ for (const key of pathArray) {
22
+ if (!currentObject || !currentObject.hasOwnProperty(key)) {
23
+ return defaultValue;
24
+ }
25
+ currentObject = currentObject[key];
26
26
  }
27
+
28
+ // Return the value
29
+ return currentObject === undefined ? defaultValue : currentObject;
27
30
  }
28
31
 
29
32
  /* https://stackoverflow.com/questions/54733539/javascript-implementation-of-lodash-set-method */
@@ -48,6 +51,28 @@ Utilities.set = function (obj, path, value) {
48
51
  return obj; // Return the top-level object to allow chaining
49
52
  }
50
53
 
54
+ /* https://gist.github.com/jeneg/9767afdcca45601ea44930ea03e0febf */
55
+ Utilities.getLegacy = function (obj, path, def) {
56
+ if (!path) {
57
+ return def;
58
+ }
59
+ var fullPath = (path || '')
60
+ .replace(/\[/g, '.')
61
+ .replace(/]/g, '')
62
+ .split('.')
63
+ .filter(Boolean);
64
+
65
+ return fullPath.every(everyFunc) ? obj : def;
66
+
67
+ function everyFunc(step) {
68
+ // return !(step && (obj = obj[step]) === undefined);
69
+ // console.log(' CHECK > ', !(step && (obj = obj[step]) === undefined));
70
+ // console.log('step', step, 'obj', obj, 'objstep', obj[step]);
71
+ // return !(step && (obj = obj[step]) === undefined);
72
+ return !(step && (obj = obj[step]) === undefined);
73
+ }
74
+ }
75
+
51
76
  // https://dzone.com/articles/cross-browser-javascript-copy-and-paste
52
77
  // https://hackernoon.com/copying-text-to-clipboard-with-javascript-df4d4988697f
53
78
  Utilities.clipboardCopy = function (input) {
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "web-manager",
3
- "version": "3.2.45",
3
+ "version": "3.2.47",
4
4
  "description": "Easily access important variables such as the query string, current domain, and current page in a single object.",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1"
7
+ "test": "./node_modules/mocha/bin/mocha test/ --recursive --timeout=10000",
8
+
9
+ "test_": "npm run prepare && ./node_modules/mocha/bin/mocha test/ --recursive --timeout=10000",
10
+ "prepare_": "node -e 'require(`prepare-package`)()'"
8
11
  },
9
12
  "engines": {
10
13
  "node": ">=6.0.0"
@@ -35,5 +38,9 @@
35
38
  "cookieconsent": "^3.1.1",
36
39
  "firebase": "^9.23.0",
37
40
  "lazysizes": "^5.3.2"
41
+ },
42
+ "devDependencies": {
43
+ "lodash": "^4.17.21",
44
+ "mocha": "^8.4.0"
38
45
  }
39
46
  }
package/test/test.js ADDED
@@ -0,0 +1,158 @@
1
+ const package = require('../package.json');
2
+ const assert = require('assert');
3
+
4
+ beforeEach(() => {
5
+ });
6
+
7
+ before(() => {
8
+ });
9
+
10
+ after(() => {
11
+ });
12
+
13
+ /*
14
+ * ============
15
+ * Test Cases
16
+ * ============
17
+ */
18
+ describe(`${package.name}`, () => {
19
+ const _ = require('../lib/utilities.js');
20
+ const lodash = require('lodash');
21
+
22
+ // Utilities
23
+ describe('.utilities()', () => {
24
+ const sample = {
25
+ main: {
26
+ true: true,
27
+ false: false,
28
+ zero: 0,
29
+ one: 1,
30
+ string: 'string',
31
+ stringEmpty: '',
32
+ object: {},
33
+ array: [],
34
+ null: null,
35
+ undefined: undefined,
36
+ nan: NaN,
37
+ infinity: Infinity,
38
+ negativeInfinity: -Infinity,
39
+ function: function () {},
40
+ }
41
+ }
42
+
43
+ // Normal Cases
44
+ describe('.get()', () => {
45
+ it('should return true', () => {
46
+ // console.log('---lodash', lodash.get(sample, 'main.true'));
47
+ // console.log('---_.get', _.get(sample, 'main.true'));
48
+ // console.log('---_.get2', _.get2(sample, 'main.true'));
49
+
50
+ assert.strictEqual(_.get(sample, 'main.true'), true);
51
+ });
52
+
53
+ it('should return false', () => {
54
+ assert.strictEqual(_.get(sample, 'main.false'), false);
55
+ });
56
+
57
+ it('should return 0', () => {
58
+ assert.strictEqual(_.get(sample, 'main.zero'), 0);
59
+ });
60
+
61
+ it('should return 1', () => {
62
+ assert.strictEqual(_.get(sample, 'main.one'), 1);
63
+ });
64
+
65
+ it('should return a string', () => {
66
+ assert.strictEqual(_.get(sample, 'main.string'), 'string');
67
+ });
68
+
69
+ it('should return an empty string', () => {
70
+ assert.strictEqual(_.get(sample, 'main.stringEmpty'), '');
71
+ });
72
+
73
+ it('should return an object', () => {
74
+ assert.deepStrictEqual(_.get(sample, 'main.object'), {});
75
+ });
76
+
77
+ it('should return an array', () => {
78
+ assert.deepStrictEqual(_.get(sample, 'main.array'), []);
79
+ });
80
+
81
+ it('should return null', () => {
82
+ assert.strictEqual(_.get(sample, 'main.null'), null);
83
+ });
84
+
85
+ it('should return undefined', () => {
86
+ assert.strictEqual(_.get(sample, 'main.undefined'), undefined);
87
+ });
88
+
89
+ it('should return NaN', () => {
90
+ assert.strictEqual(Number.isNaN(_.get(sample, 'main.nan')), true);
91
+ });
92
+
93
+ it('should return Infinity', () => {
94
+ assert.strictEqual(_.get(sample, 'main.infinity'), Infinity);
95
+ });
96
+
97
+ it('should return -Infinity', () => {
98
+ assert.strictEqual(_.get(sample, 'main.negativeInfinity'), -Infinity);
99
+ });
100
+
101
+ it('should return a function', () => {
102
+ assert.strictEqual(typeof _.get(sample, 'main.function'), 'function');
103
+ });
104
+
105
+ // Non-existent
106
+ it('should return undefined', () => {
107
+ assert.strictEqual(_.get(sample, 'main.nonexistent'), undefined);
108
+ });
109
+
110
+ // No path
111
+ it('should return undefined', () => {
112
+ assert.strictEqual(_.get(sample), undefined);
113
+ });
114
+
115
+ // Empty path
116
+ it('should return undefined', () => {
117
+ assert.strictEqual(_.get(sample, ''), undefined);
118
+ });
119
+
120
+ // Default value
121
+ it('should return default value', () => {
122
+ assert.strictEqual(_.get(sample, 'main.nonexistent', 'default'), 'default');
123
+ });
124
+
125
+ it('should return actual value', () => {
126
+ assert.strictEqual(_.get(sample, 'main.false', 'default'), false);
127
+ });
128
+
129
+ it('should return actual value', () => {
130
+ assert.strictEqual(_.get(sample, 'main.null', 'default'), null);
131
+ });
132
+
133
+ it('should return default value', () => {
134
+ assert.strictEqual(_.get(sample, 'main.undefined', 'default'), 'default');
135
+ });
136
+
137
+ // Non-object for object
138
+ it('should return undefined', () => {
139
+ assert.strictEqual(_.get(undefined, 'main.true'), undefined);
140
+ });
141
+
142
+ it('should return undefined', () => {
143
+ assert.strictEqual(_.get(null, 'main.true'), undefined);
144
+ });
145
+
146
+ it('should return undefined', () => {
147
+ assert.strictEqual(_.get(false, 'main.true'), undefined);
148
+ });
149
+
150
+ it('should return undefined', () => {
151
+ assert.strictEqual(_.get('', 'main.true'), undefined);
152
+ });
153
+
154
+ });
155
+
156
+ });
157
+
158
+ })