@docusaurus/core 0.0.0-4605 → 0.0.0-4609

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.
@@ -20,10 +20,10 @@ import App from './App';
20
20
  import { createStatefulLinksCollector, ProvideLinksCollector, } from './LinksCollector';
21
21
  import logger from '@docusaurus/logger';
22
22
  // eslint-disable-next-line no-restricted-imports
23
- import { memoize } from 'lodash';
23
+ import _ from 'lodash';
24
24
  // eslint-disable-next-line @typescript-eslint/no-var-requires
25
25
  const packageJson = require('../../package.json');
26
- const getCompiledSSRTemplate = memoize((template) => eta.compile(template.trim(), {
26
+ const getCompiledSSRTemplate = _.memoize((template) => eta.compile(template.trim(), {
27
27
  rmWhitespace: true,
28
28
  }));
29
29
  function renderSSRTemplate(ssrTemplate, data) {
@@ -12,7 +12,7 @@ const logger_1 = (0, tslib_1.__importDefault)(require("@docusaurus/logger"));
12
12
  const chokidar_1 = (0, tslib_1.__importDefault)(require("chokidar"));
13
13
  const html_webpack_plugin_1 = (0, tslib_1.__importDefault)(require("html-webpack-plugin"));
14
14
  const path_1 = (0, tslib_1.__importDefault)(require("path"));
15
- const lodash_1 = require("lodash");
15
+ const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));
16
16
  const openBrowser_1 = (0, tslib_1.__importDefault)(require("react-dev-utils/openBrowser"));
17
17
  const WebpackDevServerUtils_1 = require("react-dev-utils/WebpackDevServerUtils");
18
18
  const evalSourceMapMiddleware_1 = (0, tslib_1.__importDefault)(require("react-dev-utils/evalSourceMapMiddleware"));
@@ -48,7 +48,7 @@ async function start(siteDir, cliOptions) {
48
48
  const openUrl = (0, utils_1.normalizeUrl)([urls.localUrlForBrowser, baseUrl]);
49
49
  logger_1.default.success `Docusaurus website is running at path=${openUrl}.`;
50
50
  // Reload files processing.
51
- const reload = (0, lodash_1.debounce)(() => {
51
+ const reload = lodash_1.default.debounce(() => {
52
52
  loadSite()
53
53
  .then(({ baseUrl: newBaseUrl }) => {
54
54
  const newOpenUrl = (0, utils_1.normalizeUrl)([urls.localUrlForBrowser, newBaseUrl]);
@@ -10,7 +10,7 @@ exports.handleBrokenLinks = exports.filterExistingFileLinks = exports.getBrokenL
10
10
  const tslib_1 = require("tslib");
11
11
  const react_router_config_1 = require("react-router-config");
12
12
  const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
13
- const lodash_1 = require("lodash");
13
+ const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));
14
14
  const utils_1 = require("@docusaurus/utils");
15
15
  const utils_2 = require("./utils");
16
16
  const path_1 = (0, tslib_1.__importDefault)(require("path"));
@@ -51,9 +51,9 @@ function filterIntermediateRoutes(routesInput) {
51
51
  }
52
52
  function getAllBrokenLinks({ allCollectedLinks, routes, }) {
53
53
  const filteredRoutes = filterIntermediateRoutes(routes);
54
- const allBrokenLinks = (0, lodash_1.mapValues)(allCollectedLinks, (pageLinks, pagePath) => getPageBrokenLinks({ pageLinks, pagePath, routes: filteredRoutes }));
54
+ const allBrokenLinks = lodash_1.default.mapValues(allCollectedLinks, (pageLinks, pagePath) => getPageBrokenLinks({ pageLinks, pagePath, routes: filteredRoutes }));
55
55
  // remove pages without any broken link
56
- return (0, lodash_1.pickBy)(allBrokenLinks, (brokenLinks) => brokenLinks.length > 0);
56
+ return lodash_1.default.pickBy(allBrokenLinks, (brokenLinks) => brokenLinks.length > 0);
57
57
  }
58
58
  exports.getAllBrokenLinks = getAllBrokenLinks;
59
59
  function getBrokenLinksErrorMessage(allBrokenLinks) {
@@ -76,7 +76,7 @@ function getBrokenLinksErrorMessage(allBrokenLinks) {
76
76
  */
77
77
  function getLayoutBrokenLinksHelpMessage() {
78
78
  const flatList = Object.entries(allBrokenLinks).flatMap(([pagePage, brokenLinks]) => brokenLinks.map((brokenLink) => ({ pagePage, brokenLink })));
79
- const countedBrokenLinks = (0, lodash_1.countBy)(flatList, (item) => item.brokenLink.link);
79
+ const countedBrokenLinks = lodash_1.default.countBy(flatList, (item) => item.brokenLink.link);
80
80
  const FrequencyThreshold = 5; // Is this a good value?
81
81
  const frequentLinks = Object.entries(countedBrokenLinks)
82
82
  .filter(([, count]) => count >= FrequencyThreshold)
@@ -118,7 +118,7 @@ async function filterExistingFileLinks({ baseUrl, outDir, allCollectedLinks, })
118
118
  }
119
119
  return filePathsToTry.some(isExistingFile);
120
120
  }
121
- return (0, lodash_1.mapValues)(allCollectedLinks, (links) => links.filter((link) => !linkFileExists(link)));
121
+ return lodash_1.default.mapValues(allCollectedLinks, (links) => links.filter((link) => !linkFileExists(link)));
122
122
  }
123
123
  exports.filterExistingFileLinks = filterExistingFileLinks;
124
124
  async function handleBrokenLinks({ allCollectedLinks, onBrokenLinks, routes, baseUrl, outDir, }) {
@@ -7,12 +7,11 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  const tslib_1 = require("tslib");
10
- const lodash_1 = require("lodash");
11
10
  const html_tags_1 = (0, tslib_1.__importDefault)(require("html-tags"));
12
11
  const void_1 = (0, tslib_1.__importDefault)(require("html-tags/void"));
13
12
  const escape_html_1 = (0, tslib_1.__importDefault)(require("escape-html"));
14
13
  function assertIsHtmlTagObject(val) {
15
- if (!(0, lodash_1.isPlainObject)(val)) {
14
+ if (typeof val !== 'object' || !val) {
16
15
  throw new Error(`"${val}" is not a valid HTML tag object.`);
17
16
  }
18
17
  if (typeof val.tagName !== 'string') {
@@ -22,7 +22,7 @@ const versions_1 = require("./versions");
22
22
  const duplicateRoutes_1 = require("./duplicateRoutes");
23
23
  const i18n_1 = require("./i18n");
24
24
  const translations_1 = require("./translations/translations");
25
- const lodash_1 = require("lodash");
25
+ const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));
26
26
  const remark_admonitions_1 = (0, tslib_1.__importDefault)(require("remark-admonitions"));
27
27
  const module_1 = require("module");
28
28
  const moduleShorthand_1 = require("./moduleShorthand");
@@ -68,7 +68,7 @@ async function loadContext(siteDir, options = {}) {
68
68
  locale: i18n.currentLocale,
69
69
  }))) !== null && _a !== void 0 ? _a : {};
70
70
  // We only need key->message for code translations
71
- const codeTranslations = (0, lodash_1.mapValues)(codeTranslationFileContent, (value) => value.message);
71
+ const codeTranslations = lodash_1.default.mapValues(codeTranslationFileContent, (value) => value.message);
72
72
  return {
73
73
  siteDir,
74
74
  generatedFilesDir,
@@ -13,7 +13,7 @@ const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
13
13
  const path_1 = (0, tslib_1.__importDefault)(require("path"));
14
14
  const init_1 = (0, tslib_1.__importDefault)(require("./init"));
15
15
  const logger_1 = (0, tslib_1.__importDefault)(require("@docusaurus/logger"));
16
- const lodash_1 = require("lodash");
16
+ const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));
17
17
  const translations_1 = require("../translations/translations");
18
18
  const applyRouteTrailingSlash_1 = (0, tslib_1.__importDefault)(require("./applyRouteTrailingSlash"));
19
19
  function sortConfig(routeConfigs, baseUrl = '/') {
@@ -80,9 +80,9 @@ async function loadPlugins({ pluginConfigs, context, }) {
80
80
  translationFiles: localizedTranslationFiles,
81
81
  };
82
82
  }));
83
- const allContent = (0, lodash_1.chain)(loadedPlugins)
83
+ const allContent = lodash_1.default.chain(loadedPlugins)
84
84
  .groupBy((item) => item.name)
85
- .mapValues((nameItems) => (0, lodash_1.chain)(nameItems)
85
+ .mapValues((nameItems) => lodash_1.default.chain(nameItems)
86
86
  .groupBy((item) => { var _a; return (_a = item.options.id) !== null && _a !== void 0 ? _a : utils_1.DEFAULT_PLUGIN_ID; })
87
87
  .mapValues((idItems) => idItems[0].content)
88
88
  .value())
@@ -7,14 +7,15 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.ensureUniquePluginInstanceIds = void 0;
10
- const lodash_1 = require("lodash");
10
+ const tslib_1 = require("tslib");
11
+ const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));
11
12
  const utils_1 = require("@docusaurus/utils");
12
13
  // It is forbidden to have 2 plugins of the same name sharing the same id
13
14
  // this is required to support multi-instance plugins without conflict
14
15
  function ensureUniquePluginInstanceIds(plugins) {
15
- const pluginsByName = (0, lodash_1.groupBy)(plugins, (p) => p.name);
16
+ const pluginsByName = lodash_1.default.groupBy(plugins, (p) => p.name);
16
17
  Object.entries(pluginsByName).forEach(([pluginName, pluginInstances]) => {
17
- const pluginInstancesById = (0, lodash_1.groupBy)(pluginInstances, (p) => { var _a; return (_a = p.options.id) !== null && _a !== void 0 ? _a : utils_1.DEFAULT_PLUGIN_ID; });
18
+ const pluginInstancesById = lodash_1.default.groupBy(pluginInstances, (p) => { var _a; return (_a = p.options.id) !== null && _a !== void 0 ? _a : utils_1.DEFAULT_PLUGIN_ID; });
18
19
  Object.entries(pluginInstancesById).forEach(([pluginId, pluginInstancesWithId]) => {
19
20
  if (pluginInstancesWithId.length !== 1) {
20
21
  throw new Error(`Plugin "${pluginName}" is used ${pluginInstancesWithId.length} times with ID "${pluginId}".\nTo use the same plugin multiple times on a Docusaurus site, you need to assign a unique ID to each plugin instance.${pluginId === utils_1.DEFAULT_PLUGIN_ID
@@ -7,7 +7,6 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  const utils_1 = require("@docusaurus/utils");
10
- const lodash_1 = require("lodash");
11
10
  const querystring_1 = require("querystring");
12
11
  function indent(str) {
13
12
  const spaces = ' ';
@@ -46,10 +45,15 @@ const RoutesImportsCode = [
46
45
  `import ComponentCreator from '@docusaurus/ComponentCreator';`,
47
46
  ].join('\n');
48
47
  function isModule(value) {
49
- if ((0, lodash_1.isString)(value)) {
48
+ var _a, _b;
49
+ if (typeof value === 'string') {
50
50
  return true;
51
51
  }
52
- if ((0, lodash_1.isPlainObject)(value) && (0, lodash_1.has)(value, '__import') && (0, lodash_1.has)(value, 'path')) {
52
+ if (typeof value === 'object' &&
53
+ (
54
+ // eslint-disable-next-line no-underscore-dangle
55
+ (_a = value) === null || _a === void 0 ? void 0 : _a.__import) &&
56
+ ((_b = value) === null || _b === void 0 ? void 0 : _b.path)) {
53
57
  return true;
54
58
  }
55
59
  return false;
@@ -68,8 +72,9 @@ async function loadRoutes(pluginsRouteConfigs, baseUrl) {
68
72
  // This is the higher level overview of route code generation.
69
73
  function generateRouteCode(routeConfig) {
70
74
  const { path: routePath, component, modules = {}, routes: subroutes, exact, priority, ...props } = routeConfig;
71
- if (!(0, lodash_1.isString)(routePath) || !component) {
72
- throw new Error(`Invalid route config: path must be a string and component is required.\n${JSON.stringify(routeConfig)}`);
75
+ if (typeof routePath !== 'string' || !component) {
76
+ throw new Error(`Invalid route config: path must be a string and component is required.
77
+ ${JSON.stringify(routeConfig)}`);
73
78
  }
74
79
  // Collect all page paths for injecting it later in the plugin lifecycle
75
80
  // This is useful for plugins like sitemaps, redirects etc...
@@ -11,14 +11,14 @@ const tslib_1 = require("tslib");
11
11
  const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
12
12
  const path_1 = (0, tslib_1.__importDefault)(require("path"));
13
13
  const utils_1 = require("@docusaurus/utils");
14
- const lodash_1 = require("lodash");
14
+ const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));
15
15
  // Order of Webpack aliases is important because one alias can shadow another
16
16
  // This ensure @theme/NavbarItem alias is after @theme/NavbarItem/LocaleDropdown
17
17
  // See https://github.com/facebook/docusaurus/pull/3922
18
18
  // See https://github.com/facebook/docusaurus/issues/5382
19
19
  function sortAliases(aliases) {
20
20
  // Alphabetical order by default
21
- const entries = (0, lodash_1.sortBy)(Object.entries(aliases), ([alias]) => alias);
21
+ const entries = lodash_1.default.sortBy(Object.entries(aliases), ([alias]) => alias);
22
22
  // @theme/NavbarItem should be after @theme/NavbarItem/LocaleDropdown
23
23
  entries.sort(([alias1], [alias2]) => alias1.includes(`${alias2}/`) ? -1 : 0);
24
24
  return Object.fromEntries(entries);
@@ -10,7 +10,7 @@ exports.applyDefaultCodeTranslations = exports.getPluginsDefaultCodeTranslationM
10
10
  const tslib_1 = require("tslib");
11
11
  const path_1 = (0, tslib_1.__importDefault)(require("path"));
12
12
  const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
13
- const lodash_1 = require("lodash");
13
+ const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));
14
14
  const utils_1 = require("@docusaurus/utils");
15
15
  const utils_validation_1 = require("@docusaurus/utils-validation");
16
16
  const logger_1 = (0, tslib_1.__importDefault)(require("@docusaurus/logger"));
@@ -44,7 +44,7 @@ async function readTranslationFileContent(filePath) {
44
44
  exports.readTranslationFileContent = readTranslationFileContent;
45
45
  function mergeTranslationFileContent({ existingContent = {}, newContent, options, }) {
46
46
  // Apply messagePrefix to all messages
47
- const newContentTransformed = (0, lodash_1.mapValues)(newContent, (value) => {
47
+ const newContentTransformed = lodash_1.default.mapValues(newContent, (value) => {
48
48
  var _a;
49
49
  return ({
50
50
  ...value,
@@ -68,7 +68,7 @@ function mergeTranslationFileContent({ existingContent = {}, newContent, options
68
68
  async function writeTranslationFileContent({ filePath, content: newContent, options = {}, }) {
69
69
  const existingContent = await readTranslationFileContent(filePath);
70
70
  // Warn about potential legacy keys
71
- const unknownKeys = (0, lodash_1.difference)(Object.keys(existingContent !== null && existingContent !== void 0 ? existingContent : {}), Object.keys(newContent));
71
+ const unknownKeys = lodash_1.default.difference(Object.keys(existingContent !== null && existingContent !== void 0 ? existingContent : {}), Object.keys(newContent));
72
72
  if (unknownKeys.length > 0) {
73
73
  logger_1.default.warn `Some translation keys looks unknown to us in file path=${filePath}.
74
74
  Maybe you should remove them? ${unknownKeys}`;
@@ -171,12 +171,12 @@ async function getPluginsDefaultCodeTranslationMessages(plugins) {
171
171
  }
172
172
  exports.getPluginsDefaultCodeTranslationMessages = getPluginsDefaultCodeTranslationMessages;
173
173
  function applyDefaultCodeTranslations({ extractedCodeTranslations, defaultCodeMessages, }) {
174
- const unusedDefaultCodeMessages = (0, lodash_1.difference)(Object.keys(defaultCodeMessages), Object.keys(extractedCodeTranslations));
174
+ const unusedDefaultCodeMessages = lodash_1.default.difference(Object.keys(defaultCodeMessages), Object.keys(extractedCodeTranslations));
175
175
  if (unusedDefaultCodeMessages.length > 0) {
176
176
  logger_1.default.warn `Unused default message codes found.
177
177
  Please report this Docusaurus issue. name=${unusedDefaultCodeMessages}`;
178
178
  }
179
- return (0, lodash_1.mapValues)(extractedCodeTranslations, (messageTranslation, messageId) => {
179
+ return lodash_1.default.mapValues(extractedCodeTranslations, (messageTranslation, messageId) => {
180
180
  var _a;
181
181
  return ({
182
182
  ...messageTranslation,
@@ -18,7 +18,7 @@ const path_1 = (0, tslib_1.__importDefault)(require("path"));
18
18
  const crypto_1 = (0, tslib_1.__importDefault)(require("crypto"));
19
19
  const logger_1 = (0, tslib_1.__importDefault)(require("@docusaurus/logger"));
20
20
  const utils_1 = require("@docusaurus/utils");
21
- const lodash_1 = require("lodash");
21
+ const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));
22
22
  // Utility method to get style loaders
23
23
  function getStyleLoaders(isServer, cssOptionsArg = {}) {
24
24
  const cssOptions = {
@@ -116,7 +116,7 @@ const getCustomizableJSLoader = (jsLoader = 'babel') => ({ isServer, babelOption
116
116
  : jsLoader(isServer);
117
117
  exports.getCustomizableJSLoader = getCustomizableJSLoader;
118
118
  // TODO remove this before end of 2021?
119
- const warnBabelLoaderOnce = (0, lodash_1.memoize)(() => {
119
+ const warnBabelLoaderOnce = lodash_1.default.memoize(() => {
120
120
  logger_1.default.warn `Docusaurus plans to support multiple JS loader strategies (Babel, esbuild...): code=${'getBabelLoader(isServer)'} is now deprecated in favor of code=${'getJSLoader(isServer)'}.`;
121
121
  });
122
122
  const getBabelLoaderDeprecated = function getBabelLoaderDeprecated(isServer, babelOptions) {
@@ -124,7 +124,7 @@ const getBabelLoaderDeprecated = function getBabelLoaderDeprecated(isServer, bab
124
124
  return getDefaultBabelLoader({ isServer, babelOptions });
125
125
  };
126
126
  // TODO remove this before end of 2021 ?
127
- const warnCacheLoaderOnce = (0, lodash_1.memoize)(() => {
127
+ const warnCacheLoaderOnce = lodash_1.default.memoize(() => {
128
128
  logger_1.default.warn `Docusaurus uses Webpack 5 and code=${'getCacheLoader()'} usage is now deprecated.`;
129
129
  });
130
130
  function getCacheLoaderDeprecated() {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@docusaurus/core",
3
3
  "description": "Easy to Maintain Open Source Documentation Websites",
4
- "version": "0.0.0-4605",
4
+ "version": "0.0.0-4609",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -31,8 +31,8 @@
31
31
  "url": "https://github.com/facebook/docusaurus/issues"
32
32
  },
33
33
  "dependencies": {
34
- "@babel/core": "^7.17.2",
35
- "@babel/generator": "^7.17.0",
34
+ "@babel/core": "^7.17.5",
35
+ "@babel/generator": "^7.17.3",
36
36
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
37
37
  "@babel/plugin-transform-runtime": "^7.17.0",
38
38
  "@babel/preset-env": "^7.16.11",
@@ -40,25 +40,25 @@
40
40
  "@babel/preset-typescript": "^7.16.7",
41
41
  "@babel/runtime": "^7.17.2",
42
42
  "@babel/runtime-corejs3": "^7.17.2",
43
- "@babel/traverse": "^7.17.0",
44
- "@docusaurus/cssnano-preset": "0.0.0-4605",
45
- "@docusaurus/logger": "0.0.0-4605",
46
- "@docusaurus/mdx-loader": "0.0.0-4605",
43
+ "@babel/traverse": "^7.17.3",
44
+ "@docusaurus/cssnano-preset": "0.0.0-4609",
45
+ "@docusaurus/logger": "0.0.0-4609",
46
+ "@docusaurus/mdx-loader": "0.0.0-4609",
47
47
  "@docusaurus/react-loadable": "5.5.2",
48
- "@docusaurus/utils": "0.0.0-4605",
49
- "@docusaurus/utils-common": "0.0.0-4605",
50
- "@docusaurus/utils-validation": "0.0.0-4605",
48
+ "@docusaurus/utils": "0.0.0-4609",
49
+ "@docusaurus/utils-common": "0.0.0-4609",
50
+ "@docusaurus/utils-validation": "0.0.0-4609",
51
51
  "@slorber/static-site-generator-webpack-plugin": "^4.0.1",
52
52
  "@svgr/webpack": "^6.2.1",
53
53
  "autoprefixer": "^10.4.2",
54
54
  "babel-loader": "^8.2.3",
55
55
  "babel-plugin-dynamic-import-node": "2.3.0",
56
- "boxen": "^5.0.1",
56
+ "boxen": "^5.1.2",
57
57
  "chokidar": "^3.5.3",
58
58
  "clean-css": "^5.2.4",
59
59
  "commander": "^5.1.0",
60
60
  "copy-webpack-plugin": "^10.2.4",
61
- "core-js": "^3.21.0",
61
+ "core-js": "^3.21.1",
62
62
  "css-loader": "^6.6.0",
63
63
  "css-minimizer-webpack-plugin": "^3.4.1",
64
64
  "cssnano": "^5.0.17",
@@ -81,7 +81,7 @@
81
81
  "postcss-loader": "^6.2.1",
82
82
  "prompts": "^2.4.2",
83
83
  "react-dev-utils": "^12.0.0",
84
- "react-helmet-async": "^1.2.2",
84
+ "react-helmet-async": "^1.2.3",
85
85
  "react-loadable": "npm:@docusaurus/react-loadable@5.5.2",
86
86
  "react-loadable-ssr-addon-v5-slorber": "^1.0.1",
87
87
  "react-router": "^5.2.0",
@@ -97,15 +97,15 @@
97
97
  "update-notifier": "^5.1.0",
98
98
  "url-loader": "^4.1.1",
99
99
  "wait-on": "^6.0.1",
100
- "webpack": "^5.68.0",
100
+ "webpack": "^5.69.1",
101
101
  "webpack-bundle-analyzer": "^4.5.0",
102
102
  "webpack-dev-server": "^4.7.4",
103
103
  "webpack-merge": "^5.8.0",
104
104
  "webpackbar": "^5.0.2"
105
105
  },
106
106
  "devDependencies": {
107
- "@docusaurus/module-type-aliases": "0.0.0-4605",
108
- "@docusaurus/types": "0.0.0-4605",
107
+ "@docusaurus/module-type-aliases": "0.0.0-4609",
108
+ "@docusaurus/types": "0.0.0-4609",
109
109
  "@types/detect-port": "^1.3.2",
110
110
  "@types/nprogress": "^0.2.0",
111
111
  "@types/react-dom": "^17.0.11",
@@ -125,5 +125,5 @@
125
125
  "engines": {
126
126
  "node": ">=14"
127
127
  },
128
- "gitHead": "1accdf614a2844670e33e2f5aea642efe80cec3f"
128
+ "gitHead": "398a24ae6b46221f1b07e23573affd1641861431"
129
129
  }