flagsmith-nodejs 2.4.1 → 2.5.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.
@@ -15,6 +15,7 @@ export declare const PERCENTAGE_SPLIT = "PERCENTAGE_SPLIT";
15
15
  export declare const IS_SET = "IS_SET";
16
16
  export declare const IS_NOT_SET = "IS_NOT_SET";
17
17
  export declare const MODULO = "MODULO";
18
+ export declare const IN = "IN";
18
19
  export declare const CONDITION_OPERATORS: {
19
20
  EQUAL: string;
20
21
  GREATER_THAN: string;
@@ -29,4 +30,5 @@ export declare const CONDITION_OPERATORS: {
29
30
  IS_SET: string;
30
31
  IS_NOT_SET: string;
31
32
  MODULO: string;
33
+ IN: string;
32
34
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CONDITION_OPERATORS = exports.MODULO = exports.IS_NOT_SET = exports.IS_SET = exports.PERCENTAGE_SPLIT = exports.REGEX = exports.NOT_EQUAL = exports.NOT_CONTAINS = exports.GREATER_THAN_INCLUSIVE = exports.CONTAINS = exports.LESS_THAN_INCLUSIVE = exports.LESS_THAN = exports.GREATER_THAN = exports.EQUAL = exports.RULE_TYPES = exports.NONE_RULE = exports.ANY_RULE = exports.ALL_RULE = void 0;
3
+ exports.CONDITION_OPERATORS = exports.IN = exports.MODULO = exports.IS_NOT_SET = exports.IS_SET = exports.PERCENTAGE_SPLIT = exports.REGEX = exports.NOT_EQUAL = exports.NOT_CONTAINS = exports.GREATER_THAN_INCLUSIVE = exports.CONTAINS = exports.LESS_THAN_INCLUSIVE = exports.LESS_THAN = exports.GREATER_THAN = exports.EQUAL = exports.RULE_TYPES = exports.NONE_RULE = exports.ANY_RULE = exports.ALL_RULE = void 0;
4
4
  // Segment Rules
5
5
  exports.ALL_RULE = 'ALL';
6
6
  exports.ANY_RULE = 'ANY';
@@ -20,6 +20,7 @@ exports.PERCENTAGE_SPLIT = 'PERCENTAGE_SPLIT';
20
20
  exports.IS_SET = 'IS_SET';
21
21
  exports.IS_NOT_SET = 'IS_NOT_SET';
22
22
  exports.MODULO = 'MODULO';
23
+ exports.IN = 'IN';
23
24
  exports.CONDITION_OPERATORS = {
24
25
  EQUAL: exports.EQUAL,
25
26
  GREATER_THAN: exports.GREATER_THAN,
@@ -33,5 +34,6 @@ exports.CONDITION_OPERATORS = {
33
34
  PERCENTAGE_SPLIT: exports.PERCENTAGE_SPLIT,
34
35
  IS_SET: exports.IS_SET,
35
36
  IS_NOT_SET: exports.IS_NOT_SET,
36
- MODULO: exports.MODULO
37
+ MODULO: exports.MODULO,
38
+ IN: exports.IN
37
39
  };
@@ -69,6 +69,7 @@ var SegmentConditionModel = /** @class */ (function () {
69
69
  _a[constants_1.NOT_CONTAINS] = 'evaluateNotContains',
70
70
  _a[constants_1.REGEX] = 'evaluateRegex',
71
71
  _a[constants_1.MODULO] = 'evaluateModulo',
72
+ _a[constants_1.IN] = 'evaluateIn',
72
73
  _a);
73
74
  this.operator = operator;
74
75
  this.value = value;
@@ -90,7 +91,11 @@ var SegmentConditionModel = /** @class */ (function () {
90
91
  var parts = (_this.value).split("|");
91
92
  var _a = __read([parseFloat(parts[0]), parseFloat(parts[1])], 2), divisor = _a[0], reminder = _a[1];
92
93
  return traitValue % divisor === reminder;
93
- }
94
+ },
95
+ evaluateIn: function (traitValue) {
96
+ var _a;
97
+ return (_a = _this.value) === null || _a === void 0 ? void 0 : _a.split(',').includes(traitValue.toString());
98
+ },
94
99
  };
95
100
  // TODO: move this logic to the evaluator module
96
101
  if (this.EXCEPTION_OPERATOR_METHODS[this.operator]) {
@@ -1,3 +1,4 @@
1
+ import { Logger } from 'pino';
1
2
  export declare class AnalyticsProcessor {
2
3
  private analyticsEndpoint;
3
4
  private environmentKey;
@@ -6,6 +7,7 @@ export declare class AnalyticsProcessor {
6
7
  [key: string]: any;
7
8
  };
8
9
  private requestTimeoutMs;
10
+ private logger;
9
11
  /**
10
12
  * AnalyticsProcessor is used to track how often individual Flags are evaluated within
11
13
  * the Flagsmith SDK. Docs: https://docs.flagsmith.com/advanced-use/flag-analytics.
@@ -19,6 +21,7 @@ export declare class AnalyticsProcessor {
19
21
  environmentKey: string;
20
22
  baseApiUrl: string;
21
23
  requestTimeoutMs?: number;
24
+ logger?: Logger;
22
25
  });
23
26
  /**
24
27
  * Sends all the collected data to the api asynchronously and resets the timer
@@ -41,6 +41,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.AnalyticsProcessor = void 0;
43
43
  var node_fetch_1 = __importDefault(require("node-fetch"));
44
+ var pino_1 = __importDefault(require("pino"));
44
45
  var ANALYTICS_ENDPOINT = 'analytics/flags/';
45
46
  // Used to control how often we send data(in seconds)
46
47
  var ANALYTICS_TIMER = 10;
@@ -61,18 +62,23 @@ var AnalyticsProcessor = /** @class */ (function () {
61
62
  this.lastFlushed = Date.now();
62
63
  this.analyticsData = {};
63
64
  this.requestTimeoutMs = data.requestTimeoutMs || this.requestTimeoutMs;
65
+ this.logger = data.logger || (0, pino_1.default)();
64
66
  }
65
67
  /**
66
68
  * Sends all the collected data to the api asynchronously and resets the timer
67
69
  */
68
70
  AnalyticsProcessor.prototype.flush = function () {
69
71
  return __awaiter(this, void 0, void 0, function () {
72
+ var error_1;
70
73
  return __generator(this, function (_a) {
71
74
  switch (_a.label) {
72
75
  case 0:
73
76
  if (!Object.keys(this.analyticsData).length) {
74
77
  return [2 /*return*/];
75
78
  }
79
+ _a.label = 1;
80
+ case 1:
81
+ _a.trys.push([1, 3, , 4]);
76
82
  return [4 /*yield*/, (0, node_fetch_1.default)(this.analyticsEndpoint, {
77
83
  method: 'POST',
78
84
  body: JSON.stringify(this.analyticsData),
@@ -82,8 +88,16 @@ var AnalyticsProcessor = /** @class */ (function () {
82
88
  'X-Environment-Key': this.environmentKey
83
89
  }
84
90
  })];
85
- case 1:
91
+ case 2:
86
92
  _a.sent();
93
+ return [3 /*break*/, 4];
94
+ case 3:
95
+ error_1 = _a.sent();
96
+ // We don't want failing to write analytics to cause any exceptions in the main
97
+ // thread so we just swallow them here.
98
+ this.logger.warn('Failed to post analytics to Flagsmith API. Not clearing data, will retry.');
99
+ return [2 /*return*/];
100
+ case 4:
87
101
  this.analyticsData = {};
88
102
  this.lastFlushed = Date.now();
89
103
  return [2 /*return*/];
@@ -31,6 +31,7 @@ export declare class Flagsmith {
31
31
  private cache?;
32
32
  private onEnvironmentChange?;
33
33
  private analyticsProcessor?;
34
+ private logger;
34
35
  /**
35
36
  * A Flagsmith client.
36
37
  *
@@ -60,6 +61,7 @@ export declare class Flagsmith {
60
61
  @param data.defaultFlagHandler: callable which will be used in the case where
61
62
  flags cannot be retrieved from the API or a non existent feature is
62
63
  requested
64
+ @param data.logger: an instance of the pino Logger class to use for logging
63
65
  */
64
66
  constructor(data: FlagsmithConfig);
65
67
  /**
@@ -62,6 +62,9 @@ var __read = (this && this.__read) || function (o, n) {
62
62
  }
63
63
  return ar;
64
64
  };
65
+ var __importDefault = (this && this.__importDefault) || function (mod) {
66
+ return (mod && mod.__esModule) ? mod : { "default": mod };
67
+ };
65
68
  Object.defineProperty(exports, "__esModule", { value: true });
66
69
  exports.Flagsmith = exports.EnvironmentDataPollingManager = exports.Flags = exports.DefaultFlag = exports.FlagsmithClientError = exports.FlagsmithAPIError = exports.AnalyticsProcessor = void 0;
67
70
  var flagsmith_engine_1 = require("../flagsmith-engine");
@@ -74,6 +77,7 @@ var models_3 = require("./models");
74
77
  var polling_manager_1 = require("./polling_manager");
75
78
  var utils_1 = require("./utils");
76
79
  var evaluators_1 = require("../flagsmith-engine/segments/evaluators");
80
+ var pino_1 = __importDefault(require("pino"));
77
81
  var analytics_2 = require("./analytics");
78
82
  Object.defineProperty(exports, "AnalyticsProcessor", { enumerable: true, get: function () { return analytics_2.AnalyticsProcessor; } });
79
83
  var errors_2 = require("./errors");
@@ -115,6 +119,7 @@ var Flagsmith = /** @class */ (function () {
115
119
  @param data.defaultFlagHandler: callable which will be used in the case where
116
120
  flags cannot be retrieved from the API or a non existent feature is
117
121
  requested
122
+ @param data.logger: an instance of the pino Logger class to use for logging
118
123
  */
119
124
  function Flagsmith(data) {
120
125
  this.apiUrl = DEFAULT_API_URL;
@@ -137,6 +142,7 @@ var Flagsmith = /** @class */ (function () {
137
142
  this.identitiesUrl = "".concat(this.apiUrl, "identities/");
138
143
  this.environmentUrl = "".concat(this.apiUrl, "environment-document/");
139
144
  this.onEnvironmentChange = data.onEnvironmentChange;
145
+ this.logger = data.logger || (0, pino_1.default)();
140
146
  if (!!data.cache) {
141
147
  var missingMethods = ['has', 'get', 'set'].filter(function (method) { return data.cache && !data.cache[method]; });
142
148
  if (missingMethods.length > 0) {
@@ -156,7 +162,8 @@ var Flagsmith = /** @class */ (function () {
156
162
  ? new analytics_1.AnalyticsProcessor({
157
163
  environmentKey: this.environmentKey,
158
164
  baseApiUrl: this.apiUrl,
159
- requestTimeoutMs: this.requestTimeoutMs
165
+ requestTimeoutMs: this.requestTimeoutMs,
166
+ logger: this.logger
160
167
  })
161
168
  : undefined;
162
169
  }
@@ -216,6 +223,9 @@ var Flagsmith = /** @class */ (function () {
216
223
  return __generator(this, function (_b) {
217
224
  switch (_b.label) {
218
225
  case 0:
226
+ if (!identifier) {
227
+ throw new Error("`identifier` argument is missing or invalid.");
228
+ }
219
229
  _a = !!this.cache;
220
230
  if (!_a) return [3 /*break*/, 2];
221
231
  return [4 /*yield*/, this.cache.get("flags-".concat(identifier))];
@@ -253,6 +263,9 @@ var Flagsmith = /** @class */ (function () {
253
263
  */
254
264
  Flagsmith.prototype.getIdentitySegments = function (identifier, traits) {
255
265
  var _this = this;
266
+ if (!identifier) {
267
+ throw new Error("`identifier` argument is missing or invalid.");
268
+ }
256
269
  traits = traits || {};
257
270
  if (this.enableLocalEvaluation) {
258
271
  return new Promise(function (resolve, reject) {
@@ -416,7 +429,7 @@ var Flagsmith = /** @class */ (function () {
416
429
  featureStates: featureStates,
417
430
  analyticsProcessor: this.analyticsProcessor,
418
431
  defaultFlagHandler: this.defaultFlagHandler,
419
- identityID: identityModel.djangoID || identityModel.identityUuid
432
+ identityID: identityModel.djangoID || identityModel.compositeKey
420
433
  });
421
434
  if (!!!this.cache) return [3 /*break*/, 2];
422
435
  // @ts-ignore node-cache types are incorrect, ttl should be optional
@@ -1,6 +1,7 @@
1
1
  import { DefaultFlag, Flags } from "./models";
2
2
  import { EnvironmentModel } from "../flagsmith-engine";
3
3
  import { RequestInit } from "node-fetch";
4
+ import { Logger } from "pino";
4
5
  export interface FlagsmithCache {
5
6
  get(key: string): Promise<Flags | undefined> | undefined;
6
7
  set(key: string, value: Flags, ttl: string | number): boolean | Promise<boolean>;
@@ -22,4 +23,5 @@ export interface FlagsmithConfig {
22
23
  defaultFlagHandler?: (featureName: string) => DefaultFlag;
23
24
  cache?: FlagsmithCache;
24
25
  onEnvironmentChange?: (error: Error | null, result: EnvironmentModel) => void;
26
+ logger?: Logger;
25
27
  }
@@ -1783,9 +1783,9 @@
1783
1783
  }
1784
1784
  },
1785
1785
  "node_modules/decode-uri-component": {
1786
- "version": "0.2.0",
1787
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
1788
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
1786
+ "version": "0.2.2",
1787
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
1788
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
1789
1789
  "dev": true,
1790
1790
  "optional": true,
1791
1791
  "engines": {
@@ -3923,13 +3923,10 @@
3923
3923
  "dev": true
3924
3924
  },
3925
3925
  "node_modules/json5": {
3926
- "version": "2.1.0",
3927
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
3928
- "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
3926
+ "version": "2.2.3",
3927
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
3928
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
3929
3929
  "dev": true,
3930
- "dependencies": {
3931
- "minimist": "^1.2.0"
3932
- },
3933
3930
  "bin": {
3934
3931
  "json5": "lib/cli.js"
3935
3932
  },
@@ -4114,9 +4111,9 @@
4114
4111
  }
4115
4112
  },
4116
4113
  "node_modules/minimatch": {
4117
- "version": "3.0.4",
4118
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
4119
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
4114
+ "version": "3.1.2",
4115
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
4116
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
4120
4117
  "dev": true,
4121
4118
  "dependencies": {
4122
4119
  "brace-expansion": "^1.1.7"
@@ -7515,9 +7512,9 @@
7515
7512
  }
7516
7513
  },
7517
7514
  "decode-uri-component": {
7518
- "version": "0.2.0",
7519
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
7520
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
7515
+ "version": "0.2.2",
7516
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
7517
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
7521
7518
  "dev": true,
7522
7519
  "optional": true
7523
7520
  },
@@ -9208,13 +9205,10 @@
9208
9205
  "dev": true
9209
9206
  },
9210
9207
  "json5": {
9211
- "version": "2.1.0",
9212
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
9213
- "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
9214
- "dev": true,
9215
- "requires": {
9216
- "minimist": "^1.2.0"
9217
- }
9208
+ "version": "2.2.3",
9209
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
9210
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
9211
+ "dev": true
9218
9212
  },
9219
9213
  "kind-of": {
9220
9214
  "version": "6.0.3",
@@ -9351,9 +9345,9 @@
9351
9345
  "dev": true
9352
9346
  },
9353
9347
  "minimatch": {
9354
- "version": "3.0.4",
9355
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
9356
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
9348
+ "version": "3.1.2",
9349
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
9350
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
9357
9351
  "dev": true,
9358
9352
  "requires": {
9359
9353
  "brace-expansion": "^1.1.7"
@@ -1750,9 +1750,9 @@
1750
1750
  }
1751
1751
  },
1752
1752
  "node_modules/decode-uri-component": {
1753
- "version": "0.2.0",
1754
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
1755
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
1753
+ "version": "0.2.2",
1754
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
1755
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
1756
1756
  "dev": true,
1757
1757
  "optional": true,
1758
1758
  "engines": {
@@ -3857,13 +3857,10 @@
3857
3857
  "dev": true
3858
3858
  },
3859
3859
  "node_modules/json5": {
3860
- "version": "2.1.0",
3861
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
3862
- "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
3860
+ "version": "2.2.3",
3861
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
3862
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
3863
3863
  "dev": true,
3864
- "dependencies": {
3865
- "minimist": "^1.2.0"
3866
- },
3867
3864
  "bin": {
3868
3865
  "json5": "lib/cli.js"
3869
3866
  },
@@ -4048,9 +4045,9 @@
4048
4045
  }
4049
4046
  },
4050
4047
  "node_modules/minimatch": {
4051
- "version": "3.0.4",
4052
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
4053
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
4048
+ "version": "3.1.2",
4049
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
4050
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
4054
4051
  "dev": true,
4055
4052
  "dependencies": {
4056
4053
  "brace-expansion": "^1.1.7"
@@ -4060,10 +4057,13 @@
4060
4057
  }
4061
4058
  },
4062
4059
  "node_modules/minimist": {
4063
- "version": "1.2.6",
4064
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
4065
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
4066
- "dev": true
4060
+ "version": "1.2.7",
4061
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
4062
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
4063
+ "dev": true,
4064
+ "funding": {
4065
+ "url": "https://github.com/sponsors/ljharb"
4066
+ }
4067
4067
  },
4068
4068
  "node_modules/mixin-deep": {
4069
4069
  "version": "1.3.2",
@@ -7426,9 +7426,9 @@
7426
7426
  }
7427
7427
  },
7428
7428
  "decode-uri-component": {
7429
- "version": "0.2.0",
7430
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
7431
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
7429
+ "version": "0.2.2",
7430
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
7431
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
7432
7432
  "dev": true,
7433
7433
  "optional": true
7434
7434
  },
@@ -9095,13 +9095,10 @@
9095
9095
  "dev": true
9096
9096
  },
9097
9097
  "json5": {
9098
- "version": "2.1.0",
9099
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
9100
- "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
9101
- "dev": true,
9102
- "requires": {
9103
- "minimist": "^1.2.0"
9104
- }
9098
+ "version": "2.2.3",
9099
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
9100
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
9101
+ "dev": true
9105
9102
  },
9106
9103
  "kind-of": {
9107
9104
  "version": "6.0.3",
@@ -9238,18 +9235,18 @@
9238
9235
  "dev": true
9239
9236
  },
9240
9237
  "minimatch": {
9241
- "version": "3.0.4",
9242
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
9243
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
9238
+ "version": "3.1.2",
9239
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
9240
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
9244
9241
  "dev": true,
9245
9242
  "requires": {
9246
9243
  "brace-expansion": "^1.1.7"
9247
9244
  }
9248
9245
  },
9249
9246
  "minimist": {
9250
- "version": "1.2.6",
9251
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
9252
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
9247
+ "version": "1.2.7",
9248
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
9249
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
9253
9250
  "dev": true
9254
9251
  },
9255
9252
  "mixin-deep": {