@hubspot/eslint-config-ui-extensions 1.1.0 → 1.1.1

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.
@@ -68,6 +68,21 @@ describe('no-restricted-globals', () => {
68
68
  function navigate(location) {
69
69
  return location.href;
70
70
  }
71
+ `,
72
+ },
73
+ {
74
+ name: 'allows navigator as a local variable',
75
+ code: `
76
+ const navigator = { language: 'en' };
77
+ console.log(navigator.language);
78
+ `,
79
+ },
80
+ {
81
+ name: 'allows navigator as a function parameter',
82
+ code: `
83
+ function getLocale(navigator) {
84
+ return navigator.language;
85
+ }
71
86
  `,
72
87
  },
73
88
  {
@@ -75,6 +90,13 @@ describe('no-restricted-globals', () => {
75
90
  code: `
76
91
  const { history } = router;
77
92
  history.push('/test');
93
+ `,
94
+ },
95
+ {
96
+ name: 'allows navigator as an object property key',
97
+ code: `
98
+ const obj = { navigator: { language: 'en' } };
99
+ obj.navigator.language;
78
100
  `,
79
101
  },
80
102
  {
@@ -179,6 +201,20 @@ describe('no-restricted-globals', () => {
179
201
  `,
180
202
  errors: [{ messageId: 'history' }],
181
203
  },
204
+ {
205
+ name: 'reports error for navigator.language access',
206
+ code: `
207
+ const lang = navigator.language;
208
+ `,
209
+ errors: [{ messageId: 'navigator' }],
210
+ },
211
+ {
212
+ name: 'reports error for navigator.clipboard access',
213
+ code: `
214
+ navigator.clipboard.writeText('hello');
215
+ `,
216
+ errors: [{ messageId: 'navigator' }],
217
+ },
182
218
  {
183
219
  name: 'reports error for window.importScripts',
184
220
  code: `
@@ -207,6 +243,13 @@ describe('no-restricted-globals', () => {
207
243
  `,
208
244
  errors: [{ messageId: 'location' }],
209
245
  },
246
+ {
247
+ name: 'reports error for window.navigator',
248
+ code: `
249
+ const ua = window.navigator.userAgent;
250
+ `,
251
+ errors: [{ messageId: 'navigator' }],
252
+ },
210
253
  {
211
254
  name: 'reports error for window.history',
212
255
  code: `
@@ -228,6 +271,13 @@ describe('no-restricted-globals', () => {
228
271
  `,
229
272
  errors: [{ messageId: 'addEventListener' }],
230
273
  },
274
+ {
275
+ name: 'reports error for self.navigator',
276
+ code: `
277
+ const online = self.navigator.onLine;
278
+ `,
279
+ errors: [{ messageId: 'navigator' }],
280
+ },
231
281
  {
232
282
  name: 'reports error for self.location',
233
283
  code: `
@@ -256,6 +306,13 @@ describe('no-restricted-globals', () => {
256
306
  `,
257
307
  errors: [{ messageId: 'location' }],
258
308
  },
309
+ {
310
+ name: 'reports error for globalThis.navigator',
311
+ code: `
312
+ globalThis.navigator.geolocation.getCurrentPosition(cb);
313
+ `,
314
+ errors: [{ messageId: 'navigator' }],
315
+ },
259
316
  {
260
317
  name: 'reports error for globalThis.history',
261
318
  code: `
@@ -263,6 +320,13 @@ describe('no-restricted-globals', () => {
263
320
  `,
264
321
  errors: [{ messageId: 'history' }],
265
322
  },
323
+ {
324
+ name: 'reports error for bracket notation window["navigator"]',
325
+ code: `
326
+ const devices = window['navigator'].mediaDevices;
327
+ `,
328
+ errors: [{ messageId: 'navigator' }],
329
+ },
266
330
  {
267
331
  name: 'reports error for bracket notation window["location"]',
268
332
  code: `
@@ -284,6 +348,24 @@ describe('no-restricted-globals', () => {
284
348
  `,
285
349
  errors: [{ messageId: 'location' }],
286
350
  },
351
+ {
352
+ name: 'reports error for navigator in React component',
353
+ code: `
354
+ import { Text } from '@hubspot/ui-extensions';
355
+ function Component() {
356
+ const ua = navigator.userAgent;
357
+ return <Text>{ua}</Text>;
358
+ }
359
+ `,
360
+ errors: [{ messageId: 'navigator' }],
361
+ },
362
+ {
363
+ name: 'reports error for navigator in arrow function',
364
+ code: `
365
+ const getLangs = () => navigator.languages;
366
+ `,
367
+ errors: [{ messageId: 'navigator' }],
368
+ },
287
369
  {
288
370
  name: 'reports error in React component',
289
371
  code: `
@@ -382,6 +464,12 @@ describe('no-restricted-globals', () => {
382
464
  interface Router {
383
465
  history: typeof history;
384
466
  }
467
+ `,
468
+ },
469
+ {
470
+ name: 'allows navigator type in type alias',
471
+ code: `
472
+ type NavigatorType = typeof navigator;
385
473
  `,
386
474
  },
387
475
  {
@@ -421,6 +509,17 @@ describe('no-restricted-globals', () => {
421
509
  `,
422
510
  errors: [{ messageId: 'history' }],
423
511
  },
512
+ {
513
+ name: 'reports error for navigator usage after type declarations',
514
+ code: `
515
+ type NavigatorType = typeof navigator;
516
+
517
+ function getLocale() {
518
+ return navigator.language;
519
+ }
520
+ `,
521
+ errors: [{ messageId: 'navigator' }],
522
+ },
424
523
  {
425
524
  name: 'reports error for addEventListener with typed handler',
426
525
  code: `
@@ -10,6 +10,7 @@ const RESTRICTED_FUNCTION_GLOBALS = new Set([
10
10
  const RESTRICTED_VALUE_GLOBALS = new Set([
11
11
  'location',
12
12
  'history',
13
+ 'navigator',
13
14
  ]);
14
15
  // All restricted globals (for Identifier checking)
15
16
  const ALL_RESTRICTED_GLOBALS = new Set([
@@ -29,6 +30,7 @@ export const noRestrictedGlobals = {
29
30
  removeEventListener: 'removeEventListener() is not supported. Use React event props instead.',
30
31
  location: 'location is not available. Use context.location instead.',
31
32
  history: 'history is not available. Use <Link> or actions.openIframeModal() instead.',
33
+ navigator: 'navigator is not available as expected. Use provided context and actions instead.',
32
34
  },
33
35
  schema: [],
34
36
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hubspot/eslint-config-ui-extensions",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "type": "module",
5
5
  "description": "eslint plugins for HubSpot React-based UI Extensions",
6
6
  "keywords": [