@docusaurus/core 2.0.0-beta.138b4c997 → 2.0.0-beta.14
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/beforeCli.js +124 -0
- package/bin/docusaurus.js +42 -109
- package/lib/babel/preset.d.ts +6 -0
- package/lib/babel/preset.js +3 -3
- package/lib/choosePort.js +19 -20
- package/lib/client/.eslintrc.js +0 -1
- package/lib/client/App.js +12 -22
- package/lib/client/LinksCollector.d.ts +2 -2
- package/lib/client/LinksCollector.js +4 -8
- package/lib/client/PendingNavigation.d.ts +24 -1
- package/lib/client/PendingNavigation.js +1 -1
- package/lib/client/baseUrlIssueBanner/BaseUrlIssueBanner.d.ts +5 -0
- package/lib/client/client-lifecycles-dispatcher.d.ts +2 -2
- package/lib/client/client-lifecycles-dispatcher.js +0 -2
- package/lib/client/docusaurus.d.ts +6 -0
- package/lib/client/docusaurus.js +11 -19
- package/lib/client/exports/BrowserOnly.js +5 -3
- package/lib/client/exports/ErrorBoundary.d.ts +18 -0
- package/lib/client/exports/ErrorBoundary.js +35 -0
- package/lib/client/exports/Interpolate.js +12 -15
- package/lib/client/exports/Link.js +11 -11
- package/lib/client/exports/Translate.d.ts +2 -2
- package/lib/client/exports/Translate.js +13 -9
- package/lib/client/exports/browserContext.d.ts +11 -0
- package/lib/client/exports/browserContext.js +21 -0
- package/lib/client/exports/constants.js +1 -11
- package/lib/client/exports/{context.d.ts → docusaurusContext.d.ts} +5 -3
- package/lib/client/exports/docusaurusContext.js +25 -0
- package/lib/client/exports/useBaseUrl.js +2 -4
- package/lib/client/exports/useDocusaurusContext.js +2 -7
- package/lib/client/exports/useGlobalData.js +1 -5
- package/lib/client/exports/{context.js → useIsBrowser.d.ts} +1 -2
- package/lib/{webpack/sharedModuleAliases.d.ts → client/exports/useIsBrowser.js} +5 -4
- package/lib/client/flat.d.ts +2 -1
- package/lib/client/flat.js +7 -9
- package/lib/client/normalizeLocation.d.ts +1 -3
- package/lib/client/prefetch.js +0 -1
- package/lib/client/serverEntry.js +20 -42
- package/lib/client/theme-fallback/Error/index.js +47 -0
- package/lib/client/theme-fallback/Layout/index.js +1 -1
- package/lib/client/theme-fallback/Loading/index.js +2 -2
- package/lib/client/theme-fallback/Root/index.js +1 -3
- package/lib/commands/build.js +39 -44
- package/lib/commands/clear.d.ts +6 -0
- package/lib/commands/clear.js +17 -18
- package/lib/commands/commandUtils.d.ts +6 -0
- package/lib/commands/commandUtils.js +7 -7
- package/lib/commands/deploy.d.ts +3 -0
- package/lib/commands/deploy.js +99 -64
- package/lib/commands/external.js +4 -4
- package/lib/commands/serve.js +12 -18
- package/lib/commands/start.js +98 -86
- package/lib/commands/swizzle.js +57 -66
- package/lib/commands/writeHeadingIds.d.ts +9 -6
- package/lib/commands/writeHeadingIds.js +33 -34
- package/lib/commands/writeTranslations.js +31 -11
- package/lib/server/brokenLinks.js +13 -17
- package/lib/server/client-modules/index.js +1 -3
- package/lib/server/config.js +4 -4
- package/lib/server/configValidation.d.ts +1 -1
- package/lib/server/configValidation.js +14 -7
- package/lib/server/duplicateRoutes.js +8 -2
- package/lib/server/html-tags/htmlTags.js +5 -6
- package/lib/server/html-tags/index.js +2 -2
- package/lib/server/i18n.js +16 -16
- package/lib/server/index.js +132 -59
- package/lib/server/loadSetup.js +3 -3
- package/lib/server/moduleShorthand.d.ts +9 -0
- package/lib/server/moduleShorthand.js +42 -0
- package/lib/server/plugins/applyRouteTrailingSlash.d.ts +2 -1
- package/lib/server/plugins/applyRouteTrailingSlash.js +3 -3
- package/lib/server/plugins/index.d.ts +1 -1
- package/lib/server/plugins/index.js +28 -21
- package/lib/server/plugins/init.js +9 -12
- package/lib/server/plugins/pluginIds.js +6 -4
- package/lib/server/presets/index.js +12 -12
- package/lib/server/routes.js +41 -23
- package/lib/server/themes/alias.d.ts +1 -0
- package/lib/server/themes/alias.js +21 -12
- package/lib/server/themes/index.d.ts +1 -1
- package/lib/server/themes/index.js +22 -23
- package/lib/server/translations/translations.d.ts +6 -0
- package/lib/server/translations/translations.js +19 -26
- package/lib/server/translations/translationsExtractor.d.ts +7 -1
- package/lib/server/translations/translationsExtractor.js +66 -59
- package/lib/server/utils.d.ts +8 -2
- package/lib/server/utils.js +8 -10
- package/lib/server/versions/__fixtures__/dummy-plugin.d.ts +0 -0
- package/lib/server/versions/__tests/index.test.js +5 -5
- package/lib/server/versions/index.js +6 -6
- package/lib/webpack/base.js +13 -15
- package/lib/webpack/client.js +9 -18
- package/lib/webpack/plugins/CleanWebpackPlugin.js +4 -11
- package/lib/webpack/plugins/LogPlugin.js +5 -6
- package/lib/webpack/plugins/WaitPlugin.js +4 -4
- package/lib/webpack/server.js +13 -9
- package/lib/webpack/utils.d.ts +0 -22
- package/lib/webpack/utils.js +37 -134
- package/package.json +55 -50
- package/lib/.tsbuildinfo +0 -1
- package/lib/client/.tsbuildinfo +0 -1
- package/lib/commands/buildRemoteBranchUrl.d.ts +0 -7
- package/lib/commands/buildRemoteBranchUrl.js +0 -27
- package/lib/constants.d.ts +0 -18
- package/lib/constants.js +0 -23
- package/lib/webpack/react-dev-utils-webpack5/README.md +0 -11
- package/lib/webpack/react-dev-utils-webpack5/evalSourceMapMiddleware.js +0 -57
- package/lib/webpack/react-dev-utils-webpack5/formatWebpackMessages.js +0 -138
- package/lib/webpack/react-dev-utils-webpack5/webpackHotDevClient.js +0 -285
- package/lib/webpack/sharedModuleAliases.js +0 -18
- package/tsconfig.client.json +0 -13
- package/tsconfig.json +0 -13
|
@@ -7,19 +7,18 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
const tslib_1 = require("tslib");
|
|
10
|
-
const module_1 =
|
|
11
|
-
const import_fresh_1 = tslib_1.__importDefault(require("import-fresh"));
|
|
10
|
+
const module_1 = require("module");
|
|
11
|
+
const import_fresh_1 = (0, tslib_1.__importDefault)(require("import-fresh"));
|
|
12
|
+
const moduleShorthand_1 = require("../moduleShorthand");
|
|
12
13
|
function loadPresets(context) {
|
|
13
|
-
// We need to resolve
|
|
14
|
-
// declares the dependency on these
|
|
15
|
-
|
|
16
|
-
// See: https://nodejs.org/api/modules.html#modules_module_createrequire_filename
|
|
17
|
-
const createRequire = module_1.default.createRequire || module_1.default.createRequireFromPath;
|
|
18
|
-
const pluginRequire = createRequire(context.siteConfigPath);
|
|
14
|
+
// We need to resolve presets from the perspective of the siteDir, since the siteDir's package.json
|
|
15
|
+
// declares the dependency on these presets.
|
|
16
|
+
const presetRequire = (0, module_1.createRequire)(context.siteConfigPath);
|
|
19
17
|
const presets = (context.siteConfig || {}).presets || [];
|
|
20
18
|
const unflatPlugins = [];
|
|
21
19
|
const unflatThemes = [];
|
|
22
20
|
presets.forEach((presetItem) => {
|
|
21
|
+
var _a;
|
|
23
22
|
let presetModuleImport;
|
|
24
23
|
let presetOptions = {};
|
|
25
24
|
if (typeof presetItem === 'string') {
|
|
@@ -31,8 +30,9 @@ function loadPresets(context) {
|
|
|
31
30
|
else {
|
|
32
31
|
throw new Error('Invalid presets format detected in config.');
|
|
33
32
|
}
|
|
34
|
-
const
|
|
35
|
-
const
|
|
33
|
+
const presetName = (0, moduleShorthand_1.resolveModuleName)(presetModuleImport, presetRequire, 'preset');
|
|
34
|
+
const presetModule = (0, import_fresh_1.default)(presetRequire.resolve(presetName));
|
|
35
|
+
const preset = ((_a = presetModule.default) !== null && _a !== void 0 ? _a : presetModule)(context, presetOptions);
|
|
36
36
|
if (preset.plugins) {
|
|
37
37
|
unflatPlugins.push(preset.plugins);
|
|
38
38
|
}
|
|
@@ -41,8 +41,8 @@ function loadPresets(context) {
|
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
return {
|
|
44
|
-
plugins:
|
|
45
|
-
themes:
|
|
44
|
+
plugins: unflatPlugins.flat().filter(Boolean),
|
|
45
|
+
themes: unflatThemes.flat().filter(Boolean),
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
exports.default = loadPresets;
|
package/lib/server/routes.js
CHANGED
|
@@ -9,18 +9,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
const utils_1 = require("@docusaurus/utils");
|
|
10
10
|
const lodash_1 = require("lodash");
|
|
11
11
|
const querystring_1 = require("querystring");
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
${
|
|
20
|
-
]
|
|
21
|
-
|
|
22
|
-
:
|
|
23
|
-
|
|
12
|
+
function indent(str) {
|
|
13
|
+
const spaces = ' ';
|
|
14
|
+
return `${spaces}${str.replace(/(\n)/g, `\n${spaces}`)}`;
|
|
15
|
+
}
|
|
16
|
+
const createRouteCodeString = ({ routePath, routeHash, exact, subroutesCodeStrings, props, }) => {
|
|
17
|
+
const parts = [
|
|
18
|
+
`path: '${routePath}'`,
|
|
19
|
+
`component: ComponentCreator('${routePath}','${routeHash}')`,
|
|
20
|
+
];
|
|
21
|
+
if (exact) {
|
|
22
|
+
parts.push(`exact: true`);
|
|
23
|
+
}
|
|
24
|
+
if (subroutesCodeStrings) {
|
|
25
|
+
parts.push(`routes: [
|
|
26
|
+
${indent((0, utils_1.removeSuffix)(subroutesCodeStrings.join(',\n'), ',\n'))}
|
|
27
|
+
]`);
|
|
28
|
+
}
|
|
29
|
+
Object.entries(props).forEach(([propName, propValue]) => {
|
|
30
|
+
// Figure out how to "unquote" JS attributes that don't need to be quoted
|
|
31
|
+
// Is this lib reliable? https://github.com/armanozak/should-quote
|
|
32
|
+
const shouldQuote = true; // TODO
|
|
33
|
+
const key = shouldQuote ? `'${propName}'` : propName;
|
|
34
|
+
parts.push(`${key}: ${JSON.stringify(propValue)}`);
|
|
35
|
+
});
|
|
36
|
+
return `{
|
|
37
|
+
${indent(parts.join(',\n'))}
|
|
38
|
+
}`;
|
|
24
39
|
};
|
|
25
40
|
const NotFoundRouteCode = `{
|
|
26
41
|
path: '*',
|
|
@@ -31,10 +46,10 @@ const RoutesImportsCode = [
|
|
|
31
46
|
`import ComponentCreator from '@docusaurus/ComponentCreator';`,
|
|
32
47
|
].join('\n');
|
|
33
48
|
function isModule(value) {
|
|
34
|
-
if (lodash_1.isString(value)) {
|
|
49
|
+
if ((0, lodash_1.isString)(value)) {
|
|
35
50
|
return true;
|
|
36
51
|
}
|
|
37
|
-
if (lodash_1.isPlainObject(value) && lodash_1.has(value, '__import') && lodash_1.has(value, 'path')) {
|
|
52
|
+
if ((0, lodash_1.isPlainObject)(value) && (0, lodash_1.has)(value, '__import') && (0, lodash_1.has)(value, 'path')) {
|
|
38
53
|
return true;
|
|
39
54
|
}
|
|
40
55
|
return false;
|
|
@@ -43,17 +58,17 @@ function getModulePath(target) {
|
|
|
43
58
|
if (typeof target === 'string') {
|
|
44
59
|
return target;
|
|
45
60
|
}
|
|
46
|
-
const queryStr = target.query ? `?${querystring_1.stringify(target.query)}` : '';
|
|
61
|
+
const queryStr = target.query ? `?${(0, querystring_1.stringify)(target.query)}` : '';
|
|
47
62
|
return `${target.path}${queryStr}`;
|
|
48
63
|
}
|
|
49
64
|
async function loadRoutes(pluginsRouteConfigs, baseUrl) {
|
|
50
65
|
const registry = {};
|
|
51
|
-
const routesPaths = [utils_1.normalizeUrl([baseUrl, '404.html'])];
|
|
66
|
+
const routesPaths = [(0, utils_1.normalizeUrl)([baseUrl, '404.html'])];
|
|
52
67
|
const routesChunkNames = {};
|
|
53
68
|
// This is the higher level overview of route code generation.
|
|
54
69
|
function generateRouteCode(routeConfig) {
|
|
55
|
-
const { path: routePath, component, modules = {}, routes: subroutes, exact, } = routeConfig;
|
|
56
|
-
if (!lodash_1.isString(routePath) || !component) {
|
|
70
|
+
const { path: routePath, component, modules = {}, routes: subroutes, exact, priority, ...props } = routeConfig;
|
|
71
|
+
if (!(0, lodash_1.isString)(routePath) || !component) {
|
|
57
72
|
throw new Error(`Invalid route config: path must be a string and component is required.\n${JSON.stringify(routeConfig)}`);
|
|
58
73
|
}
|
|
59
74
|
// Collect all page paths for injecting it later in the plugin lifecycle
|
|
@@ -65,7 +80,7 @@ async function loadRoutes(pluginsRouteConfigs, baseUrl) {
|
|
|
65
80
|
// We hash the route to generate the key, because 2 routes can conflict with
|
|
66
81
|
// each others if they have the same path, ex: parent=/docs, child=/docs
|
|
67
82
|
// see https://github.com/facebook/docusaurus/issues/2917
|
|
68
|
-
const routeHash = utils_1.simpleHash(JSON.stringify(routeConfig), 3);
|
|
83
|
+
const routeHash = (0, utils_1.simpleHash)(JSON.stringify(routeConfig), 3);
|
|
69
84
|
const chunkNamesKey = `${routePath}-${routeHash}`;
|
|
70
85
|
routesChunkNames[chunkNamesKey] = {
|
|
71
86
|
...genRouteChunkNames(registry, { component }, 'component', component),
|
|
@@ -76,14 +91,17 @@ async function loadRoutes(pluginsRouteConfigs, baseUrl) {
|
|
|
76
91
|
routeHash,
|
|
77
92
|
exact,
|
|
78
93
|
subroutesCodeStrings: subroutes === null || subroutes === void 0 ? void 0 : subroutes.map(generateRouteCode),
|
|
94
|
+
props,
|
|
79
95
|
});
|
|
80
96
|
}
|
|
81
97
|
const routesConfig = `
|
|
82
98
|
${RoutesImportsCode}
|
|
99
|
+
|
|
83
100
|
export default [
|
|
84
|
-
${pluginsRouteConfigs.map(generateRouteCode).join(',\n')}
|
|
85
|
-
${NotFoundRouteCode}
|
|
86
|
-
]
|
|
101
|
+
${indent(`${pluginsRouteConfigs.map(generateRouteCode).join(',\n')},`)}
|
|
102
|
+
${indent(NotFoundRouteCode)}
|
|
103
|
+
];
|
|
104
|
+
`;
|
|
87
105
|
return {
|
|
88
106
|
registry,
|
|
89
107
|
routesConfig,
|
|
@@ -103,7 +121,7 @@ registry, value, prefix, name) {
|
|
|
103
121
|
}
|
|
104
122
|
if (isModule(value)) {
|
|
105
123
|
const modulePath = getModulePath(value);
|
|
106
|
-
const chunkName = utils_1.genChunkName(modulePath, prefix, name);
|
|
124
|
+
const chunkName = (0, utils_1.genChunkName)(modulePath, prefix, name);
|
|
107
125
|
// We need to JSON.stringify so that if its on windows, backslashes are escaped.
|
|
108
126
|
const loader = `() => import(/* webpackChunkName: '${chunkName}' */ ${JSON.stringify(modulePath)})`;
|
|
109
127
|
registry[chunkName] = {
|
|
@@ -5,4 +5,5 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import { ThemeAliases } from '@docusaurus/types';
|
|
8
|
+
export declare function sortAliases(aliases: ThemeAliases): ThemeAliases;
|
|
8
9
|
export default function themeAlias(themePath: string, addOriginalAlias: boolean): ThemeAliases;
|
|
@@ -6,35 +6,44 @@
|
|
|
6
6
|
* LICENSE file in the root directory of this source tree.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.sortAliases = void 0;
|
|
9
10
|
const tslib_1 = require("tslib");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
11
|
+
const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
|
|
12
|
+
const path_1 = (0, tslib_1.__importDefault)(require("path"));
|
|
13
13
|
const utils_1 = require("@docusaurus/utils");
|
|
14
14
|
const lodash_1 = require("lodash");
|
|
15
|
+
// Order of Webpack aliases is important because one alias can shadow another
|
|
16
|
+
// This ensure @theme/NavbarItem alias is after @theme/NavbarItem/LocaleDropdown
|
|
17
|
+
// See https://github.com/facebook/docusaurus/pull/3922
|
|
18
|
+
// See https://github.com/facebook/docusaurus/issues/5382
|
|
19
|
+
function sortAliases(aliases) {
|
|
20
|
+
// Alphabetical order by default
|
|
21
|
+
const entries = (0, lodash_1.sortBy)(Object.entries(aliases), ([alias]) => alias);
|
|
22
|
+
// @theme/NavbarItem should be after @theme/NavbarItem/LocaleDropdown
|
|
23
|
+
entries.sort(([alias1], [alias2]) => alias1.includes(`${alias2}/`) ? -1 : 0);
|
|
24
|
+
return Object.fromEntries(entries);
|
|
25
|
+
}
|
|
26
|
+
exports.sortAliases = sortAliases;
|
|
15
27
|
// TODO make async
|
|
16
28
|
function themeAlias(themePath, addOriginalAlias) {
|
|
17
29
|
if (!fs_extra_1.default.pathExistsSync(themePath)) {
|
|
18
30
|
return {};
|
|
19
31
|
}
|
|
20
|
-
const themeComponentFiles =
|
|
32
|
+
const themeComponentFiles = utils_1.Globby.sync(['**/*.{js,jsx,ts,tsx}'], {
|
|
21
33
|
cwd: themePath,
|
|
22
34
|
});
|
|
23
|
-
// See https://github.com/facebook/docusaurus/pull/3922
|
|
24
|
-
// ensure @theme/NavbarItem alias is created after @theme/NavbarItem/LocaleDropdown
|
|
25
|
-
const sortedThemeComponentFiles = lodash_1.sortBy(themeComponentFiles, (file) => file.endsWith('/index.js'));
|
|
26
35
|
const aliases = {};
|
|
27
|
-
|
|
36
|
+
themeComponentFiles.forEach((relativeSource) => {
|
|
28
37
|
const filePath = path_1.default.join(themePath, relativeSource);
|
|
29
|
-
const fileName = utils_1.fileToPath(relativeSource);
|
|
30
|
-
const aliasName = utils_1.posixPath(utils_1.normalizeUrl(['@theme', fileName]).replace(/\/$/, ''));
|
|
38
|
+
const fileName = (0, utils_1.fileToPath)(relativeSource);
|
|
39
|
+
const aliasName = (0, utils_1.posixPath)((0, utils_1.normalizeUrl)(['@theme', fileName]).replace(/\/$/, ''));
|
|
31
40
|
aliases[aliasName] = filePath;
|
|
32
41
|
if (addOriginalAlias) {
|
|
33
42
|
// For swizzled components to access the original.
|
|
34
|
-
const originalAliasName = utils_1.posixPath(utils_1.normalizeUrl(['@theme-original', fileName]).replace(/\/$/, ''));
|
|
43
|
+
const originalAliasName = (0, utils_1.posixPath)((0, utils_1.normalizeUrl)(['@theme-original', fileName]).replace(/\/$/, ''));
|
|
35
44
|
aliases[originalAliasName] = filePath;
|
|
36
45
|
}
|
|
37
46
|
});
|
|
38
|
-
return aliases;
|
|
47
|
+
return sortAliases(aliases);
|
|
39
48
|
}
|
|
40
49
|
exports.default = themeAlias;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import { ThemeAliases, LoadedPlugin } from '@docusaurus/types';
|
|
8
|
-
export declare function loadThemeAliases(themePaths: string[], userThemePaths
|
|
8
|
+
export declare function loadThemeAliases(themePaths: string[], userThemePaths: string[]): ThemeAliases;
|
|
9
9
|
export declare function loadPluginsThemeAliases({ siteDir, plugins, }: {
|
|
10
10
|
siteDir: string;
|
|
11
11
|
plugins: LoadedPlugin[];
|
|
@@ -8,40 +8,39 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.loadPluginsThemeAliases = exports.loadThemeAliases = void 0;
|
|
10
10
|
const tslib_1 = require("tslib");
|
|
11
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
12
|
-
const
|
|
13
|
-
const alias_1 = tslib_1.
|
|
11
|
+
const path_1 = (0, tslib_1.__importDefault)(require("path"));
|
|
12
|
+
const utils_1 = require("@docusaurus/utils");
|
|
13
|
+
const alias_1 = (0, tslib_1.__importStar)(require("./alias"));
|
|
14
14
|
const ThemeFallbackDir = path_1.default.resolve(__dirname, '../../client/theme-fallback');
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
if (aliasKey in aliases) {
|
|
18
|
-
const componentName = aliasKey.substring(aliasKey.indexOf('/') + 1);
|
|
19
|
-
// eslint-disable-next-line no-param-reassign
|
|
20
|
-
aliases[`@theme-init/${componentName}`] = aliases[aliasKey];
|
|
21
|
-
}
|
|
22
|
-
// eslint-disable-next-line no-param-reassign
|
|
23
|
-
aliases[aliasKey] = themeAliases[aliasKey];
|
|
24
|
-
});
|
|
25
|
-
return aliases;
|
|
26
|
-
}
|
|
27
|
-
function loadThemeAliases(themePaths, userThemePaths = []) {
|
|
28
|
-
let aliases = {}; // TODO refactor, inelegant side-effect
|
|
15
|
+
function loadThemeAliases(themePaths, userThemePaths) {
|
|
16
|
+
const aliases = {};
|
|
29
17
|
themePaths.forEach((themePath) => {
|
|
30
|
-
const themeAliases = alias_1.default(themePath, true);
|
|
31
|
-
|
|
18
|
+
const themeAliases = (0, alias_1.default)(themePath, true);
|
|
19
|
+
Object.keys(themeAliases).forEach((aliasKey) => {
|
|
20
|
+
// If this alias shadows a previous one, use @theme-init to preserve the initial one.
|
|
21
|
+
// @theme-init is only applied once: to the initial theme that provided this component
|
|
22
|
+
if (aliasKey in aliases) {
|
|
23
|
+
const componentName = aliasKey.substring(aliasKey.indexOf('/') + 1);
|
|
24
|
+
const initAlias = `@theme-init/${componentName}`;
|
|
25
|
+
if (!(initAlias in aliases)) {
|
|
26
|
+
aliases[initAlias] = aliases[aliasKey];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
aliases[aliasKey] = themeAliases[aliasKey];
|
|
30
|
+
});
|
|
32
31
|
});
|
|
33
32
|
userThemePaths.forEach((themePath) => {
|
|
34
|
-
const userThemeAliases = alias_1.default(themePath, false);
|
|
35
|
-
aliases
|
|
33
|
+
const userThemeAliases = (0, alias_1.default)(themePath, false);
|
|
34
|
+
Object.assign(aliases, userThemeAliases);
|
|
36
35
|
});
|
|
37
|
-
return aliases;
|
|
36
|
+
return (0, alias_1.sortAliases)(aliases);
|
|
38
37
|
}
|
|
39
38
|
exports.loadThemeAliases = loadThemeAliases;
|
|
40
39
|
function loadPluginsThemeAliases({ siteDir, plugins, }) {
|
|
41
40
|
const pluginThemes = plugins
|
|
42
41
|
.map((plugin) => (plugin.getThemePath ? plugin.getThemePath() : undefined))
|
|
43
42
|
.filter((x) => Boolean(x));
|
|
44
|
-
const userTheme = path_1.default.resolve(siteDir,
|
|
43
|
+
const userTheme = path_1.default.resolve(siteDir, utils_1.THEME_PATH);
|
|
45
44
|
return loadThemeAliases([ThemeFallbackDir, ...pluginThemes], [userTheme]);
|
|
46
45
|
}
|
|
47
46
|
exports.loadPluginsThemeAliases = loadPluginsThemeAliases;
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
1
7
|
import { TranslationFileContent, TranslationFile, TranslationMessage, InitializedPlugin } from '@docusaurus/types';
|
|
2
8
|
export declare type WriteTranslationsOptions = {
|
|
3
9
|
override?: boolean;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.applyDefaultCodeTranslations = exports.getPluginsDefaultCodeTranslationMessages = exports.localizePluginTranslationFile = exports.writePluginTranslations = exports.writeCodeTranslations = exports.readCodeTranslationFileContent = exports.getCodeTranslationsFilePath = exports.getTranslationsLocaleDirPath = exports.getTranslationsDirPath = exports.writeTranslationFileContent = exports.readTranslationFileContent = exports.ensureTranslationFileContent = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
2
|
/**
|
|
6
3
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
7
4
|
*
|
|
8
5
|
* This source code is licensed under the MIT license found in the
|
|
9
6
|
* LICENSE file in the root directory of this source tree.
|
|
10
7
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.applyDefaultCodeTranslations = exports.getPluginsDefaultCodeTranslationMessages = exports.localizePluginTranslationFile = exports.writePluginTranslations = exports.writeCodeTranslations = exports.readCodeTranslationFileContent = exports.getCodeTranslationsFilePath = exports.getTranslationsLocaleDirPath = exports.getTranslationsDirPath = exports.writeTranslationFileContent = exports.readTranslationFileContent = exports.ensureTranslationFileContent = void 0;
|
|
10
|
+
const tslib_1 = require("tslib");
|
|
11
|
+
const path_1 = (0, tslib_1.__importDefault)(require("path"));
|
|
12
|
+
const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
|
|
13
13
|
const lodash_1 = require("lodash");
|
|
14
14
|
const utils_1 = require("@docusaurus/utils");
|
|
15
15
|
const utils_validation_1 = require("@docusaurus/utils-validation");
|
|
16
|
-
const
|
|
16
|
+
const logger_1 = (0, tslib_1.__importDefault)(require("@docusaurus/logger"));
|
|
17
17
|
const TranslationFileContentSchema = utils_validation_1.Joi.object()
|
|
18
18
|
.pattern(utils_validation_1.Joi.string(), utils_validation_1.Joi.object({
|
|
19
19
|
message: utils_validation_1.Joi.string().allow('').required(),
|
|
@@ -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 = lodash_1.mapValues(newContent, (value) => {
|
|
47
|
+
const newContentTransformed = (0, lodash_1.mapValues)(newContent, (value) => {
|
|
48
48
|
var _a;
|
|
49
49
|
return ({
|
|
50
50
|
...value,
|
|
@@ -68,11 +68,10 @@ 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 = lodash_1.difference(Object.keys(existingContent !== null && existingContent !== void 0 ? existingContent : {}), Object.keys(newContent));
|
|
71
|
+
const unknownKeys = (0, lodash_1.difference)(Object.keys(existingContent !== null && existingContent !== void 0 ? existingContent : {}), Object.keys(newContent));
|
|
72
72
|
if (unknownKeys.length > 0) {
|
|
73
|
-
|
|
74
|
-
Maybe you should remove them?
|
|
75
|
-
- ${unknownKeys.join('\n- ')}`));
|
|
73
|
+
logger_1.default.warn `Some translation keys looks unknown to us in file path=${filePath}.
|
|
74
|
+
Maybe you should remove them? ${unknownKeys}`;
|
|
76
75
|
}
|
|
77
76
|
const mergedContent = mergeTranslationFileContent({
|
|
78
77
|
existingContent,
|
|
@@ -81,9 +80,7 @@ Maybe you should remove them?
|
|
|
81
80
|
});
|
|
82
81
|
// Avoid creating empty translation files
|
|
83
82
|
if (Object.keys(mergedContent).length > 0) {
|
|
84
|
-
|
|
85
|
-
.length.toString()
|
|
86
|
-
.padStart(3, ' ')} translations will be written at "${utils_1.toMessageRelativeFilePath(filePath)}".`);
|
|
83
|
+
logger_1.default.info `number=${Object.keys(mergedContent).length} translations will be written at path=${(0, utils_1.toMessageRelativeFilePath)(filePath)}.`;
|
|
87
84
|
await fs_extra_1.default.ensureDir(path_1.default.dirname(filePath));
|
|
88
85
|
await fs_extra_1.default.writeFile(filePath, JSON.stringify(mergedContent, null, 2));
|
|
89
86
|
}
|
|
@@ -124,7 +121,7 @@ function addTranslationFileExtension(translationFilePath) {
|
|
|
124
121
|
return `${translationFilePath}.json`;
|
|
125
122
|
}
|
|
126
123
|
function getPluginTranslationFilePath({ siteDir, plugin, locale, translationFilePath, }) {
|
|
127
|
-
const dirPath = utils_1.getPluginI18nPath({
|
|
124
|
+
const dirPath = (0, utils_1.getPluginI18nPath)({
|
|
128
125
|
siteDir,
|
|
129
126
|
locale,
|
|
130
127
|
pluginName: plugin.name,
|
|
@@ -172,25 +169,21 @@ async function localizePluginTranslationFile({ siteDir, plugin, locale, translat
|
|
|
172
169
|
exports.localizePluginTranslationFile = localizePluginTranslationFile;
|
|
173
170
|
async function getPluginsDefaultCodeTranslationMessages(plugins) {
|
|
174
171
|
const pluginsMessages = await Promise.all(plugins.map((plugin) => { var _a, _b; return (_b = (_a = plugin.getDefaultCodeTranslationMessages) === null || _a === void 0 ? void 0 : _a.call(plugin)) !== null && _b !== void 0 ? _b : {}; }));
|
|
175
|
-
return pluginsMessages.reduce((allMessages, pluginMessages) => {
|
|
176
|
-
return { ...allMessages, ...pluginMessages };
|
|
177
|
-
}, {});
|
|
172
|
+
return pluginsMessages.reduce((allMessages, pluginMessages) => ({ ...allMessages, ...pluginMessages }), {});
|
|
178
173
|
}
|
|
179
174
|
exports.getPluginsDefaultCodeTranslationMessages = getPluginsDefaultCodeTranslationMessages;
|
|
180
175
|
function applyDefaultCodeTranslations({ extractedCodeTranslations, defaultCodeMessages, }) {
|
|
181
|
-
const unusedDefaultCodeMessages = lodash_1.difference(Object.keys(defaultCodeMessages), Object.keys(extractedCodeTranslations));
|
|
176
|
+
const unusedDefaultCodeMessages = (0, lodash_1.difference)(Object.keys(defaultCodeMessages), Object.keys(extractedCodeTranslations));
|
|
182
177
|
if (unusedDefaultCodeMessages.length > 0) {
|
|
183
|
-
|
|
184
|
-
Please report this Docusaurus issue.
|
|
185
|
-
- ${unusedDefaultCodeMessages.join('\n- ')}
|
|
186
|
-
`));
|
|
178
|
+
logger_1.default.warn `Unused default message codes found.
|
|
179
|
+
Please report this Docusaurus issue. name=${unusedDefaultCodeMessages}`;
|
|
187
180
|
}
|
|
188
|
-
return lodash_1.mapValues(extractedCodeTranslations, (messageTranslation, messageId) => {
|
|
181
|
+
return (0, lodash_1.mapValues)(extractedCodeTranslations, (messageTranslation, messageId) => {
|
|
189
182
|
var _a;
|
|
190
|
-
return {
|
|
183
|
+
return ({
|
|
191
184
|
...messageTranslation,
|
|
192
185
|
message: (_a = defaultCodeMessages[messageId]) !== null && _a !== void 0 ? _a : messageTranslation.message,
|
|
193
|
-
};
|
|
186
|
+
});
|
|
194
187
|
});
|
|
195
188
|
}
|
|
196
189
|
exports.applyDefaultCodeTranslations = applyDefaultCodeTranslations;
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
1
7
|
import { TransformOptions } from '@babel/core';
|
|
2
8
|
import { InitializedPlugin, TranslationFileContent, TranslationMessage } from '@docusaurus/types';
|
|
3
9
|
export declare function globSourceCodeFilePaths(dirPaths: string[]): Promise<string[]>;
|
|
4
|
-
export declare function extractSiteSourceCodeTranslations(siteDir: string, plugins: InitializedPlugin[], babelOptions: TransformOptions): Promise<TranslationFileContent>;
|
|
10
|
+
export declare function extractSiteSourceCodeTranslations(siteDir: string, plugins: InitializedPlugin[], babelOptions: TransformOptions, extraSourceCodeFilePaths?: string[]): Promise<TranslationFileContent>;
|
|
5
11
|
declare type SourceCodeFileTranslations = {
|
|
6
12
|
sourceCodeFilePath: string;
|
|
7
13
|
translations: Record<string, TranslationMessage>;
|