create-docusaurus 2.0.0-beta.19 → 2.0.0-beta.22

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/bin/index.js CHANGED
@@ -8,13 +8,15 @@
8
8
 
9
9
  // @ts-check
10
10
 
11
+ import path from 'path';
12
+ import {createRequire} from 'module';
11
13
  import logger from '@docusaurus/logger';
12
14
  import semver from 'semver';
13
- import path from 'path';
14
15
  import {program} from 'commander';
15
- import {createRequire} from 'module';
16
16
 
17
- const packageJson = createRequire(import.meta.url)('../package.json');
17
+ const packageJson = /** @type {import("../package.json")} */ (
18
+ createRequire(import.meta.url)('../package.json')
19
+ );
18
20
  const requiredVersion = packageJson.engines.node;
19
21
 
20
22
  if (!semver.satisfies(process.version, requiredVersion)) {
@@ -45,23 +47,11 @@ program
45
47
  \`custom\`: enter your custom git clone command. We will prompt you for it.`,
46
48
  )
47
49
  .description('Initialize website.')
48
- .action(
49
- (
50
- siteName,
51
- template,
52
- rootDir = '.',
53
- {packageManager, skipInstall, typescript, gitStrategy} = {},
54
- ) => {
55
- // See https://github.com/facebook/docusaurus/pull/6860
56
- import('../lib/index.js').then(({default: init}) => {
57
- init(path.resolve(rootDir), siteName, template, {
58
- packageManager,
59
- skipInstall,
60
- typescript,
61
- gitStrategy,
62
- });
63
- });
64
- },
50
+ .action((siteName, template, rootDir, options) =>
51
+ // See https://github.com/facebook/docusaurus/pull/6860
52
+ import('../lib/index.js').then(({default: init}) =>
53
+ init(path.resolve(rootDir ?? '.'), siteName, template, options),
54
+ ),
65
55
  );
66
56
 
67
57
  program.parse(process.argv);
package/lib/index.d.ts CHANGED
@@ -4,17 +4,19 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- declare const SupportedPackageManagers: {
7
+ declare type CLIOptions = {
8
+ packageManager?: PackageManager;
9
+ skipInstall?: boolean;
10
+ typescript?: boolean;
11
+ gitStrategy?: GitStrategy;
12
+ };
13
+ declare const lockfileNames: {
8
14
  npm: string;
9
15
  yarn: string;
10
16
  pnpm: string;
11
17
  };
12
- declare type SupportedPackageManager = keyof typeof SupportedPackageManagers;
18
+ declare type PackageManager = keyof typeof lockfileNames;
13
19
  declare const gitStrategies: readonly ["deep", "shallow", "copy", "custom"];
14
- export default function init(rootDir: string, siteName?: string, reqTemplate?: string, cliOptions?: Partial<{
15
- packageManager: SupportedPackageManager;
16
- skipInstall: boolean;
17
- typescript: boolean;
18
- gitStrategy: typeof gitStrategies[number];
19
- }>): Promise<void>;
20
+ declare type GitStrategy = typeof gitStrategies[number];
21
+ export default function init(rootDir: string, reqName?: string, reqTemplate?: string, cliOptions?: CLIOptions): Promise<void>;
20
22
  export {};
package/lib/index.js CHANGED
@@ -4,28 +4,27 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import logger from '@docusaurus/logger';
8
7
  import fs from 'fs-extra';
9
- import prompts from 'prompts';
8
+ import { fileURLToPath } from 'url';
10
9
  import path from 'path';
11
- import shell from 'shelljs';
12
10
  import _ from 'lodash';
11
+ import logger from '@docusaurus/logger';
12
+ import shell from 'shelljs';
13
+ import prompts from 'prompts';
13
14
  import supportsColor from 'supports-color';
14
- import { fileURLToPath } from 'url';
15
- const RecommendedTemplate = 'classic';
16
- const TypeScriptTemplateSuffix = '-typescript';
15
+ import { escapeShellArg } from '@docusaurus/utils';
17
16
  // Only used in the rare, rare case of running globally installed create +
18
17
  // using --skip-install. We need a default name to show the tip text
19
- const DefaultPackageManager = 'npm';
20
- const SupportedPackageManagers = {
18
+ const defaultPackageManager = 'npm';
19
+ const lockfileNames = {
21
20
  npm: 'package-lock.json',
22
21
  yarn: 'yarn.lock',
23
22
  pnpm: 'pnpm-lock.yaml',
24
23
  };
25
- const PackageManagersList = Object.keys(SupportedPackageManagers);
26
- async function findPackageManagerFromLockFile() {
27
- for (const packageManager of PackageManagersList) {
28
- const lockFilePath = path.resolve(SupportedPackageManagers[packageManager]);
24
+ const packageManagers = Object.keys(lockfileNames);
25
+ async function findPackageManagerFromLockFile(rootDir) {
26
+ for (const packageManager of packageManagers) {
27
+ const lockFilePath = path.join(rootDir, lockfileNames[packageManager]);
29
28
  if (await fs.pathExists(lockFilePath)) {
30
29
  return packageManager;
31
30
  }
@@ -33,7 +32,7 @@ async function findPackageManagerFromLockFile() {
33
32
  return undefined;
34
33
  }
35
34
  function findPackageManagerFromUserAgent() {
36
- return PackageManagersList.find((packageManager) => process.env.npm_config_user_agent?.startsWith(packageManager));
35
+ return packageManagers.find((packageManager) => process.env.npm_config_user_agent?.startsWith(packageManager));
37
36
  }
38
37
  async function askForPackageManagerChoice() {
39
38
  const hasYarn = shell.exec('yarn --version', { silent: true }).code === 0;
@@ -44,76 +43,90 @@ async function askForPackageManagerChoice() {
44
43
  const choices = ['npm', hasYarn && 'yarn', hasPnpm && 'pnpm']
45
44
  .filter((p) => Boolean(p))
46
45
  .map((p) => ({ title: p, value: p }));
47
- return (await prompts({
46
+ return ((await prompts({
48
47
  type: 'select',
49
48
  name: 'packageManager',
50
49
  message: 'Select a package manager...',
51
50
  choices,
52
- })).packageManager;
51
+ }, {
52
+ onCancel() {
53
+ logger.info `Falling back to name=${defaultPackageManager}`;
54
+ },
55
+ })).packageManager ?? defaultPackageManager);
53
56
  }
54
- async function getPackageManager(packageManagerChoice, skipInstall = false) {
55
- if (packageManagerChoice &&
56
- !PackageManagersList.includes(packageManagerChoice)) {
57
- throw new Error(`Invalid package manager choice ${packageManagerChoice}. Must be one of ${PackageManagersList.join(', ')}`);
57
+ async function getPackageManager(dest, { packageManager, skipInstall }) {
58
+ if (packageManager && !packageManagers.includes(packageManager)) {
59
+ throw new Error(`Invalid package manager choice ${packageManager}. Must be one of ${packageManagers.join(', ')}`);
58
60
  }
59
- return (packageManagerChoice ??
60
- (await findPackageManagerFromLockFile()) ??
61
+ return (
62
+ // If dest already contains a lockfile (e.g. if using a local template), we
63
+ // always use that instead
64
+ (await findPackageManagerFromLockFile(dest)) ??
65
+ packageManager ??
66
+ (await findPackageManagerFromLockFile('.')) ??
61
67
  findPackageManagerFromUserAgent() ??
62
68
  // This only happens if the user has a global installation in PATH
63
- (skipInstall ? DefaultPackageManager : askForPackageManagerChoice()));
64
- }
65
- function isValidGitRepoUrl(gitRepoUrl) {
66
- return ['https://', 'git@'].some((item) => gitRepoUrl.startsWith(item));
69
+ (skipInstall ? defaultPackageManager : askForPackageManagerChoice()));
67
70
  }
68
- async function updatePkg(pkgPath, obj) {
69
- const pkg = await fs.readJSON(pkgPath);
70
- const newPkg = Object.assign(pkg, obj);
71
- await fs.outputFile(pkgPath, `${JSON.stringify(newPkg, null, 2)}\n`);
72
- }
73
- async function readTemplates(templatesDir) {
74
- const templates = (await fs.readdir(templatesDir)).filter((d) => !d.startsWith('.') &&
71
+ const recommendedTemplate = 'classic';
72
+ const typeScriptTemplateSuffix = '-typescript';
73
+ const templatesDir = fileURLToPath(new URL('../templates', import.meta.url));
74
+ async function readTemplates() {
75
+ const dirContents = await fs.readdir(templatesDir);
76
+ const templates = await Promise.all(dirContents
77
+ .filter((d) => !d.startsWith('.') &&
75
78
  !d.startsWith('README') &&
76
- !d.endsWith(TypeScriptTemplateSuffix) &&
77
- d !== 'shared');
79
+ !d.endsWith(typeScriptTemplateSuffix) &&
80
+ d !== 'shared')
81
+ .map(async (name) => {
82
+ const tsVariantPath = path.join(templatesDir, `${name}${typeScriptTemplateSuffix}`);
83
+ return {
84
+ name,
85
+ path: path.join(templatesDir, name),
86
+ tsVariantPath: (await fs.pathExists(tsVariantPath))
87
+ ? tsVariantPath
88
+ : undefined,
89
+ };
90
+ }));
78
91
  // Classic should be first in list!
79
- return _.sortBy(templates, (t) => t !== RecommendedTemplate);
92
+ return _.sortBy(templates, (t) => t.name !== recommendedTemplate);
80
93
  }
81
- function createTemplateChoices(templates) {
82
- function makeNameAndValueChoice(value) {
83
- const title = value === RecommendedTemplate ? `${value} (recommended)` : value;
84
- return { title, value };
85
- }
86
- return [
87
- ...templates.map((template) => makeNameAndValueChoice(template)),
88
- makeNameAndValueChoice('Git repository'),
89
- makeNameAndValueChoice('Local template'),
90
- ];
91
- }
92
- function getTypeScriptBaseTemplate(template) {
93
- if (template.endsWith(TypeScriptTemplateSuffix)) {
94
- return template.replace(TypeScriptTemplateSuffix, '');
95
- }
96
- return undefined;
97
- }
98
- async function copyTemplate(templatesDir, template, dest) {
94
+ async function copyTemplate(template, dest, typescript) {
99
95
  await fs.copy(path.join(templatesDir, 'shared'), dest);
100
96
  // TypeScript variants will copy duplicate resources like CSS & config from
101
97
  // base template
102
- const tsBaseTemplate = getTypeScriptBaseTemplate(template);
103
- if (tsBaseTemplate) {
104
- const tsBaseTemplatePath = path.resolve(templatesDir, tsBaseTemplate);
105
- await fs.copy(tsBaseTemplatePath, dest, {
98
+ if (typescript) {
99
+ await fs.copy(template.path, dest, {
106
100
  filter: async (filePath) => (await fs.stat(filePath)).isDirectory() ||
107
101
  path.extname(filePath) === '.css' ||
108
102
  path.basename(filePath) === 'docusaurus.config.js',
109
103
  });
110
104
  }
111
- await fs.copy(path.resolve(templatesDir, template), dest, {
105
+ await fs.copy(typescript ? template.tsVariantPath : template.path, dest, {
112
106
  // Symlinks don't exist in published npm packages anymore, so this is only
113
107
  // to prevent errors during local testing
114
108
  filter: async (filePath) => !(await fs.lstat(filePath)).isSymbolicLink(),
115
109
  });
116
110
  }
111
+ function createTemplateChoices(templates) {
112
+ function makeNameAndValueChoice(value) {
113
+ if (typeof value === 'string') {
114
+ return { title: value, value };
115
+ }
116
+ const title = value.name === recommendedTemplate
117
+ ? `${value.name} (recommended)`
118
+ : value.name;
119
+ return { title, value };
120
+ }
121
+ return [
122
+ ...templates.map((template) => makeNameAndValueChoice(template)),
123
+ makeNameAndValueChoice('Git repository'),
124
+ makeNameAndValueChoice('Local template'),
125
+ ];
126
+ }
127
+ function isValidGitRepoUrl(gitRepoUrl) {
128
+ return ['https://', 'git@'].some((item) => gitRepoUrl.startsWith(item));
129
+ }
117
130
  const gitStrategies = ['deep', 'shallow', 'copy', 'custom'];
118
131
  async function getGitCommand(gitStrategy) {
119
132
  switch (gitStrategy) {
@@ -121,67 +134,104 @@ async function getGitCommand(gitStrategy) {
121
134
  case 'copy':
122
135
  return 'git clone --recursive --depth 1';
123
136
  case 'custom': {
124
- const { command } = await prompts({
137
+ const { command } = (await prompts({
125
138
  type: 'text',
126
139
  name: 'command',
127
140
  message: 'Write your own git clone command. The repository URL and destination directory will be supplied. E.g. "git clone --depth 10"',
128
- });
129
- return command;
141
+ }, {
142
+ onCancel() {
143
+ logger.info `Falling back to code=${'git clone'}`;
144
+ },
145
+ }));
146
+ return command ?? 'git clone';
130
147
  }
131
148
  case 'deep':
132
149
  default:
133
150
  return 'git clone';
134
151
  }
135
152
  }
136
- export default async function init(rootDir, siteName, reqTemplate, cliOptions = {}) {
137
- const templatesDir = fileURLToPath(new URL('../templates', import.meta.url));
138
- const templates = await readTemplates(templatesDir);
139
- const hasTS = (templateName) => fs.pathExists(path.join(templatesDir, `${templateName}${TypeScriptTemplateSuffix}`));
140
- let name = siteName;
141
- // Prompt if siteName is not passed from CLI.
142
- if (!name) {
143
- const prompt = await prompts({
144
- type: 'text',
145
- name: 'name',
146
- message: 'What should we name this site?',
147
- initial: 'website',
148
- });
149
- name = prompt.name;
153
+ async function getSiteName(reqName, rootDir) {
154
+ async function validateSiteName(siteName) {
155
+ if (!siteName) {
156
+ return 'A website name is required.';
157
+ }
158
+ const dest = path.resolve(rootDir, siteName);
159
+ if (await fs.pathExists(dest)) {
160
+ return logger.interpolate `Directory already exists at path=${dest}!`;
161
+ }
162
+ return true;
150
163
  }
151
- if (!name) {
152
- logger.error('A website name is required.');
153
- process.exit(1);
164
+ if (reqName) {
165
+ const res = validateSiteName(reqName);
166
+ if (typeof res === 'string') {
167
+ throw new Error(res);
168
+ }
169
+ return reqName;
154
170
  }
155
- const dest = path.resolve(rootDir, name);
156
- if (await fs.pathExists(dest)) {
157
- logger.error `Directory already exists at path=${dest}!`;
158
- process.exit(1);
171
+ const { siteName } = (await prompts({
172
+ type: 'text',
173
+ name: 'siteName',
174
+ message: 'What should we name this site?',
175
+ initial: 'website',
176
+ validate: validateSiteName,
177
+ }, {
178
+ onCancel() {
179
+ logger.error('A website name is required.');
180
+ process.exit(1);
181
+ },
182
+ }));
183
+ return siteName;
184
+ }
185
+ async function getSource(reqTemplate, templates, cliOptions) {
186
+ if (reqTemplate) {
187
+ if (isValidGitRepoUrl(reqTemplate)) {
188
+ if (cliOptions.gitStrategy &&
189
+ !gitStrategies.includes(cliOptions.gitStrategy)) {
190
+ logger.error `Invalid git strategy: name=${cliOptions.gitStrategy}. Value must be one of ${gitStrategies.join(', ')}.`;
191
+ process.exit(1);
192
+ }
193
+ return {
194
+ type: 'git',
195
+ url: reqTemplate,
196
+ strategy: cliOptions.gitStrategy ?? 'deep',
197
+ };
198
+ }
199
+ else if (await fs.pathExists(path.resolve(reqTemplate))) {
200
+ return {
201
+ type: 'local',
202
+ path: path.resolve(reqTemplate),
203
+ };
204
+ }
205
+ const template = templates.find((t) => t.name === reqTemplate);
206
+ if (!template) {
207
+ logger.error('Invalid template.');
208
+ process.exit(1);
209
+ }
210
+ if (cliOptions.typescript && !template.tsVariantPath) {
211
+ logger.error `Template name=${reqTemplate} doesn't provide the TypeScript variant.`;
212
+ process.exit(1);
213
+ }
214
+ return {
215
+ type: 'template',
216
+ template,
217
+ typescript: cliOptions.typescript ?? false,
218
+ };
159
219
  }
160
- let template = reqTemplate;
161
- let useTS = cliOptions.typescript;
162
- // Prompt if template is not provided from CLI.
163
- if (!template) {
164
- const templatePrompt = await prompts({
220
+ const template = cliOptions.gitStrategy
221
+ ? 'Git repository'
222
+ : (await prompts({
165
223
  type: 'select',
166
224
  name: 'template',
167
225
  message: 'Select a template below...',
168
226
  choices: createTemplateChoices(templates),
169
- });
170
- template = templatePrompt.template;
171
- if (template && !useTS && (await hasTS(template))) {
172
- const tsPrompt = await prompts({
173
- type: 'confirm',
174
- name: 'useTS',
175
- message: 'This template is available in TypeScript. Do you want to use the TS variant?',
176
- initial: false,
177
- });
178
- useTS = tsPrompt.useTS;
179
- }
180
- }
181
- let gitStrategy = cliOptions.gitStrategy ?? 'deep';
182
- // If user choose Git repository, we'll prompt for the url.
227
+ }, {
228
+ onCancel() {
229
+ logger.error('A choice is required.');
230
+ process.exit(1);
231
+ },
232
+ })).template;
183
233
  if (template === 'Git repository') {
184
- const repoPrompt = await prompts({
234
+ const { gitRepoUrl } = (await prompts({
185
235
  type: 'text',
186
236
  name: 'gitRepoUrl',
187
237
  validate: (url) => {
@@ -192,25 +242,44 @@ export default async function init(rootDir, siteName, reqTemplate, cliOptions =
192
242
  },
193
243
  message: logger.interpolate `Enter a repository URL from GitHub, Bitbucket, GitLab, or any other public repo.
194
244
  (e.g: url=${'https://github.com/ownerName/repoName.git'})`,
195
- });
196
- ({ gitStrategy } = await prompts({
197
- type: 'select',
198
- name: 'gitStrategy',
199
- message: 'How should we clone this repo?',
200
- choices: [
201
- { title: 'Deep clone: preserve full history', value: 'deep' },
202
- { title: 'Shallow clone: clone with --depth=1', value: 'shallow' },
203
- {
204
- title: 'Copy: do a shallow clone, but do not create a git repo',
205
- value: 'copy',
206
- },
207
- { title: 'Custom: enter your custom git clone command', value: 'custom' },
208
- ],
245
+ }, {
246
+ onCancel() {
247
+ logger.error('A git repo URL is required.');
248
+ process.exit(1);
249
+ },
209
250
  }));
210
- template = repoPrompt.gitRepoUrl;
251
+ let strategy = cliOptions.gitStrategy;
252
+ if (!strategy) {
253
+ ({ strategy } = (await prompts({
254
+ type: 'select',
255
+ name: 'strategy',
256
+ message: 'How should we clone this repo?',
257
+ choices: [
258
+ { title: 'Deep clone: preserve full history', value: 'deep' },
259
+ { title: 'Shallow clone: clone with --depth=1', value: 'shallow' },
260
+ {
261
+ title: 'Copy: do a shallow clone, but do not create a git repo',
262
+ value: 'copy',
263
+ },
264
+ {
265
+ title: 'Custom: enter your custom git clone command',
266
+ value: 'custom',
267
+ },
268
+ ],
269
+ }, {
270
+ onCancel() {
271
+ logger.info `Falling back to name=${'deep'}`;
272
+ },
273
+ })));
274
+ }
275
+ return {
276
+ type: 'git',
277
+ url: gitRepoUrl,
278
+ strategy: strategy ?? 'deep',
279
+ };
211
280
  }
212
281
  else if (template === 'Local template') {
213
- const dirPrompt = await prompts({
282
+ const { templateDir } = (await prompts({
214
283
  type: 'text',
215
284
  name: 'templateDir',
216
285
  validate: async (dir) => {
@@ -224,64 +293,76 @@ export default async function init(rootDir, siteName, reqTemplate, cliOptions =
224
293
  return logger.red('Please enter a valid path.');
225
294
  },
226
295
  message: 'Enter a local folder path, relative to the current working directory.',
227
- });
228
- template = dirPrompt.templateDir;
296
+ }, {
297
+ onCancel() {
298
+ logger.error('A file path is required.');
299
+ process.exit(1);
300
+ },
301
+ }));
302
+ return {
303
+ type: 'local',
304
+ path: templateDir,
305
+ };
229
306
  }
230
- if (!template) {
231
- logger.error('Template should not be empty');
232
- process.exit(1);
307
+ let useTS = cliOptions.typescript;
308
+ if (!useTS && template.tsVariantPath) {
309
+ ({ useTS } = (await prompts({
310
+ type: 'confirm',
311
+ name: 'useTS',
312
+ message: 'This template is available in TypeScript. Do you want to use the TS variant?',
313
+ initial: false,
314
+ })));
233
315
  }
316
+ return {
317
+ type: 'template',
318
+ template,
319
+ typescript: useTS ?? false,
320
+ };
321
+ }
322
+ async function updatePkg(pkgPath, obj) {
323
+ const pkg = (await fs.readJSON(pkgPath));
324
+ const newPkg = Object.assign(pkg, obj);
325
+ await fs.outputFile(pkgPath, `${JSON.stringify(newPkg, null, 2)}\n`);
326
+ }
327
+ export default async function init(rootDir, reqName, reqTemplate, cliOptions = {}) {
328
+ const templates = await readTemplates();
329
+ const siteName = await getSiteName(reqName, rootDir);
330
+ const dest = path.resolve(rootDir, siteName);
331
+ const source = await getSource(reqTemplate, templates, cliOptions);
234
332
  logger.info('Creating new Docusaurus project...');
235
- if (isValidGitRepoUrl(template)) {
236
- logger.info `Cloning Git template url=${template}...`;
237
- if (!gitStrategies.includes(gitStrategy)) {
238
- logger.error `Invalid git strategy: name=${gitStrategy}. Value must be one of ${gitStrategies.join(', ')}.`;
333
+ if (source.type === 'git') {
334
+ const gitCommand = await getGitCommand(source.strategy);
335
+ const gitCloneCommand = `${gitCommand} ${escapeShellArg(source.url)} ${escapeShellArg(dest)}`;
336
+ if (shell.exec(gitCloneCommand).code !== 0) {
337
+ logger.error `Cloning Git template failed!`;
239
338
  process.exit(1);
240
339
  }
241
- const command = await getGitCommand(gitStrategy);
242
- if (shell.exec(`${command} ${template} ${dest}`).code !== 0) {
243
- logger.error `Cloning Git template name=${template} failed!`;
244
- process.exit(1);
245
- }
246
- if (gitStrategy === 'copy') {
340
+ if (source.strategy === 'copy') {
247
341
  await fs.remove(path.join(dest, '.git'));
248
342
  }
249
343
  }
250
- else if (templates.includes(template)) {
251
- // Docusaurus templates.
252
- if (useTS) {
253
- if (!(await hasTS(template))) {
254
- logger.error `Template name=${template} doesn't provide the TypeScript variant.`;
255
- process.exit(1);
256
- }
257
- template = `${template}${TypeScriptTemplateSuffix}`;
258
- }
344
+ else if (source.type === 'template') {
259
345
  try {
260
- await copyTemplate(templatesDir, template, dest);
346
+ await copyTemplate(source.template, dest, source.typescript);
261
347
  }
262
348
  catch (err) {
263
- logger.error `Copying Docusaurus template name=${template} failed!`;
349
+ logger.error `Copying Docusaurus template name=${source.template.name} failed!`;
264
350
  throw err;
265
351
  }
266
352
  }
267
- else if (await fs.pathExists(path.resolve(template))) {
268
- const templateDir = path.resolve(template);
353
+ else {
269
354
  try {
270
- await fs.copy(templateDir, dest);
355
+ await fs.copy(source.path, dest);
271
356
  }
272
357
  catch (err) {
273
- logger.error `Copying local template path=${templateDir} failed!`;
358
+ logger.error `Copying local template path=${source.path} failed!`;
274
359
  throw err;
275
360
  }
276
361
  }
277
- else {
278
- logger.error('Invalid template.');
279
- process.exit(1);
280
- }
281
362
  // Update package.json info.
282
363
  try {
283
364
  await updatePkg(path.join(dest, 'package.json'), {
284
- name: _.kebabCase(name),
365
+ name: _.kebabCase(siteName),
285
366
  version: '0.0.0',
286
367
  private: true,
287
368
  });
@@ -300,15 +381,15 @@ export default async function init(rootDir, siteName, reqTemplate, cliOptions =
300
381
  }
301
382
  // Display the most elegant way to cd.
302
383
  const cdpath = path.relative('.', dest);
303
- const pkgManager = await getPackageManager(cliOptions.packageManager, cliOptions.skipInstall);
384
+ const pkgManager = await getPackageManager(dest, cliOptions);
304
385
  if (!cliOptions.skipInstall) {
305
386
  shell.cd(dest);
306
387
  logger.info `Installing dependencies with name=${pkgManager}...`;
307
388
  if (shell.exec(pkgManager === 'yarn' ? 'yarn' : `${pkgManager} install --color always`, {
308
389
  env: {
309
390
  ...process.env,
310
- // Force coloring the output, since the command is invoked,
311
- // by shelljs which is not the interactive shell
391
+ // Force coloring the output, since the command is invoked by
392
+ // shelljs, which is not an interactive shell
312
393
  ...(supportsColor.stdout ? { FORCE_COLOR: '1' } : {}),
313
394
  },
314
395
  }).code !== 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-docusaurus",
3
- "version": "2.0.0-beta.19",
3
+ "version": "2.0.0-beta.22",
4
4
  "description": "Create Docusaurus apps easily.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -13,8 +13,8 @@
13
13
  },
14
14
  "scripts": {
15
15
  "create-docusaurus": "create-docusaurus",
16
- "build": "tsc -p tsconfig.build.json",
17
- "watch": "tsc -p tsconfig.build.json --watch"
16
+ "build": "tsc --build",
17
+ "watch": "tsc --build --watch"
18
18
  },
19
19
  "bin": "bin/index.js",
20
20
  "publishConfig": {
@@ -22,7 +22,8 @@
22
22
  },
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
- "@docusaurus/logger": "2.0.0-beta.19",
25
+ "@docusaurus/logger": "2.0.0-beta.22",
26
+ "@docusaurus/utils": "2.0.0-beta.22",
26
27
  "commander": "^5.1.0",
27
28
  "fs-extra": "^10.1.0",
28
29
  "lodash": "^4.17.21",
@@ -36,7 +37,7 @@
36
37
  "@types/supports-color": "^8.1.1"
37
38
  },
38
39
  "engines": {
39
- "node": ">=14"
40
+ "node": ">=16.14"
40
41
  },
41
- "gitHead": "a71e60a49cce93c1006ef10c41ac03187f057102"
42
+ "gitHead": "daf9e462c4eebb7ac26a940932311f987e768f87"
42
43
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docusaurus-2-classic-template",
3
- "version": "2.0.0-beta.19",
3
+ "version": "2.0.0-beta.22",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "docusaurus": "docusaurus",
@@ -14,16 +14,16 @@
14
14
  "write-heading-ids": "docusaurus write-heading-ids"
15
15
  },
16
16
  "dependencies": {
17
- "@docusaurus/core": "2.0.0-beta.19",
18
- "@docusaurus/preset-classic": "2.0.0-beta.19",
17
+ "@docusaurus/core": "2.0.0-beta.22",
18
+ "@docusaurus/preset-classic": "2.0.0-beta.22",
19
19
  "@mdx-js/react": "^1.6.22",
20
- "clsx": "^1.1.1",
21
- "prism-react-renderer": "^1.3.1",
20
+ "clsx": "^1.2.0",
21
+ "prism-react-renderer": "^1.3.5",
22
22
  "react": "^17.0.2",
23
23
  "react-dom": "^17.0.2"
24
24
  },
25
25
  "devDependencies": {
26
- "@docusaurus/module-type-aliases": "2.0.0-beta.19"
26
+ "@docusaurus/module-type-aliases": "2.0.0-beta.22"
27
27
  },
28
28
  "browserslist": {
29
29
  "production": [
@@ -36,5 +36,8 @@
36
36
  "last 1 firefox version",
37
37
  "last 1 safari version"
38
38
  ]
39
+ },
40
+ "engines": {
41
+ "node": ">=16.14"
39
42
  }
40
43
  }
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
2
  import clsx from 'clsx';
3
- import Layout from '@theme/Layout';
4
3
  import Link from '@docusaurus/Link';
5
4
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
6
- import styles from './index.module.css';
5
+ import Layout from '@theme/Layout';
7
6
  import HomepageFeatures from '@site/src/components/HomepageFeatures';
8
7
 
8
+ import styles from './index.module.css';
9
+
9
10
  function HomepageHeader() {
10
11
  const {siteConfig} = useDocusaurusContext();
11
12
  return (
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docusaurus-2-classic-typescript-template",
3
- "version": "2.0.0-beta.19",
3
+ "version": "2.0.0-beta.22",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "docusaurus": "docusaurus",
@@ -15,18 +15,18 @@
15
15
  "typecheck": "tsc"
16
16
  },
17
17
  "dependencies": {
18
- "@docusaurus/core": "2.0.0-beta.19",
19
- "@docusaurus/preset-classic": "2.0.0-beta.19",
18
+ "@docusaurus/core": "2.0.0-beta.22",
19
+ "@docusaurus/preset-classic": "2.0.0-beta.22",
20
20
  "@mdx-js/react": "^1.6.22",
21
- "clsx": "^1.1.1",
22
- "prism-react-renderer": "^1.3.1",
21
+ "clsx": "^1.2.0",
22
+ "prism-react-renderer": "^1.3.5",
23
23
  "react": "^17.0.2",
24
24
  "react-dom": "^17.0.2"
25
25
  },
26
26
  "devDependencies": {
27
- "@docusaurus/module-type-aliases": "2.0.0-beta.19",
27
+ "@docusaurus/module-type-aliases": "2.0.0-beta.22",
28
28
  "@tsconfig/docusaurus": "^1.0.5",
29
- "typescript": "^4.6.4"
29
+ "typescript": "^4.7.4"
30
30
  },
31
31
  "browserslist": {
32
32
  "production": [
@@ -39,5 +39,8 @@
39
39
  "last 1 firefox version",
40
40
  "last 1 safari version"
41
41
  ]
42
+ },
43
+ "engines": {
44
+ "node": ">=16.14"
42
45
  }
43
46
  }
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
2
  import clsx from 'clsx';
3
- import Layout from '@theme/Layout';
4
3
  import Link from '@docusaurus/Link';
5
4
  import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
6
- import styles from './index.module.css';
5
+ import Layout from '@theme/Layout';
7
6
  import HomepageFeatures from '@site/src/components/HomepageFeatures';
8
7
 
8
+ import styles from './index.module.css';
9
+
9
10
  function HomepageHeader() {
10
11
  const {siteConfig} = useDocusaurusContext();
11
12
  return (
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -38,7 +38,7 @@ module.exports = {
38
38
 
39
39
  [
40
40
  '*',
41
- ' * Copyright (c) Facebook, Inc. and its affiliates.',
41
+ ' * Copyright (c) Meta Platforms, Inc. and affiliates.',
42
42
  ' *',
43
43
  ' * This source code is licensed under the MIT license found in the',
44
44
  ' * LICENSE file in the root directory of this source tree.',
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -54,9 +54,9 @@ const config = {
54
54
  /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
55
55
  ({
56
56
  navbar: {
57
- title: 'My Facebook Project',
57
+ title: 'My Meta Project',
58
58
  logo: {
59
- alt: 'My Facebook Project Logo',
59
+ alt: 'My Meta Project Logo',
60
60
  src: 'img/logo.svg',
61
61
  },
62
62
  items: [
@@ -127,30 +127,32 @@ const config = {
127
127
  items: [
128
128
  {
129
129
  label: 'Privacy',
130
- href: 'https://opensource.facebook.com/legal/privacy/',
130
+ href: 'https://opensource.fb.com/legal/privacy/',
131
131
  },
132
132
  {
133
133
  label: 'Terms',
134
- href: 'https://opensource.facebook.com/legal/terms/',
134
+ href: 'https://opensource.fb.com/legal/terms/',
135
135
  },
136
136
  {
137
137
  label: 'Data Policy',
138
- href: 'https://opensource.facebook.com/legal/data-policy/',
138
+ href: 'https://opensource.fb.com/legal/data-policy/',
139
139
  },
140
140
  {
141
141
  label: 'Cookie Policy',
142
- href: 'https://opensource.facebook.com/legal/cookie-policy/',
142
+ href: 'https://opensource.fb.com/legal/cookie-policy/',
143
143
  },
144
144
  ],
145
145
  },
146
146
  ],
147
147
  logo: {
148
- alt: 'Facebook Open Source Logo',
149
- src: 'img/oss_logo.png',
150
- href: 'https://opensource.facebook.com',
148
+ alt: 'Meta Open Source Logo',
149
+ // This default includes a positive & negative version, allowing for
150
+ // appropriate use depending on your site's style.
151
+ src: '/img/meta_opensource_logo_negative.svg',
152
+ href: 'https://opensource.fb.com',
151
153
  },
152
154
  // Please do not remove the credits, help to publicize Docusaurus :)
153
- copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc. Built with Docusaurus.`,
155
+ copyright: `Copyright © ${new Date().getFullYear()} Meta Platforms, Inc. Built with Docusaurus.`,
154
156
  },
155
157
  }),
156
158
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docusaurus-2-facebook-template",
3
- "version": "2.0.0-beta.19",
3
+ "version": "2.0.0-beta.22",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "docusaurus": "docusaurus",
@@ -18,25 +18,25 @@
18
18
  "format:diff": "prettier --config .prettierrc --list-different \"**/*.{js,jsx,ts,tsx,md,mdx}\""
19
19
  },
20
20
  "dependencies": {
21
- "@docusaurus/core": "2.0.0-beta.19",
22
- "@docusaurus/preset-classic": "2.0.0-beta.19",
21
+ "@docusaurus/core": "2.0.0-beta.22",
22
+ "@docusaurus/preset-classic": "2.0.0-beta.22",
23
23
  "@mdx-js/react": "^1.6.22",
24
- "clsx": "^1.1.1",
24
+ "clsx": "^1.2.0",
25
25
  "react": "^17.0.2",
26
26
  "react-dom": "^17.0.2"
27
27
  },
28
28
  "devDependencies": {
29
- "@babel/eslint-parser": "^7.17.0",
30
- "eslint": "^8.14.0",
29
+ "@babel/eslint-parser": "^7.18.2",
30
+ "eslint": "^8.19.0",
31
31
  "eslint-config-airbnb": "^19.0.4",
32
32
  "eslint-config-prettier": "^8.5.0",
33
33
  "eslint-plugin-header": "^3.1.1",
34
34
  "eslint-plugin-import": "^2.26.0",
35
- "eslint-plugin-jsx-a11y": "^6.5.1",
36
- "eslint-plugin-react": "^7.29.4",
37
- "eslint-plugin-react-hooks": "^4.5.0",
38
- "prettier": "^2.6.2",
39
- "stylelint": "^14.8.1"
35
+ "eslint-plugin-jsx-a11y": "^6.6.0",
36
+ "eslint-plugin-react": "^7.30.1",
37
+ "eslint-plugin-react-hooks": "^4.6.0",
38
+ "prettier": "^2.7.1",
39
+ "stylelint": "^14.9.1"
40
40
  },
41
41
  "browserslist": {
42
42
  "production": [
@@ -49,5 +49,8 @@
49
49
  "last 1 firefox version",
50
50
  "last 1 safari version"
51
51
  ]
52
+ },
53
+ "engines": {
54
+ "node": ">=16.14"
52
55
  }
53
56
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 6090.9521 1307.1739" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="739.4327" x2="604.5946" y1="604.6622" y2="427.9775"><stop offset=".0006" stop-color="#0867df"/><stop offset=".4539" stop-color="#0668e1"/><stop offset=".8591" stop-color="#0064e0"/></linearGradient><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="476.93" x2="569.3698" y1="490.2073" y2="420.0277"><stop offset=".1323" stop-color="#0064df"/><stop offset=".9988" stop-color="#0064e0"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="437.7486" x2="474.8296" y1="593.1932" y2="499.849"><stop offset=".0147" stop-color="#0072ec"/><stop offset=".6881" stop-color="#0064df"/></linearGradient><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="432.7129" x2="437.0034" y1="660.6261" y2="603.6183"><stop offset=".0731" stop-color="#007cf6"/><stop offset=".9943" stop-color="#0072ec"/></linearGradient><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="435.0724" x2="432.0034" y1="691.5921" y2="668.7519"><stop offset=".0731" stop-color="#007ff9"/><stop offset="1" stop-color="#007cf6"/></linearGradient><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="433.2708" x2="452.3974" y1="697.5917" y2="738.159"><stop offset=".0731" stop-color="#007ff9"/><stop offset="1" stop-color="#0082fb"/></linearGradient><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="727.2435" x2="752.5295" y1="501.3039" y2="466.3321"><stop offset=".2799" stop-color="#007ff8"/><stop offset=".9141" stop-color="#0082fb"/></linearGradient><linearGradient id="h" gradientUnits="userSpaceOnUse" x1="919.4945" x2="972.3929" y1="455.9788" y2="650.5693"><stop offset="0" stop-color="#0082fb"/><stop offset=".9995" stop-color="#0081fa"/></linearGradient><linearGradient id="i" gradientUnits="userSpaceOnUse" x1="985.1641" x2="951.6867" y1="658.0135" y2="725.6651"><stop offset=".0619" stop-color="#0081fa"/><stop offset="1" stop-color="#0080f9"/></linearGradient><linearGradient id="j" gradientUnits="userSpaceOnUse" x1="925.0793" x2="956.3733" y1="761.5316" y2="740.2173"><stop offset="0" stop-color="#027af3"/><stop offset="1" stop-color="#0080f9"/></linearGradient><linearGradient id="k" gradientUnits="userSpaceOnUse" x1="875.9993" x2="919.4855" y1="765.6962" y2="765.6962"><stop offset="0" stop-color="#0377ef"/><stop offset=".9994" stop-color="#0279f1"/></linearGradient><linearGradient id="l" gradientUnits="userSpaceOnUse" x1="838.1927" x2="869.456" y1="741.7469" y2="760.1399"><stop offset=".0019" stop-color="#0471e9"/><stop offset="1" stop-color="#0377ef"/></linearGradient><linearGradient id="m" gradientUnits="userSpaceOnUse" x1="742.8261" x2="842.9741" y1="606.1226" y2="732.0393"><stop offset=".2765" stop-color="#0867df"/><stop offset="1" stop-color="#0471e9"/></linearGradient><path d="m0 0h6090.9521v1307.1739h-6090.9521z" fill="none"/><g fill="#1c2b33"><path d="m1128.7222 412.9337h75.2227l127.9067 231.3674 127.9022-231.3674h73.5962v380.1863h-61.37v-291.3869l-112.1616 201.7691h-57.57l-112.1513-201.7691v291.3869h-61.3749z"/><path d="m1731.3132 799.9078q-42.6371 0-74.9516-18.8712a131.99 131.99 0 0 1 -50.3722-52.2794q-18.0643-33.4014-18.0622-76.5786 0-43.7174 17.6532-77.3966 17.6509-33.6683 49.0208-52.684 31.3609-19.0045 72.0976-19.009 40.4631 0 69.6525 19.1468 29.1937 19.1448 44.9442 53.6353 15.7506 34.4884 15.755 80.9219v16.84h-208.2905q5.7014 34.7618 28.1046 54.72 22.4055 19.9581 56.6227 19.96 27.4266 0 47.2515-8.1487 19.8182-8.1486 37.2046-24.7127l32.59 39.9209q-48.6185 44.5375-119.2202 44.5353zm44.8109-225.53q-19.2846-19.6914-50.51-19.6892-30.4207 0-50.9191 20.0938-20.5116 20.1048-25.9352 54.0442h149.3608q-2.7206-34.7621-21.9965-54.4492z"/><path d="m1931.46 560.1206h-56.4849v-50.2389h56.4849v-83.1h59.2055v83.1h85.812v50.2389h-85.812v127.36q0 31.7744 10.86 45.3532 10.8627 13.5834 37.2046 13.5767a174.3473 174.3473 0 0 0 19.8226-.9514q8.1487-.9468 17.9244-2.5784v49.6966a168.0043 168.0043 0 0 1 -22.6766 4.8856 177.849 177.849 0 0 1 -26.4776 1.9027q-95.8634 0-95.8633-104.8211z"/><path d="m2384.9789 793.12h-58.1164v-39.65a105.0015 105.0015 0 0 1 -39.374 34.355q-23.899 12.0764-54.311 12.0829-37.4757 0-66.3983-19.1424-28.9271-19.1513-45.4867-52.6839-16.564-33.5349-16.564-76.7165 0-43.45 16.8352-76.8542 16.8375-33.4016 46.5758-52.4128 29.7271-19.0045 68.2922-19.009 29.06 0 52.146 11.2694a103.1259 103.1259 0 0 1 38.2848 31.91v-36.3868h58.1164zm-59.2011-184.12q-9.5089-24.1659-30.0073-38.156-20.505-13.9767-47.3893-13.9812-38.0226 0-60.5569 25.5263-22.5388 25.5261-22.5388 68.9767 0 43.7241 21.7252 69.248 21.7186 25.5262 58.9255 25.5262 27.4334 0 48.883-14.1234a79.7842 79.7842 0 0 0 30.9586-38.0182z"/><path d="m2529.4452 681.9147q-14.1236-35.9822-14.119-78.89 0-42.9037 14.119-78.8859a185.3686 185.3686 0 0 1 39.9208-62.46 180.4166 180.4166 0 0 1 60.8281-41.0055q35.0286-14.53 76.85-14.5325 41.8236 0 76.8543 14.5325a180.4785 180.4785 0 0 1 60.8326 41.0055 185.574 185.574 0 0 1 39.9208 62.46q14.11 35.9822 14.119 78.8859 0 42.91-14.119 78.89a185.5731 185.5731 0 0 1 -39.9208 62.46 180.4146 180.4146 0 0 1 -60.8326 41.0056q-35.0286 14.5234-76.8543 14.5279-41.8168 0-76.85-14.5279a180.3528 180.3528 0 0 1 -60.8281-41.0056 185.3677 185.3677 0 0 1 -39.9208-62.46zm304.4207-78.89q0-40.9967-16.2929-72.3687-16.2906-31.3677-44.9442-49.0164-28.6537-17.6509-65.5849-17.6532-36.929 0-65.58 17.6532-28.6536 17.651-44.9442 49.0164-16.2907 31.361-16.2929 72.3687 0 41.01 16.2929 72.3732 16.2972 31.3675 44.9442 49.0163 28.647 17.6577 65.58 17.6532 36.9289 0 65.5849-17.6532 28.6536-17.6509 44.9442-49.0163 16.2908-31.3679 16.2929-72.3735z"/><path d="m2953.0816 509.8817h58.3831v39.3741a104.2357 104.2357 0 0 1 39.2451-34.2173q23.7523-11.9429 54.1731-11.9495 37.4758 0 66.5318 19.1468 29.06 19.1448 45.4866 52.5462 16.4307 33.4014 16.4307 76.8542 0 43.1772-16.8352 76.7165-16.8375 33.5415-46.5758 52.5461-29.7273 19.0045-68.2922 19.009-28.5136 0-51.328-10.86a101.94 101.94 0 0 1 -38.0182-30.9586v149.0847h-59.201zm89.2084 222.2719q20.4984 13.99 47.3893 13.9856 38.0093 0 60.557-25.5262 22.5389-25.5263 22.5388-68.9768 0-43.724-21.7253-69.2479-21.7319-25.5262-58.9254-25.5263-27.4333 0-48.883 14.119a79.776 79.776 0 0 0 -30.9587 38.0182v84.9984q9.5022 24.1724 30.0073 38.156z"/><path d="m3414.7361 799.9078q-42.6371 0-74.9516-18.8712a131.9708 131.9708 0 0 1 -50.3767-52.2794q-18.0643-33.4014-18.0577-76.5786 0-43.7174 17.6487-77.3966 17.6509-33.6683 49.0164-52.684 31.3677-19.0045 72.102-19.009 40.4565 0 69.6569 19.1468 29.1871 19.1448 44.9443 53.6353 15.7438 34.4884 15.7461 80.9219v16.84h-208.2863q5.7015 34.7618 28.1091 54.72 22.4055 19.9581 56.6182 19.96 27.4268 0 47.2515-8.1487t37.2046-24.7127l32.5857 39.9209q-48.6118 44.5375-119.2112 44.5353zm44.802-225.53q-19.2848-19.6914-50.51-19.6892-30.414 0-50.9146 20.0938-20.505 20.1048-25.9352 54.0442h149.3564q-2.7142-34.7621-21.9966-54.4492z"/><path d="m3590.4322 509.8817h58.3878v41.2767q32.8547-48.0717 91.5156-48.0694 50.5123 0 77.6678 31.501 27.1533 31.5076 27.1577 90.16v168.37h-59.2011v-161.31q0-39.6431-14.1234-58.3831-14.1234-18.7378-44.2641-18.7379-26.3465 0-46.4335 13.5766-20.1049 13.5834-31.501 38.0182v186.8362h-59.2055z"/><path d="m4264.7207 685.5823q0 54.04-37.3425 84.1849-37.3423 30.1407-107.1282 30.1406-52.4128 0-93.285-19.8226-40.8765-19.8181-63.6777-57.574l46.1624-36.3866q19.0045 28.787 47.5226 42.77 28.5137 13.99 65.4471 13.9856 37.209 0 57.8452-14.1234 20.6316-14.1168 20.6361-38.2893 0-20.905-14.39-34.6218-14.3969-13.71-48.8785-20.7739l-57.0317-11.95q-104.8255-21.7253-104.821-105.91 0-33.4014 17.3775-58.3875 17.3776-24.98 49.2876-38.8317 31.9077-13.85 74.8182-13.8523 95.3164 0 142.568 73.8669l-46.7047 33.4037q-16.8441-25.5263-40.0586-37.8848-23.2191-12.3564-56.3471-12.3541-36.6622 0-56.8938 13.4388-20.2317 13.4433-20.2316 38.4271 0 19.0113 13.1721 30.6875 13.1631 11.6761 46.0289 18.7379l57.0273 11.95q108.8929 22.8123 108.8974 109.169z"/><path d="m4324.3263 729.0328q-18.3378-33.4081-18.3334-77.3966 0-44.2641 18.3334-77.6678a132.13 132.13 0 0 1 51.0524-52.1415q32.7145-18.738 75.9029-18.7379 43.17 0 75.8985 18.7379a132.2284 132.2284 0 0 1 51.0568 52.1415q18.3245 33.4016 18.3289 77.6678 0 43.9908-18.3289 77.3966a132.2174 132.2174 0 0 1 -51.0569 52.1372q-32.7213 18.7378-75.8985 18.7378-42.9171 0-75.77-18.7378a131.86 131.86 0 0 1 -51.1852-52.1372zm211.6781-77.3966q0-42.63-23.2145-68.4344-23.219-25.8-61.5083-25.7974-38.2893 0-61.5083 25.7974-23.2189 25.8-23.2234 68.4344 0 42.3636 23.2234 68.1633 23.2189 25.8 61.5083 25.7974 38.2893 0 61.5083-25.7974 23.219-25.7995 23.2145-68.1633z"/><path d="m4894.1982 793.12h-58.3875v-40.7348q-32.588 47.5248-90.16 47.5226-49.9654 0-76.7164-31.501-26.7532-31.5009-26.7488-90.16v-168.3651h59.2011v161.3059q0 39.3764 13.8478 58.25 13.85 18.8779 43.4506 18.8757 25.5195 0 45.3488-13.4433 19.8248-13.4433 30.9586-37.6136v-187.3747h59.2055z"/><path d="m4959.3652 509.8817h58.3831v43.4462q27.4333-47.5183 74.9516-47.5227 15.4838 0 25.26 2.7162v54.5866a193.9055 193.9055 0 0 0 -26.8866-1.9027q-53.2263 0-72.5065 47.7939v184.1208h-59.2011z"/><path d="m5153.1235 573.8306a128.6625 128.6625 0 0 1 49.8343-52.1371q32.0344-18.5979 74.9516-18.6045 79.8327 0 118.9445 63.2776l-46.1668 31.23q-13.85-20.9118-30.9587-30.5541-17.104-9.6357-41.2767-9.6379-36.9355 0-59.7478 25.9308-22.8056 25.94-22.8056 68.03 0 44.2641 22.2632 69.248 22.2722 24.9861 62.7353 24.9839a87.9291 87.9291 0 0 0 41.2767-9.9136 84.7972 84.7972 0 0 0 30.6874-26.4775l41.2723 36.3911q-41.5432 54.3127-114.5968 54.3105-43.724 0-76.17-18.3289a126.49 126.49 0 0 1 -50.2433-51.5992q-17.791-33.2615-17.7866-78.0723.0004-44.5374 17.787-78.0768z"/><path d="m5565.2193 799.9078q-42.637 0-74.9516-18.8712a131.9592 131.9592 0 0 1 -50.3722-52.2794q-18.0711-33.4014-18.0622-76.5786 0-43.7174 17.6532-77.3966 17.6442-33.6683 49.0163-52.684 31.3677-19.0045 72.0976-19.009 40.4631 0 69.6569 19.1468 29.1871 19.1448 44.9443 53.6353 15.7438 34.4884 15.7505 80.9219v16.84h-208.2907q5.7081 34.7618 28.1091 54.72 22.4054 19.9581 56.6226 19.96 27.42 0 47.2471-8.1487 19.8248-8.1486 37.209-24.7127l32.5857 39.9209q-48.6117 44.5375-119.2156 44.5353zm44.8064-225.53q-19.2846-19.6914-50.51-19.6892-30.4207 0-50.9191 20.0938-20.505 20.1048-25.9352 54.0442h149.3608q-2.7207-34.7621-21.9965-54.4492z"/></g><path d="m572.964 400c-.1936 0-.3861.0007-.58.0017l-.7915 65.381c.1812-.002.362-.0035.5434-.0035 43.0344 0 76.4142 33.9309 148.9659 156.1376l4.4226 7.44.2895.4869 40.6134-60.9371-.2812-.4706q-14.3361-23.318-27.5456-42.9083c-10.2131-15.132-19.98-28.65-29.4588-40.7194-47.9952-61.1099-88.1438-84.4083-136.1777-84.4083z" fill="url(#a)"/><path d="m572.3845 400.0017c-48.2672.2483-90.9387 31.46-121.7513 79.22q-.1352.21-.2706.42l56.56 30.7847c.0918-.139.1842-.2785.2763-.417 17.9927-27.0905 40.3838-44.3693 64.3942-44.6265.1812-.002.362-.0035.5434-.0035l.8275-65.3794c-.194 0-.3861.0007-.5795.0017z" fill="url(#b)"/><path d="m450.6332 479.2213q-.1352.21-.2706.42c-20.2472 31.5183-35.3409 70.1951-43.498 111.92q-.053.2707-.1056.5423l63.5428 14.9929c.0332-.1811.0667-.3627.1-.5437 6.7921-36.6691 19.723-70.6787 36.5205-96.1268.0918-.139.1842-.2785.2763-.417z" fill="url(#c)"/><path d="m470.402 606.553-63.5374-14.9915q-.053.2707-.1056.5423a369.895 369.895 0 0 0 -6.7584 69.6377q0 .2835 0 .5667l65.1657 5.83c-.0052-.19-.0106-.3771-.0151-.5675q-.048-2.0334-.0487-4.1221a313.7856 313.7856 0 0 1 5.2-56.3519c.0325-.1811.066-.3627.0995-.5437z" fill="url(#d)"/><path d="m467.1479 688.47a136.1327 136.1327 0 0 1 -1.982-20.3313c-.0052-.19-.0106-.3771-.0151-.5675l-65.15-5.8292q0 .2835 0 .5667v.0369a221.5681 221.5681 0 0 0 3.5708 40.75c.0341.1821.0676.3608.1022.5424l63.5733-14.6239c-.0342-.181-.0666-.363-.0992-.5441z" fill="url(#e)"/><path d="m481.9945 722.1974c-7.0911-7.74-12.11-18.9047-14.7482-33.1836-.0334-.1807-.0658-.3627-.0984-.5443l-63.5771 14.6258c.0341.1821.0676.3608.1022.5424 4.8054 25.23 14.23 46.2568 27.7259 62.1639q.18.2122.3613.4238l50.613-43.6206c-.1265-.1348-.2532-.2707-.3787-.4074z" fill="url(#f)"/><path d="m670.3464 541.3443c-38.3114 58.764-61.52 95.6216-61.52 95.6216-51.0344 80-68.69 97.93-97.1033 97.93-11.8562 0-21.7613-4.2213-29.3495-12.291-.1265-.1345-.2534-.2707-.3787-.4074l-50.5956 43.6042q.18.2122.3613.4238c18.6348 21.7219 44.9388 33.7745 77.4794 33.7745 49.232 0 84.64-23.21 147.5858-133.2411 0 0 26.24-46.3371 44.2912-78.2559-11.1817-18.053-21.357-33.683-30.7706-47.1587z" fill="#0082fb"/><path d="m738.6331 448.5921c-.1292.1371-.2609.2772-.39.4147a394.765 394.765 0 0 0 -29.1093 35.39c9.4789 12.0693 19.2641 25.6138 29.4772 40.7458 12.0373-18.5788 23.2732-33.6261 34.286-45.1591.13-.1367.2585-.27.389-.4054z" fill="url(#g)"/><path d="m924.631 442.8317c-26.7175-26.9926-58.5755-42.8308-92.6329-42.8308-35.9117 0-66.1191 19.68-93.365 48.5912-.1292.1371-.2609.2772-.39.4147l34.6539 30.9768c.13-.1367.2585-.27.389-.4054 17.9489-18.67 35.3187-27.9912 54.5746-27.9912h-.0006c20.725 0 40.1279 9.7563 56.9318 26.86.1316.134.2623.2669.3937.4019l39.8437-35.6155c-.1326-.1345-.2654-.2676-.3982-.4017z" fill="#0082fb"/><path d="m1001.8721 653.1374c-1.4969-86.668-31.8252-164.1484-76.8429-209.9038-.1326-.1347-.2654-.2678-.3982-.4019l-39.8392 35.6155c.1316.134.2623.2669.3937.4019 33.8664 34.7875 57.095 99.4932 59.2077 174.27q.0082.2821.0159.5647l57.4721.0185q-.0046-.2823-.0091-.5649z" fill="url(#h)"/><path d="m1001.8812 653.7021q-.0047-.2823-.0091-.5647l-57.4789-.0185q.0082.2821.0159.5647.1413 5.2644.14 10.5925c0 20.3878-3.045 36.8685-9.2379 48.767-.0918.1764-.1856.3536-.2787.528l42.8543 44.57c.1059-.1615.2105-.3226.3158-.485 15.5578-24.0056 23.7256-57.3536 23.7256-97.7933q.0004-3.0881-.047-6.1607z" fill="url(#i)"/><path d="m935.3116 713.0431c-.0918.1764-.1856.3536-.2787.528-5.36 10.0295-13.01 16.7188-23.0094 19.644l19.5365 61.5686q3.88-1.3176 7.5555-2.9589 1.098-.4887 2.1775-1.0062.6225-.298 1.2395-.6049a89.159 89.159 0 0 0 32.6635-28.1691c.539-.7469 1.073-1.5 1.5965-2.2677q.553-.8106 1.0944-1.6362c.1059-.1615.2105-.3226.3158-.485z" fill="url(#j)"/><path d="m899.5853 734.8958a42.6954 42.6954 0 0 1 -17.987-3.5026l-20.0032 63.034c11.2427 3.8411 23.2363 5.572 36.6109 5.572a102.9692 102.9692 0 0 0 33.8892-5.399l-19.5311-61.5476a43.8483 43.8483 0 0 1 -12.9788 1.8432z" fill="url(#k)"/><path d="m859.5578 713.3374q-.1845-.213-.37-.4293l-46.0273 47.87q.1929.2067.386.412c15.9934 17.0436 31.2643 27.6164 48.5844 33.4188l19.9875-62.9874c-7.2991-3.1355-14.3574-8.8181-22.5606-18.2841z" fill="url(#l)"/><path d="m859.1875 712.9081c-13.8065-16.0555-30.8851-42.7869-57.75-86.0134l-35.0088-58.3885-.2812-.4706-40.6217 60.9208.2895.4869 24.8063 41.73c24.0455 40.2379 43.6347 69.3476 62.5391 89.604q.1929.2067.386.412l46.0116-47.8522q-.185-.2127-.3708-.429z" fill="url(#m)"/></svg>
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 6090.9521 1307.1739" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="739.4327" x2="604.5946" y1="604.6622" y2="427.9775"><stop offset=".0006" stop-color="#0867df"/><stop offset=".4539" stop-color="#0668e1"/><stop offset=".8591" stop-color="#0064e0"/></linearGradient><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="476.93" x2="569.3698" y1="490.2073" y2="420.0277"><stop offset=".1323" stop-color="#0064df"/><stop offset=".9988" stop-color="#0064e0"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="437.7486" x2="474.8296" y1="593.1932" y2="499.849"><stop offset=".0147" stop-color="#0072ec"/><stop offset=".6881" stop-color="#0064df"/></linearGradient><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="432.7129" x2="437.0034" y1="660.6261" y2="603.6183"><stop offset=".0731" stop-color="#007cf6"/><stop offset=".9943" stop-color="#0072ec"/></linearGradient><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="435.0724" x2="432.0034" y1="691.5921" y2="668.7519"><stop offset=".0731" stop-color="#007ff9"/><stop offset="1" stop-color="#007cf6"/></linearGradient><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="433.2708" x2="452.3974" y1="697.5917" y2="738.159"><stop offset=".0731" stop-color="#007ff9"/><stop offset="1" stop-color="#0082fb"/></linearGradient><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="727.2435" x2="752.5295" y1="501.3039" y2="466.3321"><stop offset=".2799" stop-color="#007ff8"/><stop offset=".9141" stop-color="#0082fb"/></linearGradient><linearGradient id="h" gradientUnits="userSpaceOnUse" x1="919.4945" x2="972.3929" y1="455.9788" y2="650.5693"><stop offset="0" stop-color="#0082fb"/><stop offset=".9995" stop-color="#0081fa"/></linearGradient><linearGradient id="i" gradientUnits="userSpaceOnUse" x1="985.1641" x2="951.6867" y1="658.0135" y2="725.6651"><stop offset=".0619" stop-color="#0081fa"/><stop offset="1" stop-color="#0080f9"/></linearGradient><linearGradient id="j" gradientUnits="userSpaceOnUse" x1="925.0793" x2="956.3733" y1="761.5316" y2="740.2173"><stop offset="0" stop-color="#027af3"/><stop offset="1" stop-color="#0080f9"/></linearGradient><linearGradient id="k" gradientUnits="userSpaceOnUse" x1="875.9993" x2="919.4855" y1="765.6962" y2="765.6962"><stop offset="0" stop-color="#0377ef"/><stop offset=".9994" stop-color="#0279f1"/></linearGradient><linearGradient id="l" gradientUnits="userSpaceOnUse" x1="838.1927" x2="869.456" y1="741.7469" y2="760.1399"><stop offset=".0019" stop-color="#0471e9"/><stop offset="1" stop-color="#0377ef"/></linearGradient><linearGradient id="m" gradientUnits="userSpaceOnUse" x1="742.8261" x2="842.9741" y1="606.1226" y2="732.0393"><stop offset=".2765" stop-color="#0867df"/><stop offset="1" stop-color="#0471e9"/></linearGradient><path d="m0 0h6090.9521v1307.1739h-6090.9521z" fill="none"/><g fill="#fff"><path d="m1128.7222 412.9337h75.2227l127.9067 231.3674 127.9022-231.3674h73.5962v380.1863h-61.37v-291.3869l-112.1616 201.7691h-57.57l-112.1513-201.7691v291.3869h-61.3749z"/><path d="m1731.3132 799.9078q-42.6371 0-74.9516-18.8712a131.99 131.99 0 0 1 -50.3722-52.2794q-18.0643-33.4014-18.0622-76.5786 0-43.7174 17.6532-77.3966 17.6509-33.6683 49.0208-52.684 31.3609-19.0045 72.0976-19.009 40.4631 0 69.6525 19.1468 29.1937 19.1448 44.9442 53.6353 15.7506 34.4884 15.755 80.9219v16.84h-208.2905q5.7014 34.7618 28.1046 54.72 22.4055 19.9581 56.6227 19.96 27.4266 0 47.2515-8.1487 19.8182-8.1486 37.2046-24.7127l32.59 39.9209q-48.6185 44.5375-119.2202 44.5353zm44.8109-225.53q-19.2846-19.6914-50.51-19.6892-30.4207 0-50.9191 20.0938-20.5116 20.1048-25.9352 54.0442h149.3608q-2.7206-34.7621-21.9965-54.4492z"/><path d="m1931.46 560.1206h-56.4849v-50.2389h56.4849v-83.1h59.2055v83.1h85.812v50.2389h-85.812v127.36q0 31.7744 10.86 45.3532 10.8627 13.5834 37.2046 13.5767a174.3473 174.3473 0 0 0 19.8226-.9514q8.1487-.9468 17.9244-2.5784v49.6966a168.0043 168.0043 0 0 1 -22.6766 4.8856 177.849 177.849 0 0 1 -26.4776 1.9027q-95.8634 0-95.8633-104.8211z"/><path d="m2384.9789 793.12h-58.1164v-39.65a105.0015 105.0015 0 0 1 -39.374 34.355q-23.899 12.0764-54.311 12.0829-37.4757 0-66.3983-19.1424-28.9271-19.1513-45.4867-52.6839-16.564-33.5349-16.564-76.7165 0-43.45 16.8352-76.8542 16.8375-33.4016 46.5758-52.4128 29.7271-19.0045 68.2922-19.009 29.06 0 52.146 11.2694a103.1259 103.1259 0 0 1 38.2848 31.91v-36.3868h58.1164zm-59.2011-184.12q-9.5089-24.1659-30.0073-38.156-20.505-13.9767-47.3893-13.9812-38.0226 0-60.5569 25.5263-22.5388 25.5261-22.5388 68.9767 0 43.7241 21.7252 69.248 21.7186 25.5262 58.9255 25.5262 27.4334 0 48.883-14.1234a79.7842 79.7842 0 0 0 30.9586-38.0182z"/><path d="m2529.4452 681.9147q-14.1236-35.9822-14.119-78.89 0-42.9037 14.119-78.8859a185.3686 185.3686 0 0 1 39.9208-62.46 180.4166 180.4166 0 0 1 60.8281-41.0055q35.0286-14.53 76.85-14.5325 41.8236 0 76.8543 14.5325a180.4785 180.4785 0 0 1 60.8326 41.0055 185.574 185.574 0 0 1 39.9208 62.46q14.11 35.9822 14.119 78.8859 0 42.91-14.119 78.89a185.5731 185.5731 0 0 1 -39.9208 62.46 180.4146 180.4146 0 0 1 -60.8326 41.0056q-35.0286 14.5234-76.8543 14.5279-41.8168 0-76.85-14.5279a180.3528 180.3528 0 0 1 -60.8281-41.0056 185.3677 185.3677 0 0 1 -39.9208-62.46zm304.4207-78.89q0-40.9967-16.2929-72.3687-16.2906-31.3677-44.9442-49.0164-28.6537-17.6509-65.5849-17.6532-36.929 0-65.58 17.6532-28.6536 17.651-44.9442 49.0164-16.2907 31.361-16.2929 72.3687 0 41.01 16.2929 72.3732 16.2972 31.3675 44.9442 49.0163 28.647 17.6577 65.58 17.6532 36.9289 0 65.5849-17.6532 28.6536-17.6509 44.9442-49.0163 16.2908-31.3679 16.2929-72.3735z"/><path d="m2953.0816 509.8817h58.3831v39.3741a104.2357 104.2357 0 0 1 39.2451-34.2173q23.7523-11.9429 54.1731-11.9495 37.4758 0 66.5318 19.1468 29.06 19.1448 45.4866 52.5462 16.4307 33.4014 16.4307 76.8542 0 43.1772-16.8352 76.7165-16.8375 33.5415-46.5758 52.5461-29.7273 19.0045-68.2922 19.009-28.5136 0-51.328-10.86a101.94 101.94 0 0 1 -38.0182-30.9586v149.0847h-59.201zm89.2084 222.2719q20.4984 13.99 47.3893 13.9856 38.0093 0 60.557-25.5262 22.5389-25.5263 22.5388-68.9768 0-43.724-21.7253-69.2479-21.7319-25.5262-58.9254-25.5263-27.4333 0-48.883 14.119a79.776 79.776 0 0 0 -30.9587 38.0182v84.9984q9.5022 24.1724 30.0073 38.156z"/><path d="m3414.7361 799.9078q-42.6371 0-74.9516-18.8712a131.9708 131.9708 0 0 1 -50.3767-52.2794q-18.0643-33.4014-18.0577-76.5786 0-43.7174 17.6487-77.3966 17.6509-33.6683 49.0164-52.684 31.3677-19.0045 72.102-19.009 40.4565 0 69.6569 19.1468 29.1871 19.1448 44.9443 53.6353 15.7438 34.4884 15.7461 80.9219v16.84h-208.2863q5.7015 34.7618 28.1091 54.72 22.4055 19.9581 56.6182 19.96 27.4268 0 47.2515-8.1487t37.2046-24.7127l32.5857 39.9209q-48.6118 44.5375-119.2112 44.5353zm44.802-225.53q-19.2848-19.6914-50.51-19.6892-30.414 0-50.9146 20.0938-20.505 20.1048-25.9352 54.0442h149.3564q-2.7142-34.7621-21.9966-54.4492z"/><path d="m3590.4322 509.8817h58.3878v41.2767q32.8547-48.0717 91.5156-48.0694 50.5123 0 77.6678 31.501 27.1533 31.5076 27.1577 90.16v168.37h-59.2011v-161.31q0-39.6431-14.1234-58.3831-14.1234-18.7378-44.2641-18.7379-26.3465 0-46.4335 13.5766-20.1049 13.5834-31.501 38.0182v186.8362h-59.2055z"/><path d="m4264.7207 685.5823q0 54.04-37.3425 84.1849-37.3423 30.1407-107.1282 30.1406-52.4128 0-93.285-19.8226-40.8765-19.8181-63.6777-57.574l46.1624-36.3866q19.0045 28.787 47.5226 42.77 28.5137 13.99 65.4471 13.9856 37.209 0 57.8452-14.1234 20.6316-14.1168 20.6361-38.2893 0-20.905-14.39-34.6218-14.3969-13.71-48.8785-20.7739l-57.0317-11.95q-104.8255-21.7253-104.821-105.91 0-33.4014 17.3775-58.3875 17.3776-24.98 49.2876-38.8317 31.9077-13.85 74.8182-13.8523 95.3164 0 142.568 73.8669l-46.7047 33.4037q-16.8441-25.5263-40.0586-37.8848-23.2191-12.3564-56.3471-12.3541-36.6622 0-56.8938 13.4388-20.2317 13.4433-20.2316 38.4271 0 19.0113 13.1721 30.6875 13.1631 11.6761 46.0289 18.7379l57.0273 11.95q108.8929 22.8123 108.8974 109.169z"/><path d="m4324.3263 729.0328q-18.3378-33.4081-18.3334-77.3966 0-44.2641 18.3334-77.6678a132.13 132.13 0 0 1 51.0524-52.1415q32.7145-18.738 75.9029-18.7379 43.17 0 75.8985 18.7379a132.2284 132.2284 0 0 1 51.0568 52.1415q18.3245 33.4016 18.3289 77.6678 0 43.9908-18.3289 77.3966a132.2174 132.2174 0 0 1 -51.0569 52.1372q-32.7213 18.7378-75.8985 18.7378-42.9171 0-75.77-18.7378a131.86 131.86 0 0 1 -51.1852-52.1372zm211.6781-77.3966q0-42.63-23.2145-68.4344-23.219-25.8-61.5083-25.7974-38.2893 0-61.5083 25.7974-23.2189 25.8-23.2234 68.4344 0 42.3636 23.2234 68.1633 23.2189 25.8 61.5083 25.7974 38.2893 0 61.5083-25.7974 23.219-25.7995 23.2145-68.1633z"/><path d="m4894.1982 793.12h-58.3875v-40.7348q-32.588 47.5248-90.16 47.5226-49.9654 0-76.7164-31.501-26.7532-31.5009-26.7488-90.16v-168.3651h59.2011v161.3059q0 39.3764 13.8478 58.25 13.85 18.8779 43.4506 18.8757 25.5195 0 45.3488-13.4433 19.8248-13.4433 30.9586-37.6136v-187.3747h59.2055z"/><path d="m4959.3652 509.8817h58.3831v43.4462q27.4333-47.5183 74.9516-47.5227 15.4838 0 25.26 2.7162v54.5866a193.9055 193.9055 0 0 0 -26.8866-1.9027q-53.2263 0-72.5065 47.7939v184.1208h-59.2011z"/><path d="m5153.1235 573.8306a128.6625 128.6625 0 0 1 49.8343-52.1371q32.0344-18.5979 74.9516-18.6045 79.8327 0 118.9445 63.2776l-46.1668 31.23q-13.85-20.9118-30.9587-30.5541-17.104-9.6357-41.2767-9.6379-36.9355 0-59.7478 25.9308-22.8056 25.94-22.8056 68.03 0 44.2641 22.2632 69.248 22.2722 24.9861 62.7353 24.9839a87.9291 87.9291 0 0 0 41.2767-9.9136 84.7972 84.7972 0 0 0 30.6874-26.4775l41.2723 36.3911q-41.5432 54.3127-114.5968 54.3105-43.724 0-76.17-18.3289a126.49 126.49 0 0 1 -50.2433-51.5992q-17.791-33.2615-17.7866-78.0723.0004-44.5374 17.787-78.0768z"/><path d="m5565.2193 799.9078q-42.637 0-74.9516-18.8712a131.9592 131.9592 0 0 1 -50.3722-52.2794q-18.0711-33.4014-18.0622-76.5786 0-43.7174 17.6532-77.3966 17.6442-33.6683 49.0163-52.684 31.3677-19.0045 72.0976-19.009 40.4631 0 69.6569 19.1468 29.1871 19.1448 44.9443 53.6353 15.7438 34.4884 15.7505 80.9219v16.84h-208.2907q5.7081 34.7618 28.1091 54.72 22.4054 19.9581 56.6226 19.96 27.42 0 47.2471-8.1487 19.8248-8.1486 37.209-24.7127l32.5857 39.9209q-48.6117 44.5375-119.2156 44.5353zm44.8064-225.53q-19.2846-19.6914-50.51-19.6892-30.4207 0-50.9191 20.0938-20.505 20.1048-25.9352 54.0442h149.3608q-2.7207-34.7621-21.9965-54.4492z"/></g><path d="m572.964 400c-.1936 0-.3861.0007-.58.0017l-.7915 65.381c.1812-.002.362-.0035.5434-.0035 43.0344 0 76.4142 33.9309 148.9659 156.1376l4.4226 7.44.2895.4869 40.6134-60.9371-.2812-.4706q-14.3361-23.318-27.5456-42.9083c-10.2131-15.132-19.98-28.65-29.4588-40.7194-47.9952-61.1099-88.1438-84.4083-136.1777-84.4083z" fill="url(#a)"/><path d="m572.3845 400.0017c-48.2672.2483-90.9387 31.46-121.7513 79.22q-.1352.21-.2706.42l56.56 30.7847c.0918-.139.1842-.2785.2763-.417 17.9927-27.0905 40.3838-44.3693 64.3942-44.6265.1812-.002.362-.0035.5434-.0035l.8275-65.3794c-.194 0-.3861.0007-.5795.0017z" fill="url(#b)"/><path d="m450.6332 479.2213q-.1352.21-.2706.42c-20.2472 31.5183-35.3409 70.1951-43.498 111.92q-.053.2707-.1056.5423l63.5428 14.9929c.0332-.1811.0667-.3627.1-.5437 6.7921-36.6691 19.723-70.6787 36.5205-96.1268.0918-.139.1842-.2785.2763-.417z" fill="url(#c)"/><path d="m470.402 606.553-63.5374-14.9915q-.053.2707-.1056.5423a369.895 369.895 0 0 0 -6.7584 69.6377q0 .2835 0 .5667l65.1657 5.83c-.0052-.19-.0106-.3771-.0151-.5675q-.048-2.0334-.0487-4.1221a313.7856 313.7856 0 0 1 5.2-56.3519c.0325-.1811.066-.3627.0995-.5437z" fill="url(#d)"/><path d="m467.1479 688.47a136.1327 136.1327 0 0 1 -1.982-20.3313c-.0052-.19-.0106-.3771-.0151-.5675l-65.15-5.8292q0 .2835 0 .5667v.0369a221.5681 221.5681 0 0 0 3.5708 40.75c.0341.1821.0676.3608.1022.5424l63.5733-14.6239c-.0342-.181-.0666-.363-.0992-.5441z" fill="url(#e)"/><path d="m481.9945 722.1974c-7.0911-7.74-12.11-18.9047-14.7482-33.1836-.0334-.1807-.0658-.3627-.0984-.5443l-63.5771 14.6258c.0341.1821.0676.3608.1022.5424 4.8054 25.23 14.23 46.2568 27.7259 62.1639q.18.2122.3613.4238l50.613-43.6206c-.1265-.1348-.2532-.2707-.3787-.4074z" fill="url(#f)"/><path d="m670.3464 541.3443c-38.3114 58.764-61.52 95.6216-61.52 95.6216-51.0344 80-68.69 97.93-97.1033 97.93-11.8562 0-21.7613-4.2213-29.3495-12.291-.1265-.1345-.2534-.2707-.3787-.4074l-50.5956 43.6042q.18.2122.3613.4238c18.6348 21.7219 44.9388 33.7745 77.4794 33.7745 49.232 0 84.64-23.21 147.5858-133.2411 0 0 26.24-46.3371 44.2912-78.2559-11.1817-18.053-21.357-33.683-30.7706-47.1587z" fill="#0082fb"/><path d="m738.6331 448.5921c-.1292.1371-.2609.2772-.39.4147a394.765 394.765 0 0 0 -29.1093 35.39c9.4789 12.0693 19.2641 25.6138 29.4772 40.7458 12.0373-18.5788 23.2732-33.6261 34.286-45.1591.13-.1367.2585-.27.389-.4054z" fill="url(#g)"/><path d="m924.631 442.8317c-26.7175-26.9926-58.5755-42.8308-92.6329-42.8308-35.9117 0-66.1191 19.68-93.365 48.5912-.1292.1371-.2609.2772-.39.4147l34.6539 30.9768c.13-.1367.2585-.27.389-.4054 17.9489-18.67 35.3187-27.9912 54.5746-27.9912h-.0006c20.725 0 40.1279 9.7563 56.9318 26.86.1316.134.2623.2669.3937.4019l39.8437-35.6155c-.1326-.1345-.2654-.2676-.3982-.4017z" fill="#0082fb"/><path d="m1001.8721 653.1374c-1.4969-86.668-31.8252-164.1484-76.8429-209.9038-.1326-.1347-.2654-.2678-.3982-.4019l-39.8392 35.6155c.1316.134.2623.2669.3937.4019 33.8664 34.7875 57.095 99.4932 59.2077 174.27q.0082.2821.0159.5647l57.4721.0185q-.0046-.2823-.0091-.5649z" fill="url(#h)"/><path d="m1001.8812 653.7021q-.0047-.2823-.0091-.5647l-57.4789-.0185q.0082.2821.0159.5647.1413 5.2644.14 10.5925c0 20.3878-3.045 36.8685-9.2379 48.767-.0918.1764-.1856.3536-.2787.528l42.8543 44.57c.1059-.1615.2105-.3226.3158-.485 15.5578-24.0056 23.7256-57.3536 23.7256-97.7933q.0004-3.0881-.047-6.1607z" fill="url(#i)"/><path d="m935.3116 713.0431c-.0918.1764-.1856.3536-.2787.528-5.36 10.0295-13.01 16.7188-23.0094 19.644l19.5365 61.5686q3.88-1.3176 7.5555-2.9589 1.098-.4887 2.1775-1.0062.6225-.298 1.2395-.6049a89.159 89.159 0 0 0 32.6635-28.1691c.539-.7469 1.073-1.5 1.5965-2.2677q.553-.8106 1.0944-1.6362c.1059-.1615.2105-.3226.3158-.485z" fill="url(#j)"/><path d="m899.5853 734.8958a42.6954 42.6954 0 0 1 -17.987-3.5026l-20.0032 63.034c11.2427 3.8411 23.2363 5.572 36.6109 5.572a102.9692 102.9692 0 0 0 33.8892-5.399l-19.5311-61.5476a43.8483 43.8483 0 0 1 -12.9788 1.8432z" fill="url(#k)"/><path d="m859.5578 713.3374q-.1845-.213-.37-.4293l-46.0273 47.87q.1929.2067.386.412c15.9934 17.0436 31.2643 27.6164 48.5844 33.4188l19.9875-62.9874c-7.2991-3.1355-14.3574-8.8181-22.5606-18.2841z" fill="url(#l)"/><path d="m859.1875 712.9081c-13.8065-16.0555-30.8851-42.7869-57.75-86.0134l-35.0088-58.3885-.2812-.4706-40.6217 60.9208.2895.4869 24.8063 41.73c24.0455 40.2379 43.6347 69.3476 62.5391 89.604q.1929.2067.386.412l46.0116-47.8522q-.185-.2127-.3708-.429z" fill="url(#m)"/></svg>
@@ -14,7 +14,7 @@ Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new
14
14
 
15
15
  ### What you'll need
16
16
 
17
- - [Node.js](https://nodejs.org/en/download/) version 14 or above:
17
+ - [Node.js](https://nodejs.org/en/download/) version 16.14 or above:
18
18
  - When installing Node.js, you are recommended to check all checkboxes related to dependencies.
19
19
 
20
20
  ## Generate a new site
@@ -31,4 +31,4 @@ Congratulations, you have made your first post!
31
31
  Feel free to play around and edit this post as much you like.
32
32
  ```
33
33
 
34
- A new blog post is now available at `http://localhost:3000/blog/greetings`.
34
+ A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings).
@@ -12,7 +12,7 @@ Documents are **groups of pages** connected through:
12
12
 
13
13
  ## Create your first Doc
14
14
 
15
- Create a markdown file at `docs/hello.md`:
15
+ Create a Markdown file at `docs/hello.md`:
16
16
 
17
17
  ```md title="docs/hello.md"
18
18
  # Hello
@@ -20,7 +20,7 @@ Create a markdown file at `docs/hello.md`:
20
20
  This is my **first Docusaurus document**!
21
21
  ```
22
22
 
23
- A new document is now available at `http://localhost:3000/docs/hello`.
23
+ A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello).
24
24
 
25
25
  ## Configure the Sidebar
26
26
 
@@ -6,9 +6,9 @@ sidebar_position: 1
6
6
 
7
7
  Add **Markdown or React** files to `src/pages` to create a **standalone page**:
8
8
 
9
- - `src/pages/index.js` -> `localhost:3000/`
10
- - `src/pages/foo.md` -> `localhost:3000/foo`
11
- - `src/pages/foo/bar.js` -> `localhost:3000/foo/bar`
9
+ - `src/pages/index.js` `localhost:3000/`
10
+ - `src/pages/foo.md` `localhost:3000/foo`
11
+ - `src/pages/foo/bar.js` `localhost:3000/foo/bar`
12
12
 
13
13
  ## Create your first React Page
14
14
 
@@ -28,7 +28,7 @@ export default function MyReactPage() {
28
28
  }
29
29
  ```
30
30
 
31
- A new page is now available at `http://localhost:3000/my-react-page`.
31
+ A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page).
32
32
 
33
33
  ## Create your first Markdown Page
34
34
 
@@ -40,4 +40,4 @@ Create a file at `src/pages/my-markdown-page.md`:
40
40
  This is a Markdown page
41
41
  ```
42
42
 
43
- A new page is now available at `http://localhost:3000/my-markdown-page`.
43
+ A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page).
@@ -26,6 +26,6 @@ Test your production build locally:
26
26
  npm run serve
27
27
  ```
28
28
 
29
- The `build` folder is now served at `http://localhost:3000/`.
29
+ The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/).
30
30
 
31
31
  You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**).
@@ -39,7 +39,7 @@ Start your site on the French locale:
39
39
  npm run start -- --locale fr
40
40
  ```
41
41
 
42
- Your localized site is accessible at `http://localhost:3000/fr/` and the `Getting Started` page is translated.
42
+ Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated.
43
43
 
44
44
  :::caution
45
45