@panneau/core 3.0.118 → 3.0.126

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/lib/utils.js CHANGED
@@ -1,15 +1,12 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
3
  var _regeneratorRuntime = require('@babel/runtime/helpers/regeneratorRuntime');
6
4
  var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
7
5
  var EventEmitter = require('wolfy87-eventemitter');
8
6
  var isNumber = require('lodash/isNumber');
9
- var snakeCase = require('snake-case');
7
+ var tslib = require('tslib');
10
8
  var isObject = require('lodash/isObject');
11
9
  var react = require('react');
12
- var changeCase = require('change-case');
13
10
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
14
11
  var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
15
12
  var ReactIs = require('react-is');
@@ -21,27 +18,75 @@ var get = require('lodash/get');
21
18
  var capitalize = require('lodash/capitalize');
22
19
  var slugify = require('slugify');
23
20
 
24
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
25
-
26
- var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime);
27
- var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator);
28
- var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
29
- var isNumber__default = /*#__PURE__*/_interopDefaultLegacy(isNumber);
30
- var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
31
- var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
32
- var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
33
- var ReactIs__default = /*#__PURE__*/_interopDefaultLegacy(ReactIs);
34
- var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
35
- var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
36
- var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray);
37
- var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
38
- var get__default = /*#__PURE__*/_interopDefaultLegacy(get);
39
- var capitalize__default = /*#__PURE__*/_interopDefaultLegacy(capitalize);
40
- var slugify__default = /*#__PURE__*/_interopDefaultLegacy(slugify);
21
+ /**
22
+ * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt
23
+ */
24
+ /**
25
+ * Lower case as a function.
26
+ */
27
+ function lowerCase(str) {
28
+ return str.toLowerCase();
29
+ }
30
+
31
+ // Support camel case ("camelCase" -> "camel Case" and "CAMELCase" -> "CAMEL Case").
32
+ var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];
33
+ // Remove all non-word characters.
34
+ var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
35
+ /**
36
+ * Normalize the string into something other libraries can manipulate easier.
37
+ */
38
+ function noCase(input, options) {
39
+ if (options === void 0) {
40
+ options = {};
41
+ }
42
+ var _a = options.splitRegexp,
43
+ splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a,
44
+ _b = options.stripRegexp,
45
+ stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b,
46
+ _c = options.transform,
47
+ transform = _c === void 0 ? lowerCase : _c,
48
+ _d = options.delimiter,
49
+ delimiter = _d === void 0 ? " " : _d;
50
+ var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0");
51
+ var start = 0;
52
+ var end = result.length;
53
+ // Trim the delimiter from around the output string.
54
+ while (result.charAt(start) === "\0") start++;
55
+ while (result.charAt(end - 1) === "\0") end--;
56
+ // Transform each token independently.
57
+ return result.slice(start, end).split("\0").map(transform).join(delimiter);
58
+ }
59
+ /**
60
+ * Replace `re` in the input string with the replacement value.
61
+ */
62
+ function replace(input, re, value) {
63
+ if (re instanceof RegExp) return input.replace(re, value);
64
+ return re.reduce(function (input, re) {
65
+ return input.replace(re, value);
66
+ }, input);
67
+ }
68
+
69
+ function dotCase(input, options) {
70
+ if (options === void 0) {
71
+ options = {};
72
+ }
73
+ return noCase(input, tslib.__assign({
74
+ delimiter: "."
75
+ }, options));
76
+ }
77
+
78
+ function snakeCase(input, options) {
79
+ if (options === void 0) {
80
+ options = {};
81
+ }
82
+ return dotCase(input, tslib.__assign({
83
+ delimiter: "_"
84
+ }, options));
85
+ }
41
86
 
42
87
  var convertStyleToString = function convertStyleToString(style) {
43
88
  return style !== null ? Object.keys(style).map(function (key) {
44
- return "".concat(snakeCase.snakeCase(key), ":").concat(isNumber__default["default"](style[key]) ? "".concat(style[key], "px") : style[key], ";");
89
+ return "".concat(snakeCase(key), ":").concat(isNumber(style[key]) ? "".concat(style[key], "px") : style[key], ";");
45
90
  }).join('\n') : '';
46
91
  };
47
92
  var convertStyleToString$1 = convertStyleToString;
@@ -50,7 +95,7 @@ var createNullableOnChange = function createNullableOnChange() {
50
95
  var onChange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
51
96
  return function (newValue) {
52
97
  var nullableValue = newValue;
53
- if (isObject__default["default"](newValue)) {
98
+ if (isObject(newValue)) {
54
99
  var allNull = Object.keys(newValue).reduce(function (acc, key) {
55
100
  return acc && newValue[key] === null;
56
101
  }, true);
@@ -94,8 +139,8 @@ function copyClipboardApi(_x) {
94
139
  return _copyClipboardApi.apply(this, arguments);
95
140
  }
96
141
  function _copyClipboardApi() {
97
- _copyClipboardApi = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"]().mark(function _callee(text) {
98
- return _regeneratorRuntime__default["default"]().wrap(function _callee$(_context) {
142
+ _copyClipboardApi = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(text) {
143
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
99
144
  while (1) switch (_context.prev = _context.next) {
100
145
  case 0:
101
146
  if (navigator.clipboard) {
@@ -117,9 +162,9 @@ function copyExecCommand(_x2) {
117
162
  return _copyExecCommand.apply(this, arguments);
118
163
  }
119
164
  function _copyExecCommand() {
120
- _copyExecCommand = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"]().mark(function _callee2(text) {
165
+ _copyExecCommand = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(text) {
121
166
  var span, selection, range, success;
122
- return _regeneratorRuntime__default["default"]().wrap(function _callee2$(_context2) {
167
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
123
168
  while (1) switch (_context2.prev = _context2.next) {
124
169
  case 0:
125
170
  // Put the text to copy into a <span>
@@ -167,8 +212,8 @@ function copyToClipboard(_x3) {
167
212
  return _copyToClipboard.apply(this, arguments);
168
213
  }
169
214
  function _copyToClipboard() {
170
- _copyToClipboard = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"]().mark(function _callee3(text) {
171
- return _regeneratorRuntime__default["default"]().wrap(function _callee3$(_context3) {
215
+ _copyToClipboard = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(text) {
216
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
172
217
  while (1) switch (_context3.prev = _context3.next) {
173
218
  case 0:
174
219
  _context3.prev = 0;
@@ -199,24 +244,51 @@ function _copyToClipboard() {
199
244
  return _copyToClipboard.apply(this, arguments);
200
245
  }
201
246
 
247
+ function pascalCaseTransform(input, index) {
248
+ var firstChar = input.charAt(0);
249
+ var lowerChars = input.substr(1).toLowerCase();
250
+ if (index > 0 && firstChar >= "0" && firstChar <= "9") {
251
+ return "_" + firstChar + lowerChars;
252
+ }
253
+ return "" + firstChar.toUpperCase() + lowerChars;
254
+ }
255
+ function pascalCase(input, options) {
256
+ if (options === void 0) {
257
+ options = {};
258
+ }
259
+ return noCase(input, tslib.__assign({
260
+ delimiter: "",
261
+ transform: pascalCaseTransform
262
+ }, options));
263
+ }
264
+
265
+ function paramCase(input, options) {
266
+ if (options === void 0) {
267
+ options = {};
268
+ }
269
+ return dotCase(input, tslib.__assign({
270
+ delimiter: "-"
271
+ }, options));
272
+ }
273
+
202
274
  var flattenComponents = function flattenComponents(components) {
203
275
  var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
204
276
  if (components === null) {
205
277
  return null;
206
278
  }
207
279
  return Object.keys(components).reduce(function (newMap, key) {
208
- return ReactIs__default["default"].isValidElementType(components[key]) ? _objectSpread__default["default"](_objectSpread__default["default"]({}, newMap), {}, _defineProperty__default["default"]({}, prefix !== null ? "".concat(prefix, ".").concat(key) : key, components[key])) : _objectSpread__default["default"](_objectSpread__default["default"]({}, newMap), flattenComponents(components[key], key));
280
+ return ReactIs.isValidElementType(components[key]) ? _objectSpread(_objectSpread({}, newMap), {}, _defineProperty({}, prefix !== null ? "".concat(prefix, ".").concat(key) : key, components[key])) : _objectSpread(_objectSpread({}, newMap), flattenComponents(components[key], key));
209
281
  }, {});
210
282
  };
211
283
  var flattenComponents$1 = flattenComponents;
212
284
 
213
285
  var _excluded$1 = ["component"];
214
286
  var getComponent = function getComponent(component) {
215
- var _ref = isObject__default["default"](component) ? component : {
287
+ var _ref = isObject(component) ? component : {
216
288
  component: component
217
289
  };
218
290
  _ref.component;
219
- var props = _objectWithoutProperties__default["default"](_ref, _excluded$1);
291
+ var props = _objectWithoutProperties(_ref, _excluded$1);
220
292
  return {
221
293
  name: component,
222
294
  props: props
@@ -241,7 +313,7 @@ var getColumnFromField = function getColumnFromField(field) {
241
313
  componentName = _getComponent$name === void 0 ? null : _getComponent$name,
242
314
  _getComponent$props = _getComponent.props,
243
315
  componentProps = _getComponent$props === void 0 ? null : _getComponent$props;
244
- return _objectSpread__default["default"](_objectSpread__default["default"]({}, componentProps), {}, {
316
+ return _objectSpread(_objectSpread({}, componentProps), {}, {
245
317
  id: name,
246
318
  label: label,
247
319
  valueKey: name,
@@ -252,16 +324,16 @@ var getColumnFromField = function getColumnFromField(field) {
252
324
  var getColumnsWithFields = function getColumnsWithFields(resource, columns) {
253
325
  var fields = resource.fields;
254
326
  var newColumns = columns !== null ? columns.map(function (column) {
255
- var _ref = isString__default["default"](column) ? {
327
+ var _ref = isString(column) ? {
256
328
  field: column
257
329
  } : column,
258
330
  _ref$id = _ref.id,
259
331
  colId = _ref$id === void 0 ? null : _ref$id,
260
332
  _ref$field = _ref.field,
261
333
  colField = _ref$field === void 0 ? null : _ref$field,
262
- otherProps = _objectWithoutProperties__default["default"](_ref, _excluded);
334
+ otherProps = _objectWithoutProperties(_ref, _excluded);
263
335
  var fieldName = colField || colId;
264
- return _objectSpread__default["default"](_objectSpread__default["default"](_objectSpread__default["default"]({}, fieldName !== null ? getColumnFromField(fields.find(function (it) {
336
+ return _objectSpread(_objectSpread(_objectSpread({}, fieldName !== null ? getColumnFromField(fields.find(function (it) {
265
337
  return it.name === fieldName;
266
338
  }) || null) : null), otherProps), {}, {
267
339
  id: colId
@@ -280,7 +352,7 @@ var getComponentFromName = function getComponentFromName() {
280
352
  if (components === null || name === null) {
281
353
  return defaultComponent;
282
354
  }
283
- var pascalName = changeCase.pascalCase(name);
355
+ var pascalName = pascalCase(name);
284
356
  // console.log(name, pascalName, components);
285
357
  var component = components[pascalName] || components[name] || defaultComponent;
286
358
  if (!component) {
@@ -294,10 +366,10 @@ var getDefinitionFromId = function getDefinitionFromId() {
294
366
  var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
295
367
  var items = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
296
368
  var defaultObject = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
297
- if (items === null || id === null || isArray__default["default"](items) && items.length === 0) {
369
+ if (items === null || id === null || isArray(items) && items.length === 0) {
298
370
  return defaultObject;
299
371
  }
300
- var pascalId = changeCase.pascalCase(id);
372
+ var pascalId = pascalCase(id);
301
373
  return items.find(function (i) {
302
374
  return i.id === pascalId;
303
375
  }) || items.find(function (i) {
@@ -333,7 +405,7 @@ var getFieldByName = function getFieldByName(fields, name) {
333
405
  var getFieldByName$1 = getFieldByName;
334
406
 
335
407
  var getFieldFromPath = function getFieldFromPath(path, fields, fieldManager) {
336
- return (isArray__default["default"](path) ? path : [path]).reduce(function (foundField, key) {
408
+ return (isArray(path) ? path : [path]).reduce(function (foundField, key) {
337
409
  if (foundField === null) {
338
410
  return null;
339
411
  }
@@ -352,12 +424,12 @@ var getFieldFromPath = function getFieldFromPath(path, fields, fieldManager) {
352
424
  _ref$itemsField = _ref.itemsField,
353
425
  itemsField = _ref$itemsField === void 0 ? null : _ref$itemsField;
354
426
  if (itemsField !== null && key.match(/^[0-9]+$/)) {
355
- return _objectSpread__default["default"](_objectSpread__default["default"]({}, itemsField), {}, {
427
+ return _objectSpread(_objectSpread({}, itemsField), {}, {
356
428
  name: path.join('/'),
357
429
  listItems: true
358
430
  });
359
431
  }
360
- return getFieldByName$1([].concat(_toConsumableArray__default["default"](fieldFields || []), _toConsumableArray__default["default"](subFields || []), _toConsumableArray__default["default"](settings || [])), key);
432
+ return getFieldByName$1([].concat(_toConsumableArray(fieldFields || []), _toConsumableArray(subFields || []), _toConsumableArray(settings || [])), key);
361
433
  }, {
362
434
  fields: fields
363
435
  });
@@ -374,8 +446,8 @@ var getFileName = function getFileName() {
374
446
  var getFileName$1 = getFileName;
375
447
 
376
448
  var getPathValue = function getPathValue(it, path) {
377
- var value = get__default["default"](it, path, null);
378
- return value !== null && isObject__default["default"](value) ? Object.values(value).reduce(function (foundValue, value) {
449
+ var value = get(it, path, null);
450
+ return value !== null && isObject(value) ? Object.values(value).reduce(function (foundValue, value) {
379
451
  return foundValue !== null ? foundValue : value;
380
452
  }, null) : value;
381
453
  };
@@ -383,14 +455,14 @@ var getPathValue$1 = getPathValue;
383
455
 
384
456
  var getSelectOptions = function getSelectOptions(options) {
385
457
  return options.map(function (it) {
386
- if (isObject__default["default"](it)) {
458
+ if (isObject(it)) {
387
459
  var _it$label = it.label,
388
460
  label = _it$label === void 0 ? null : _it$label,
389
461
  value = it.value;
390
462
  if (label === null) {
391
463
  return {
392
464
  value: value,
393
- label: capitalize__default["default"]("".concat(value))
465
+ label: capitalize("".concat(value))
394
466
  };
395
467
  }
396
468
  return {
@@ -400,14 +472,14 @@ var getSelectOptions = function getSelectOptions(options) {
400
472
  }
401
473
  return {
402
474
  value: it,
403
- label: capitalize__default["default"]("".concat(it))
475
+ label: capitalize("".concat(it))
404
476
  };
405
477
  });
406
478
  };
407
479
  var getSelectOptions$1 = getSelectOptions;
408
480
 
409
481
  var isMessage = function isMessage(message) {
410
- return isObject__default["default"](message) && typeof message.defaultMessage !== 'undefined';
482
+ return isObject(message) && typeof message.defaultMessage !== 'undefined';
411
483
  };
412
484
  var isMessage$1 = isMessage;
413
485
 
@@ -415,7 +487,7 @@ var isMessage$1 = isMessage;
415
487
  * Locale loader
416
488
  */
417
489
  var loaders = {};
418
- var events = new EventEmitter__default["default"]();
490
+ var events = new EventEmitter();
419
491
  function loadPackage(name, loader) {
420
492
  if (typeof loaders[name] === 'undefined') {
421
493
  loaders[name] = {
@@ -451,10 +523,10 @@ var setValue = function setValue(value, keyParts, fieldValue) {
451
523
  if (value !== null || fieldValue !== null) {
452
524
  if (isArray) {
453
525
  var index = parseInt(key, 10);
454
- var newArrayValue = fieldValue !== null ? [].concat(_toConsumableArray__default["default"](value.slice(0, index)), [keyParts.length > 0 ? setValue(value !== null ? value[index] || null : null, keyParts, fieldValue) : fieldValue], _toConsumableArray__default["default"](value.slice(index + 1))) : [].concat(_toConsumableArray__default["default"](value.slice(0, index)), _toConsumableArray__default["default"](value.slice(index + 1)));
526
+ var newArrayValue = fieldValue !== null ? [].concat(_toConsumableArray(value.slice(0, index)), [keyParts.length > 0 ? setValue(value !== null ? value[index] || null : null, keyParts, fieldValue) : fieldValue], _toConsumableArray(value.slice(index + 1))) : [].concat(_toConsumableArray(value.slice(0, index)), _toConsumableArray(value.slice(index + 1)));
455
527
  return newArrayValue.length > 0 ? newArrayValue : null;
456
528
  }
457
- return _objectSpread__default["default"](_objectSpread__default["default"]({}, value), {}, _defineProperty__default["default"]({}, key, keyParts.length > 0 ? setValue(value !== null ? value[key] || null : null, keyParts, fieldValue) : fieldValue));
529
+ return _objectSpread(_objectSpread({}, value), {}, _defineProperty({}, key, keyParts.length > 0 ? setValue(value !== null ? value[key] || null : null, keyParts, fieldValue) : fieldValue));
458
530
  }
459
531
  return null;
460
532
  };
@@ -464,11 +536,11 @@ var slug = function slug(str) {
464
536
  var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
465
537
  var toSlug;
466
538
  if (separator === '-') {
467
- toSlug = changeCase.paramCase(str);
539
+ toSlug = paramCase(str);
468
540
  } else {
469
- toSlug = changeCase.snakeCase(str);
541
+ toSlug = snakeCase(str);
470
542
  }
471
- return slugify__default["default"](toSlug, {
543
+ return slugify(toSlug, {
472
544
  lower: true
473
545
  });
474
546
  };
@@ -488,22 +560,11 @@ var validateFields = function validateFields(fields, value) {
488
560
  };
489
561
  var validateFields$1 = validateFields;
490
562
 
491
- Object.defineProperty(exports, 'dashCase', {
492
- enumerable: true,
493
- get: function () { return changeCase.paramCase; }
494
- });
495
- Object.defineProperty(exports, 'pascalCase', {
496
- enumerable: true,
497
- get: function () { return changeCase.pascalCase; }
498
- });
499
- Object.defineProperty(exports, 'snakeCase', {
500
- enumerable: true,
501
- get: function () { return changeCase.snakeCase; }
502
- });
503
563
  exports.convertStyleToString = convertStyleToString$1;
504
564
  exports.copyToClipboard = copyToClipboard;
505
565
  exports.createNullableOnChange = createNullableOnChange$1;
506
566
  exports.createUseEvent = createUseEvent$1;
567
+ exports.dashCase = paramCase;
507
568
  exports.flattenComponents = flattenComponents$1;
508
569
  exports.getColumnsWithFields = getColumnsWithFields$1;
509
570
  exports.getComponent = getComponent$1;
@@ -517,6 +578,8 @@ exports.getPathValue = getPathValue$1;
517
578
  exports.getSelectOptions = getSelectOptions$1;
518
579
  exports.isMessage = isMessage$1;
519
580
  exports.loadPackage = loadPackage;
581
+ exports.pascalCase = pascalCase;
520
582
  exports.setFieldValue = setValue$1;
521
583
  exports.slug = slug$1;
584
+ exports.snakeCase = snakeCase;
522
585
  exports.validateFields = validateFields$1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/core",
3
- "version": "3.0.118",
3
+ "version": "3.0.126",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -67,7 +67,8 @@
67
67
  "utils.js"
68
68
  ],
69
69
  "scripts": {
70
- "prepare": "../../scripts/prepare-package.sh --scss"
70
+ "prepublishOnly": "npm run build",
71
+ "build": "../../scripts/prepare-package.sh --scss"
71
72
  },
72
73
  "devDependencies": {
73
74
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
@@ -84,11 +85,11 @@
84
85
  "@folklore/routes": "^0.2.26",
85
86
  "@folklore/services": "^0.1.24",
86
87
  "@folklore/tracking": "^0.0.16",
87
- "@fortawesome/fontawesome-svg-core": "^1.2.35",
88
- "@fortawesome/free-solid-svg-icons": "^5.15.3",
89
- "@fortawesome/react-fontawesome": "^0.1.14",
88
+ "@fortawesome/fontawesome-svg-core": "^6.5.1",
89
+ "@fortawesome/free-solid-svg-icons": "^6.5.1",
90
+ "@fortawesome/react-fontawesome": "^0.2.0",
90
91
  "bootstrap": "^5.3.1",
91
- "change-case": "^4.1.2",
92
+ "change-case": "^4.0.0",
92
93
  "classnames": "^2.2.6",
93
94
  "css-mediaquery": "^0.1.2",
94
95
  "dayjs": "^1.10.4",
@@ -100,7 +101,6 @@
100
101
  "react-helmet": "^6.1.0",
101
102
  "react-intl": "^5.15.8||^6.0.0",
102
103
  "react-is": "^17.0.2",
103
- "react-use-gesture": "^9.0.0",
104
104
  "slugify": "^1.5.0",
105
105
  "snake-case": "^3.0.4",
106
106
  "tinycolor2": "^1.4.2",
@@ -111,5 +111,5 @@
111
111
  "publishConfig": {
112
112
  "access": "public"
113
113
  },
114
- "gitHead": "5601e6c62ee5d204d2ef662cf7db64b8833c50d6"
114
+ "gitHead": "fa69ddff3f8cf22b00504093087608d5701e6f6a"
115
115
  }