@docusaurus/mdx-loader 0.0.0-6063 → 0.0.0-6065
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/loader.d.ts +6 -4
- package/lib/loader.d.ts.map +1 -1
- package/lib/loader.js +25 -13
- package/lib/loader.js.map +1 -1
- package/lib/utils.d.ts +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +1 -1
- package/package.json +6 -6
- package/src/loader.ts +38 -17
- package/src/utils.ts +2 -2
package/lib/loader.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ import type { MarkdownConfig } from '@docusaurus/types';
|
|
|
10
10
|
import type { LoaderContext } from 'webpack';
|
|
11
11
|
type Pluggable = any;
|
|
12
12
|
export type MDXPlugin = Pluggable;
|
|
13
|
+
export type LoadedMetadata = {
|
|
14
|
+
metadataPath: string;
|
|
15
|
+
metadataContent: unknown;
|
|
16
|
+
};
|
|
13
17
|
export type Options = Partial<MDXOptions> & {
|
|
14
18
|
markdownConfig: MarkdownConfig;
|
|
15
19
|
staticDirs: string[];
|
|
@@ -17,14 +21,12 @@ export type Options = Partial<MDXOptions> & {
|
|
|
17
21
|
isMDXPartial?: (filePath: string) => boolean;
|
|
18
22
|
isMDXPartialFrontMatterWarningDisabled?: boolean;
|
|
19
23
|
removeContentTitle?: boolean;
|
|
20
|
-
metadataPath?: string | ((filePath: string) => string);
|
|
24
|
+
metadataPath?: string | ((filePath: string) => string | LoadedMetadata);
|
|
21
25
|
createAssets?: (metadata: {
|
|
22
26
|
frontMatter: {
|
|
23
27
|
[key: string]: unknown;
|
|
24
28
|
};
|
|
25
|
-
metadata:
|
|
26
|
-
[key: string]: unknown;
|
|
27
|
-
};
|
|
29
|
+
metadata: unknown;
|
|
28
30
|
}) => {
|
|
29
31
|
[key: string]: unknown;
|
|
30
32
|
};
|
package/lib/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EAEX,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAK3C,KAAK,SAAS,GAAG,GAAG,CAAC;AAErB,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EAEX,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAK3C,KAAK,SAAS,GAAG,GAAG,CAAC;AAErB,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC;AAGlC,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG;IAC1C,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,sCAAsC,CAAC,EAAE,OAAO,CAAC;IACjD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAI7B,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,cAAc,CAAC,CAAC;IACxE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE;QACxB,WAAW,EAAE;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAC,CAAC;QACtC,QAAQ,EAAE,OAAO,CAAC;KACnB,KAAK;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IAC/B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAG1C,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAEF,wBAAsB,SAAS,CAC7B,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAgHf"}
|
package/lib/loader.js
CHANGED
|
@@ -53,27 +53,37 @@ ${JSON.stringify(frontMatter, null, 2)}`;
|
|
|
53
53
|
logger_1.default.warn(errorMessage);
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
-
function
|
|
56
|
+
async function loadMetadata() {
|
|
57
57
|
if (!isMDXPartial) {
|
|
58
58
|
// Read metadata for this MDX and export it.
|
|
59
59
|
if (options.metadataPath && typeof options.metadataPath === 'function') {
|
|
60
|
-
|
|
60
|
+
const metadata = options.metadataPath(filePath);
|
|
61
|
+
if (!metadata) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
if (typeof metadata === 'string') {
|
|
65
|
+
return {
|
|
66
|
+
metadataPath: metadata,
|
|
67
|
+
metadataContent: await (0, utils_2.readMetadataPath)(metadata),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (!metadata.metadataPath) {
|
|
71
|
+
throw new Error(`Metadata path missing for file ${filePath}`);
|
|
72
|
+
}
|
|
73
|
+
if (!metadata.metadataContent) {
|
|
74
|
+
throw new Error(`Metadata content missing for file ${filePath}`);
|
|
75
|
+
}
|
|
76
|
+
return metadata;
|
|
61
77
|
}
|
|
62
78
|
}
|
|
63
79
|
return undefined;
|
|
64
80
|
}
|
|
65
|
-
const
|
|
66
|
-
if (
|
|
67
|
-
this.addDependency(metadataPath);
|
|
81
|
+
const metadata = await loadMetadata();
|
|
82
|
+
if (metadata) {
|
|
83
|
+
this.addDependency(metadata.metadataPath);
|
|
68
84
|
}
|
|
69
|
-
const metadataJsonString = metadataPath
|
|
70
|
-
? await (0, utils_2.readMetadataPath)(metadataPath)
|
|
71
|
-
: undefined;
|
|
72
|
-
const metadata = metadataJsonString
|
|
73
|
-
? JSON.parse(metadataJsonString)
|
|
74
|
-
: undefined;
|
|
75
85
|
const assets = options.createAssets && metadata
|
|
76
|
-
? options.createAssets({ frontMatter, metadata })
|
|
86
|
+
? options.createAssets({ frontMatter, metadata: metadata.metadataContent })
|
|
77
87
|
: undefined;
|
|
78
88
|
const fileLoaderUtils = (0, utils_1.getFileLoaderUtils)(compilerName === 'server');
|
|
79
89
|
// TODO use remark plugins to insert extra exports instead of string concat?
|
|
@@ -81,7 +91,9 @@ ${JSON.stringify(frontMatter, null, 2)}`;
|
|
|
81
91
|
const exportsCode = `
|
|
82
92
|
export const frontMatter = ${(0, stringify_object_1.default)(frontMatter)};
|
|
83
93
|
export const contentTitle = ${(0, stringify_object_1.default)(contentTitle)};
|
|
84
|
-
${
|
|
94
|
+
${metadata
|
|
95
|
+
? `export const metadata = ${JSON.stringify(metadata.metadataContent)};`
|
|
96
|
+
: ''}
|
|
85
97
|
${assets
|
|
86
98
|
? `export const assets = ${(0, utils_2.createAssetsExportCode)({
|
|
87
99
|
assets,
|
package/lib/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
package/lib/utils.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ import type { Options } from './loader';
|
|
|
13
13
|
* starting with _). That's why it's important to provide the `isMDXPartial`
|
|
14
14
|
* function in config
|
|
15
15
|
*/
|
|
16
|
-
export declare function readMetadataPath(metadataPath: string): Promise<
|
|
16
|
+
export declare function readMetadataPath(metadataPath: string): Promise<unknown>;
|
|
17
17
|
/**
|
|
18
18
|
* Converts assets an object with Webpack require calls code.
|
|
19
19
|
* This is useful for mdx files to reference co-located assets using relative
|
package/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAa,KAAK,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAe,KAAK,qBAAqB,EAAC,MAAM,aAAa,CAAC;AAGrE,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AAEtC;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAa,KAAK,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAe,KAAK,qBAAqB,EAAC,MAAM,aAAa,CAAC;AAGrE,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AAEtC;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS7E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,kCAAkC,GACnC,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,kCAAkC,EAAE,MAAM,CAAC;CAC5C,GAAG,MAAM,CAuCT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,GAAG,MAAM,GAAG,SAAS,CAErB;AAED,wBAAsB,YAAY,CAAC,EACjC,QAAQ,EACR,WAAW,EACX,WAAW,EACX,OAAO,EACP,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,mBAAmB,CAAC;CACnC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA2CjC"}
|
package/lib/utils.js
CHANGED
|
@@ -25,7 +25,7 @@ const preprocessor_1 = tslib_1.__importDefault(require("./preprocessor"));
|
|
|
25
25
|
*/
|
|
26
26
|
async function readMetadataPath(metadataPath) {
|
|
27
27
|
try {
|
|
28
|
-
return await fs_extra_1.default.
|
|
28
|
+
return await fs_extra_1.default.readJSON(metadataPath, 'utf8');
|
|
29
29
|
}
|
|
30
30
|
catch (error) {
|
|
31
31
|
throw new Error(logger_1.default.interpolate `MDX loader can't read MDX metadata file path=${metadataPath}. Maybe the isMDXPartial option function was not provided?`, { cause: error });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@docusaurus/mdx-loader",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-6065",
|
|
4
4
|
"description": "Docusaurus Loader for MDX",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
},
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@docusaurus/logger": "0.0.0-
|
|
22
|
-
"@docusaurus/utils": "0.0.0-
|
|
23
|
-
"@docusaurus/utils-validation": "0.0.0-
|
|
21
|
+
"@docusaurus/logger": "0.0.0-6065",
|
|
22
|
+
"@docusaurus/utils": "0.0.0-6065",
|
|
23
|
+
"@docusaurus/utils-validation": "0.0.0-6065",
|
|
24
24
|
"@mdx-js/mdx": "^3.0.0",
|
|
25
25
|
"@slorber/remark-comment": "^1.0.0",
|
|
26
26
|
"escape-html": "^1.0.3",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"webpack": "^5.88.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@docusaurus/types": "0.0.0-
|
|
47
|
+
"@docusaurus/types": "0.0.0-6065",
|
|
48
48
|
"@types/escape-html": "^1.0.2",
|
|
49
49
|
"@types/mdast": "^4.0.2",
|
|
50
50
|
"@types/stringify-object": "^3.3.1",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"engines": {
|
|
65
65
|
"node": ">=18.0"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "6da713a524315a36515fc3e998ff1551bfa054d2"
|
|
68
68
|
}
|
package/src/loader.ts
CHANGED
|
@@ -35,6 +35,12 @@ type Pluggable = any; // TODO fix this asap
|
|
|
35
35
|
|
|
36
36
|
export type MDXPlugin = Pluggable;
|
|
37
37
|
|
|
38
|
+
// This represents the path to the mdx metadata bundle path + its loaded content
|
|
39
|
+
export type LoadedMetadata = {
|
|
40
|
+
metadataPath: string;
|
|
41
|
+
metadataContent: unknown;
|
|
42
|
+
};
|
|
43
|
+
|
|
38
44
|
export type Options = Partial<MDXOptions> & {
|
|
39
45
|
markdownConfig: MarkdownConfig;
|
|
40
46
|
staticDirs: string[];
|
|
@@ -42,10 +48,13 @@ export type Options = Partial<MDXOptions> & {
|
|
|
42
48
|
isMDXPartial?: (filePath: string) => boolean;
|
|
43
49
|
isMDXPartialFrontMatterWarningDisabled?: boolean;
|
|
44
50
|
removeContentTitle?: boolean;
|
|
45
|
-
|
|
51
|
+
|
|
52
|
+
// TODO Docusaurus v4: rename to just "metadata"?
|
|
53
|
+
// We kept retro-compatibility in v3 in case plugins/sites use mdx loader
|
|
54
|
+
metadataPath?: string | ((filePath: string) => string | LoadedMetadata);
|
|
46
55
|
createAssets?: (metadata: {
|
|
47
56
|
frontMatter: {[key: string]: unknown};
|
|
48
|
-
metadata:
|
|
57
|
+
metadata: unknown;
|
|
49
58
|
}) => {[key: string]: unknown};
|
|
50
59
|
resolveMarkdownLink?: ResolveMarkdownLink;
|
|
51
60
|
|
|
@@ -103,32 +112,40 @@ ${JSON.stringify(frontMatter, null, 2)}`;
|
|
|
103
112
|
}
|
|
104
113
|
}
|
|
105
114
|
|
|
106
|
-
function
|
|
115
|
+
async function loadMetadata(): Promise<LoadedMetadata | undefined> {
|
|
107
116
|
if (!isMDXPartial) {
|
|
108
117
|
// Read metadata for this MDX and export it.
|
|
109
118
|
if (options.metadataPath && typeof options.metadataPath === 'function') {
|
|
110
|
-
|
|
119
|
+
const metadata = options.metadataPath(filePath);
|
|
120
|
+
if (!metadata) {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
if (typeof metadata === 'string') {
|
|
124
|
+
return {
|
|
125
|
+
metadataPath: metadata,
|
|
126
|
+
metadataContent: await readMetadataPath(metadata),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (!metadata.metadataPath) {
|
|
130
|
+
throw new Error(`Metadata path missing for file ${filePath}`);
|
|
131
|
+
}
|
|
132
|
+
if (!metadata.metadataContent) {
|
|
133
|
+
throw new Error(`Metadata content missing for file ${filePath}`);
|
|
134
|
+
}
|
|
135
|
+
return metadata;
|
|
111
136
|
}
|
|
112
137
|
}
|
|
113
138
|
return undefined;
|
|
114
139
|
}
|
|
115
140
|
|
|
116
|
-
const
|
|
117
|
-
if (
|
|
118
|
-
this.addDependency(metadataPath);
|
|
141
|
+
const metadata = await loadMetadata();
|
|
142
|
+
if (metadata) {
|
|
143
|
+
this.addDependency(metadata.metadataPath);
|
|
119
144
|
}
|
|
120
145
|
|
|
121
|
-
const metadataJsonString = metadataPath
|
|
122
|
-
? await readMetadataPath(metadataPath)
|
|
123
|
-
: undefined;
|
|
124
|
-
|
|
125
|
-
const metadata = metadataJsonString
|
|
126
|
-
? (JSON.parse(metadataJsonString) as {[key: string]: unknown})
|
|
127
|
-
: undefined;
|
|
128
|
-
|
|
129
146
|
const assets =
|
|
130
147
|
options.createAssets && metadata
|
|
131
|
-
? options.createAssets({frontMatter, metadata})
|
|
148
|
+
? options.createAssets({frontMatter, metadata: metadata.metadataContent})
|
|
132
149
|
: undefined;
|
|
133
150
|
|
|
134
151
|
const fileLoaderUtils = getFileLoaderUtils(compilerName === 'server');
|
|
@@ -138,7 +155,11 @@ ${JSON.stringify(frontMatter, null, 2)}`;
|
|
|
138
155
|
const exportsCode = `
|
|
139
156
|
export const frontMatter = ${stringifyObject(frontMatter)};
|
|
140
157
|
export const contentTitle = ${stringifyObject(contentTitle)};
|
|
141
|
-
${
|
|
158
|
+
${
|
|
159
|
+
metadata
|
|
160
|
+
? `export const metadata = ${JSON.stringify(metadata.metadataContent)};`
|
|
161
|
+
: ''
|
|
162
|
+
}
|
|
142
163
|
${
|
|
143
164
|
assets
|
|
144
165
|
? `export const assets = ${createAssetsExportCode({
|
package/src/utils.ts
CHANGED
|
@@ -19,9 +19,9 @@ import type {Options} from './loader';
|
|
|
19
19
|
* starting with _). That's why it's important to provide the `isMDXPartial`
|
|
20
20
|
* function in config
|
|
21
21
|
*/
|
|
22
|
-
export async function readMetadataPath(metadataPath: string): Promise<
|
|
22
|
+
export async function readMetadataPath(metadataPath: string): Promise<unknown> {
|
|
23
23
|
try {
|
|
24
|
-
return await fs.
|
|
24
|
+
return await fs.readJSON(metadataPath, 'utf8');
|
|
25
25
|
} catch (error) {
|
|
26
26
|
throw new Error(
|
|
27
27
|
logger.interpolate`MDX loader can't read MDX metadata file path=${metadataPath}. Maybe the isMDXPartial option function was not provided?`,
|