@azerion/bunosaurus-mdx-loader 0.0.0-stage → 4.0.0
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/README.md +57 -2
- package/lib/createMDXLoader.d.ts +14 -0
- package/lib/createMDXLoader.d.ts.map +1 -0
- package/lib/createMDXLoader.js +52 -0
- package/lib/createMDXLoader.js.map +1 -0
- package/lib/format.d.ts +14 -0
- package/lib/format.d.ts.map +1 -0
- package/lib/format.js +41 -0
- package/lib/format.js.map +1 -0
- package/lib/frontMatter.d.ts +13 -0
- package/lib/frontMatter.d.ts.map +1 -0
- package/lib/frontMatter.js +23 -0
- package/lib/frontMatter.js.map +1 -0
- package/lib/index.d.ts +35 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +15 -0
- package/lib/index.js.map +1 -0
- package/lib/loader.d.ts +11 -0
- package/lib/loader.d.ts.map +1 -0
- package/lib/loader.js +170 -0
- package/lib/loader.js.map +1 -0
- package/lib/options.d.ts +35 -0
- package/lib/options.d.ts.map +1 -0
- package/lib/options.js +9 -0
- package/lib/options.js.map +1 -0
- package/lib/preprocessor.d.ts +18 -0
- package/lib/preprocessor.d.ts.map +1 -0
- package/lib/preprocessor.js +34 -0
- package/lib/preprocessor.js.map +1 -0
- package/lib/processor.d.ts +49 -0
- package/lib/processor.d.ts.map +1 -0
- package/lib/processor.js +209 -0
- package/lib/processor.js.map +1 -0
- package/lib/remark/admonitions/index.d.ts +11 -0
- package/lib/remark/admonitions/index.d.ts.map +1 -0
- package/lib/remark/admonitions/index.js +107 -0
- package/lib/remark/admonitions/index.js.map +1 -0
- package/lib/remark/contentTitle/index.d.ts +13 -0
- package/lib/remark/contentTitle/index.d.ts.map +1 -0
- package/lib/remark/contentTitle/index.js +62 -0
- package/lib/remark/contentTitle/index.js.map +1 -0
- package/lib/remark/details/index.d.ts +10 -0
- package/lib/remark/details/index.d.ts.map +1 -0
- package/lib/remark/details/index.js +22 -0
- package/lib/remark/details/index.js.map +1 -0
- package/lib/remark/head/index.d.ts +10 -0
- package/lib/remark/head/index.d.ts.map +1 -0
- package/lib/remark/head/index.js +22 -0
- package/lib/remark/head/index.js.map +1 -0
- package/lib/remark/headings/index.d.ts +14 -0
- package/lib/remark/headings/index.d.ts.map +1 -0
- package/lib/remark/headings/index.js +126 -0
- package/lib/remark/headings/index.js.map +1 -0
- package/lib/remark/mdx1Compat/codeCompatPlugin.d.ts +11 -0
- package/lib/remark/mdx1Compat/codeCompatPlugin.d.ts.map +1 -0
- package/lib/remark/mdx1Compat/codeCompatPlugin.js +30 -0
- package/lib/remark/mdx1Compat/codeCompatPlugin.js.map +1 -0
- package/lib/remark/mermaid/index.d.ts +10 -0
- package/lib/remark/mermaid/index.d.ts.map +1 -0
- package/lib/remark/mermaid/index.js +34 -0
- package/lib/remark/mermaid/index.js.map +1 -0
- package/lib/remark/resolveMarkdownLinks/index.d.ts +33 -0
- package/lib/remark/resolveMarkdownLinks/index.d.ts.map +1 -0
- package/lib/remark/resolveMarkdownLinks/index.js +87 -0
- package/lib/remark/resolveMarkdownLinks/index.js.map +1 -0
- package/lib/remark/toc/index.d.ts +14 -0
- package/lib/remark/toc/index.d.ts.map +1 -0
- package/lib/remark/toc/index.js +115 -0
- package/lib/remark/toc/index.js.map +1 -0
- package/lib/remark/toc/types.d.ts +22 -0
- package/lib/remark/toc/types.d.ts.map +1 -0
- package/lib/remark/toc/types.js +9 -0
- package/lib/remark/toc/types.js.map +1 -0
- package/lib/remark/toc/utils.d.ts +26 -0
- package/lib/remark/toc/utils.d.ts.map +1 -0
- package/lib/remark/toc/utils.js +184 -0
- package/lib/remark/toc/utils.js.map +1 -0
- package/lib/remark/transformImage/index.d.ts +17 -0
- package/lib/remark/transformImage/index.d.ts.map +1 -0
- package/lib/remark/transformImage/index.js +187 -0
- package/lib/remark/transformImage/index.js.map +1 -0
- package/lib/remark/transformLinks/index.d.ts +17 -0
- package/lib/remark/transformLinks/index.d.ts.map +1 -0
- package/lib/remark/transformLinks/index.js +205 -0
- package/lib/remark/transformLinks/index.js.map +1 -0
- package/lib/remark/unusedDirectives/index.d.ts +9 -0
- package/lib/remark/unusedDirectives/index.d.ts.map +1 -0
- package/lib/remark/unusedDirectives/index.js +125 -0
- package/lib/remark/unusedDirectives/index.js.map +1 -0
- package/lib/remark/utils/index.d.ts +18 -0
- package/lib/remark/utils/index.d.ts.map +1 -0
- package/lib/remark/utils/index.js +93 -0
- package/lib/remark/utils/index.js.map +1 -0
- package/lib/serializeJS.d.ts +17 -0
- package/lib/serializeJS.d.ts.map +1 -0
- package/lib/serializeJS.js +24 -0
- package/lib/serializeJS.js.map +1 -0
- package/lib/utils.d.ts +35 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +97 -0
- package/lib/utils.js.map +1 -0
- package/package.json +65 -4
- package/src/createMDXLoader.ts +65 -0
- package/src/format.ts +50 -0
- package/src/frontMatter.ts +31 -0
- package/src/index.ts +44 -0
- package/src/loader.ts +227 -0
- package/src/options.ts +37 -0
- package/src/preprocessor.ts +47 -0
- package/src/processor.ts +306 -0
- package/src/remark/admonitions/LICENSE +45 -0
- package/src/remark/admonitions/README.md +3 -0
- package/src/remark/admonitions/index.ts +138 -0
- package/src/remark/contentTitle/index.ts +76 -0
- package/src/remark/details/index.ts +23 -0
- package/src/remark/head/index.ts +23 -0
- package/src/remark/headings/index.ts +158 -0
- package/src/remark/mdx1Compat/codeCompatPlugin.ts +35 -0
- package/src/remark/mermaid/index.ts +35 -0
- package/src/remark/resolveMarkdownLinks/index.ts +137 -0
- package/src/remark/toc/index.ts +183 -0
- package/src/remark/toc/types.ts +29 -0
- package/src/remark/toc/utils.ts +243 -0
- package/src/remark/transformImage/index.ts +268 -0
- package/src/remark/transformLinks/index.ts +291 -0
- package/src/remark/unusedDirectives/index.ts +171 -0
- package/src/remark/utils/index.ts +99 -0
- package/src/serializeJS.ts +22 -0
- package/src/types.d.mts +40 -0
- package/src/utils.ts +134 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.getImportDeclarations = getImportDeclarations;
|
|
10
|
+
exports.isMarkdownImport = isMarkdownImport;
|
|
11
|
+
exports.findDefaultImportName = findDefaultImportName;
|
|
12
|
+
exports.addTocSliceImportIfNeeded = addTocSliceImportIfNeeded;
|
|
13
|
+
exports.isNamedExport = isNamedExport;
|
|
14
|
+
exports.createTOCExportNodeAST = createTOCExportNodeAST;
|
|
15
|
+
exports.toHeadingHTMLValue = toHeadingHTMLValue;
|
|
16
|
+
const tslib_1 = require("tslib");
|
|
17
|
+
const mdast_util_to_string_1 = require("mdast-util-to-string");
|
|
18
|
+
const estree_util_value_to_estree_1 = require("estree-util-value-to-estree");
|
|
19
|
+
const escape_html_1 = tslib_1.__importDefault(require("escape-html"));
|
|
20
|
+
function getImportDeclarations(program) {
|
|
21
|
+
return program.body.filter((item) => item.type === 'ImportDeclaration');
|
|
22
|
+
}
|
|
23
|
+
function isMarkdownImport(node) {
|
|
24
|
+
if (node.type !== 'ImportDeclaration') {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const importPath = node.source.value;
|
|
28
|
+
return typeof importPath === 'string' && /\.mdx?$/.test(importPath);
|
|
29
|
+
}
|
|
30
|
+
function findDefaultImportName(importDeclaration) {
|
|
31
|
+
return importDeclaration.specifiers.find((o) => o.type === 'ImportDefaultSpecifier')?.local.name;
|
|
32
|
+
}
|
|
33
|
+
function findNamedImportSpecifier(importDeclaration, localName) {
|
|
34
|
+
return importDeclaration?.specifiers.find((specifier) => specifier.type === 'ImportSpecifier' &&
|
|
35
|
+
specifier.local.name === localName);
|
|
36
|
+
}
|
|
37
|
+
// Before: import Partial from "partial"
|
|
38
|
+
// After: import Partial, {toc as __tocPartial} from "partial"
|
|
39
|
+
function addTocSliceImportIfNeeded({ importDeclaration, tocExportName, tocSliceImportName, }) {
|
|
40
|
+
// We only add the toc slice named import if it doesn't exist already
|
|
41
|
+
if (!findNamedImportSpecifier(importDeclaration, tocSliceImportName)) {
|
|
42
|
+
importDeclaration.specifiers.push({
|
|
43
|
+
type: 'ImportSpecifier',
|
|
44
|
+
imported: { type: 'Identifier', name: tocExportName },
|
|
45
|
+
local: { type: 'Identifier', name: tocSliceImportName },
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function isNamedExport(node, exportName) {
|
|
50
|
+
if (node.type !== 'mdxjsEsm') {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const program = node.data?.estree;
|
|
54
|
+
if (!program) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
if (program.body.length !== 1) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
const exportDeclaration = program.body[0];
|
|
61
|
+
if (exportDeclaration.type !== 'ExportNamedDeclaration') {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
const variableDeclaration = exportDeclaration.declaration;
|
|
65
|
+
if (variableDeclaration?.type !== 'VariableDeclaration') {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
const { id } = variableDeclaration.declarations[0];
|
|
69
|
+
if (id.type !== 'Identifier') {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return id.name === exportName;
|
|
73
|
+
}
|
|
74
|
+
function createTOCExportNodeAST({ tocExportName, tocItems, }) {
|
|
75
|
+
function createTOCSliceAST(tocSlice) {
|
|
76
|
+
return {
|
|
77
|
+
type: 'SpreadElement',
|
|
78
|
+
argument: { type: 'Identifier', name: tocSlice.importName },
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function createTOCHeadingAST({ heading }) {
|
|
82
|
+
const value = {
|
|
83
|
+
value: toHeadingHTMLValue(heading),
|
|
84
|
+
id: heading.data.id,
|
|
85
|
+
level: heading.depth,
|
|
86
|
+
};
|
|
87
|
+
return (0, estree_util_value_to_estree_1.valueToEstree)(value);
|
|
88
|
+
}
|
|
89
|
+
function createTOCItemAST(tocItem) {
|
|
90
|
+
switch (tocItem.type) {
|
|
91
|
+
case 'slice':
|
|
92
|
+
return createTOCSliceAST(tocItem);
|
|
93
|
+
case 'heading':
|
|
94
|
+
return createTOCHeadingAST(tocItem);
|
|
95
|
+
default: {
|
|
96
|
+
throw new Error(`unexpected toc item type`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
type: 'mdxjsEsm',
|
|
102
|
+
value: '', // See https://github.com/facebook/docusaurus/pull/9684#discussion_r1457595181
|
|
103
|
+
data: {
|
|
104
|
+
estree: {
|
|
105
|
+
type: 'Program',
|
|
106
|
+
body: [
|
|
107
|
+
{
|
|
108
|
+
type: 'ExportNamedDeclaration',
|
|
109
|
+
attributes: [],
|
|
110
|
+
declaration: {
|
|
111
|
+
type: 'VariableDeclaration',
|
|
112
|
+
declarations: [
|
|
113
|
+
{
|
|
114
|
+
type: 'VariableDeclarator',
|
|
115
|
+
id: {
|
|
116
|
+
type: 'Identifier',
|
|
117
|
+
name: tocExportName,
|
|
118
|
+
},
|
|
119
|
+
init: {
|
|
120
|
+
type: 'ArrayExpression',
|
|
121
|
+
elements: tocItems.map(createTOCItemAST),
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
kind: 'const',
|
|
126
|
+
},
|
|
127
|
+
specifiers: [],
|
|
128
|
+
source: null,
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
sourceType: 'module',
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function stringifyChildren(node) {
|
|
137
|
+
return node.children
|
|
138
|
+
.map(toHeadingHTMLValue)
|
|
139
|
+
.join('')
|
|
140
|
+
.trim();
|
|
141
|
+
}
|
|
142
|
+
// TODO This is really a workaround, and not super reliable
|
|
143
|
+
// For now we only support serializing tagName, className and content
|
|
144
|
+
// Can we implement the TOC with real JSX nodes instead of html strings later?
|
|
145
|
+
function mdxJsxTextElementToHtml(element) {
|
|
146
|
+
const tag = element.name;
|
|
147
|
+
// See https://github.com/facebook/docusaurus/issues/11003#issuecomment-2733925363
|
|
148
|
+
if (tag === 'img') {
|
|
149
|
+
return '';
|
|
150
|
+
}
|
|
151
|
+
const attributes = element.attributes.filter((child) => child.type === 'mdxJsxAttribute');
|
|
152
|
+
const classAttribute = attributes.find((attr) => attr.name === 'className') ??
|
|
153
|
+
attributes.find((attr) => attr.name === 'class');
|
|
154
|
+
const classAttributeString = classAttribute
|
|
155
|
+
? `class="${(0, escape_html_1.default)(String(classAttribute.value))}"`
|
|
156
|
+
: ``;
|
|
157
|
+
const allAttributes = classAttributeString ? ` ${classAttributeString}` : '';
|
|
158
|
+
const content = stringifyChildren(element);
|
|
159
|
+
return `<${tag}${allAttributes}>${content}</${tag}>`;
|
|
160
|
+
}
|
|
161
|
+
function toHeadingHTMLValue(node) {
|
|
162
|
+
switch (node.type) {
|
|
163
|
+
case 'mdxJsxTextElement': {
|
|
164
|
+
return mdxJsxTextElementToHtml(node);
|
|
165
|
+
}
|
|
166
|
+
case 'text':
|
|
167
|
+
return (0, escape_html_1.default)(node.value);
|
|
168
|
+
case 'heading':
|
|
169
|
+
return stringifyChildren(node);
|
|
170
|
+
case 'inlineCode':
|
|
171
|
+
return `<code>${(0, escape_html_1.default)(node.value)}</code>`;
|
|
172
|
+
case 'emphasis':
|
|
173
|
+
return `<em>${stringifyChildren(node)}</em>`;
|
|
174
|
+
case 'strong':
|
|
175
|
+
return `<strong>${stringifyChildren(node)}</strong>`;
|
|
176
|
+
case 'delete':
|
|
177
|
+
return `<del>${stringifyChildren(node)}</del>`;
|
|
178
|
+
case 'link':
|
|
179
|
+
return stringifyChildren(node);
|
|
180
|
+
default:
|
|
181
|
+
return (0, mdast_util_to_string_1.toString)(node);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/remark/toc/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
*/
|
|
7
|
+
import type { Plugin } from 'unified';
|
|
8
|
+
import type { Root } from 'mdast';
|
|
9
|
+
import type { MarkdownConfig } from '@docusaurus/types';
|
|
10
|
+
export type PluginOptions = {
|
|
11
|
+
staticDirs: string[];
|
|
12
|
+
siteDir: string;
|
|
13
|
+
onBrokenMarkdownImages: MarkdownConfig['hooks']['onBrokenMarkdownImages'];
|
|
14
|
+
};
|
|
15
|
+
declare const plugin: Plugin<PluginOptions[], Root>;
|
|
16
|
+
export default plugin;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/remark/transformImage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,OAAO,KAAK,EAAC,MAAM,EAAc,MAAM,SAAS,CAAC;AAEjD,OAAO,KAAK,EAAQ,IAAI,EAAC,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,wBAAwB,CAAC,CAAC;CAC3E,CAAC;AAwMF,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,CA0BzC,CAAC;eAEa,MAAM"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const tslib_1 = require("tslib");
|
|
10
|
+
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
11
|
+
const unist_util_visit_1 = require("unist-util-visit");
|
|
12
|
+
const utils_1 = require("@docusaurus/utils");
|
|
13
|
+
const fromFile_1 = require("image-size/fromFile");
|
|
14
|
+
const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
|
|
15
|
+
const fs_1 = require("@docusaurus/fs");
|
|
16
|
+
const utils_2 = require("../utils");
|
|
17
|
+
function asFunction(onBrokenMarkdownImages) {
|
|
18
|
+
if (typeof onBrokenMarkdownImages === 'string') {
|
|
19
|
+
const extraHelp = onBrokenMarkdownImages === 'throw'
|
|
20
|
+
? logger_1.default.interpolate `\nTo ignore this error, use the code=${'siteConfig.markdown.hooks.onBrokenMarkdownImages'} option, or apply the code=${'pathname://'} protocol to the broken image URLs.`
|
|
21
|
+
: '';
|
|
22
|
+
return ({ sourceFilePath, url: imageUrl, node }) => {
|
|
23
|
+
const relativePath = (0, utils_1.toMessageRelativeFilePath)(sourceFilePath);
|
|
24
|
+
if (imageUrl) {
|
|
25
|
+
logger_1.default.report(onBrokenMarkdownImages) `Markdown image with URL code=${imageUrl} in source file path=${relativePath}${(0, utils_2.formatNodePositionExtraMessage)(node)} couldn't be resolved to an existing local image file.${extraHelp}`;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
logger_1.default.report(onBrokenMarkdownImages) `Markdown image with empty URL found in source file path=${relativePath}${(0, utils_2.formatNodePositionExtraMessage)(node)}.${extraHelp}`;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return (params) => onBrokenMarkdownImages({
|
|
34
|
+
...params,
|
|
35
|
+
sourceFilePath: (0, utils_1.toMessageRelativeFilePath)(params.sourceFilePath),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function toImageRequireNode([node], imagePath, context) {
|
|
40
|
+
// MdxJsxTextElement => see https://github.com/facebook/docusaurus/pull/8288#discussion_r1125871405
|
|
41
|
+
const jsxNode = node;
|
|
42
|
+
const attributes = [];
|
|
43
|
+
let relativeImagePath = (0, utils_1.posixPath)(node_path_1.default.relative(node_path_1.default.dirname(context.filePath), imagePath));
|
|
44
|
+
relativeImagePath = `./${relativeImagePath}`;
|
|
45
|
+
const parsedUrl = (0, utils_1.parseURLOrPath)(node.url);
|
|
46
|
+
const hash = parsedUrl.hash ?? '';
|
|
47
|
+
const search = parsedUrl.search ?? '';
|
|
48
|
+
const requireString = `${context.inlineMarkdownImageFileLoader}${(0, utils_1.escapePath)(relativeImagePath) + search}`;
|
|
49
|
+
if (node.alt) {
|
|
50
|
+
attributes.push({
|
|
51
|
+
type: 'mdxJsxAttribute',
|
|
52
|
+
name: 'alt',
|
|
53
|
+
value: node.alt,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
attributes.push({
|
|
57
|
+
type: 'mdxJsxAttribute',
|
|
58
|
+
name: 'src',
|
|
59
|
+
value: (0, utils_2.assetRequireAttributeValue)(requireString, hash),
|
|
60
|
+
});
|
|
61
|
+
if (node.title) {
|
|
62
|
+
attributes.push({
|
|
63
|
+
type: 'mdxJsxAttribute',
|
|
64
|
+
name: 'title',
|
|
65
|
+
value: node.title,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const size = (await (0, fromFile_1.imageSizeFromFile)(imagePath));
|
|
70
|
+
if (size.width) {
|
|
71
|
+
attributes.push({
|
|
72
|
+
type: 'mdxJsxAttribute',
|
|
73
|
+
name: 'width',
|
|
74
|
+
value: String(size.width),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (size.height) {
|
|
78
|
+
attributes.push({
|
|
79
|
+
type: 'mdxJsxAttribute',
|
|
80
|
+
name: 'height',
|
|
81
|
+
value: String(size.height),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.error(err);
|
|
87
|
+
// Workaround for https://github.com/yarnpkg/berry/pull/3889#issuecomment-1034469784
|
|
88
|
+
// TODO remove this check once fixed in Yarn PnP
|
|
89
|
+
if (!process.versions.pnp) {
|
|
90
|
+
logger_1.default.warn `The image at path=${imagePath} can't be read correctly. Please ensure it's a valid image.
|
|
91
|
+
${err.message}`;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
(0, utils_2.transformNode)(jsxNode, {
|
|
95
|
+
type: 'mdxJsxTextElement',
|
|
96
|
+
name: 'img',
|
|
97
|
+
attributes,
|
|
98
|
+
children: [],
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
async function getLocalImageAbsolutePath(originalImagePath, { siteDir, filePath, staticDirs }) {
|
|
102
|
+
if (originalImagePath.startsWith('@site/')) {
|
|
103
|
+
const imageFilePath = node_path_1.default.join(siteDir, originalImagePath.replace('@site/', ''));
|
|
104
|
+
if (!(await (0, fs_1.pathExists)(imageFilePath))) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
return imageFilePath;
|
|
108
|
+
}
|
|
109
|
+
else if (node_path_1.default.isAbsolute(originalImagePath)) {
|
|
110
|
+
// Absolute paths are expected to exist in the static folder.
|
|
111
|
+
const possiblePaths = staticDirs.map((dir) => node_path_1.default.join(dir, originalImagePath));
|
|
112
|
+
const imageFilePath = await (0, utils_1.findAsyncSequential)(possiblePaths, fs_1.pathExists);
|
|
113
|
+
if (!imageFilePath) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return imageFilePath;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// relative paths are resolved against the source file's folder
|
|
120
|
+
const imageFilePath = node_path_1.default.join(node_path_1.default.dirname(filePath), originalImagePath);
|
|
121
|
+
if (!(await (0, fs_1.pathExists)(imageFilePath))) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
return imageFilePath;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function processImageNode(target, context) {
|
|
128
|
+
const [node] = target;
|
|
129
|
+
if (!node.url) {
|
|
130
|
+
node.url =
|
|
131
|
+
context.onBrokenMarkdownImages({
|
|
132
|
+
url: node.url,
|
|
133
|
+
sourceFilePath: context.filePath,
|
|
134
|
+
node,
|
|
135
|
+
}) ?? node.url;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const localUrlPath = (0, utils_1.parseLocalURLPath)(node.url);
|
|
139
|
+
if (!localUrlPath) {
|
|
140
|
+
// pathname:// is an escape hatch, in case the user does not want images to
|
|
141
|
+
// be converted to require calls going through webpack loader
|
|
142
|
+
if ((0, utils_1.parseURLOrPath)(node.url).protocol === 'pathname:') {
|
|
143
|
+
node.url = node.url.replace('pathname://', '');
|
|
144
|
+
}
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
// We decode it first because Node Url.pathname is always encoded
|
|
148
|
+
// while the image file-system path are not.
|
|
149
|
+
// See https://github.com/facebook/docusaurus/discussions/10720
|
|
150
|
+
const decodedPathname = decodeURIComponent(localUrlPath.pathname);
|
|
151
|
+
// We try to convert image urls without protocol to images with require calls
|
|
152
|
+
// going through webpack ensures that image assets exist at build time
|
|
153
|
+
const localImagePath = await getLocalImageAbsolutePath(decodedPathname, context);
|
|
154
|
+
if (localImagePath === null) {
|
|
155
|
+
node.url =
|
|
156
|
+
context.onBrokenMarkdownImages({
|
|
157
|
+
url: node.url,
|
|
158
|
+
sourceFilePath: context.filePath,
|
|
159
|
+
node,
|
|
160
|
+
}) ?? node.url;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
await toImageRequireNode(target, localImagePath, context);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const plugin = function plugin(options) {
|
|
167
|
+
const onBrokenMarkdownImages = asFunction(options.onBrokenMarkdownImages);
|
|
168
|
+
return async (root, vfile) => {
|
|
169
|
+
const fileLoaderUtils = (0, utils_1.getFileLoaderUtils)(vfile.data.compilerName === 'server');
|
|
170
|
+
const context = {
|
|
171
|
+
...options,
|
|
172
|
+
filePath: vfile.path,
|
|
173
|
+
inlineMarkdownImageFileLoader: fileLoaderUtils.loaders.inlineMarkdownImageFileLoader,
|
|
174
|
+
onBrokenMarkdownImages,
|
|
175
|
+
};
|
|
176
|
+
const promises = [];
|
|
177
|
+
(0, unist_util_visit_1.visit)(root, 'image', (node, index, parent) => {
|
|
178
|
+
if (!parent || index === undefined) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
promises.push(processImageNode([node, index, parent], context));
|
|
182
|
+
});
|
|
183
|
+
await Promise.all(promises);
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
exports.default = plugin;
|
|
187
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/transformImage/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
*/
|
|
7
|
+
import type { Plugin } from 'unified';
|
|
8
|
+
import type { Root } from 'mdast';
|
|
9
|
+
import type { MarkdownConfig } from '@docusaurus/types';
|
|
10
|
+
export type PluginOptions = {
|
|
11
|
+
staticDirs: string[];
|
|
12
|
+
siteDir: string;
|
|
13
|
+
onBrokenMarkdownLinks: MarkdownConfig['hooks']['onBrokenMarkdownLinks'];
|
|
14
|
+
};
|
|
15
|
+
declare const plugin: Plugin<PluginOptions[], Root>;
|
|
16
|
+
export default plugin;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/remark/transformLinks/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH,OAAO,KAAK,EAAC,MAAM,EAAc,MAAM,SAAS,CAAC;AAGjD,OAAO,KAAK,EAAO,IAAI,EAAC,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAE3B,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC;CACzE,CAAC;AA+NF,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,CA2BzC,CAAC;eAEa,MAAM"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const tslib_1 = require("tslib");
|
|
10
|
+
const node_path_1 = tslib_1.__importDefault(require("node:path"));
|
|
11
|
+
const unist_util_visit_1 = require("unist-util-visit");
|
|
12
|
+
const utils_1 = require("@docusaurus/utils");
|
|
13
|
+
const logger_1 = tslib_1.__importDefault(require("@docusaurus/logger"));
|
|
14
|
+
const fs_1 = require("@docusaurus/fs");
|
|
15
|
+
const utils_2 = require("../utils");
|
|
16
|
+
function asFunction(onBrokenMarkdownLinks) {
|
|
17
|
+
if (typeof onBrokenMarkdownLinks === 'string') {
|
|
18
|
+
const extraHelp = onBrokenMarkdownLinks === 'throw'
|
|
19
|
+
? logger_1.default.interpolate `\nTo ignore this error, use the code=${'siteConfig.markdown.hooks.onBrokenMarkdownLinks'} option, or apply the code=${'pathname://'} protocol to the broken link URLs.`
|
|
20
|
+
: '';
|
|
21
|
+
return ({ sourceFilePath, url: linkUrl, node }) => {
|
|
22
|
+
const relativePath = (0, utils_1.toMessageRelativeFilePath)(sourceFilePath);
|
|
23
|
+
if (linkUrl) {
|
|
24
|
+
logger_1.default.report(onBrokenMarkdownLinks) `Markdown link with URL code=${linkUrl} in source file path=${relativePath}${(0, utils_2.formatNodePositionExtraMessage)(node)} couldn't be resolved.
|
|
25
|
+
Make sure it references a local Markdown file that exists within the current plugin.${extraHelp}`;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
logger_1.default.report(onBrokenMarkdownLinks) `Markdown link with empty URL found in source file path=${relativePath}${(0, utils_2.formatNodePositionExtraMessage)(node)}.${extraHelp}`;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return (params) => onBrokenMarkdownLinks({
|
|
34
|
+
...params,
|
|
35
|
+
sourceFilePath: (0, utils_1.toMessageRelativeFilePath)(params.sourceFilePath),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Transforms the link node to a JSX `<a>` element with a `require()` call.
|
|
41
|
+
*/
|
|
42
|
+
function toAssetRequireNode([node], assetPath, context) {
|
|
43
|
+
// MdxJsxTextElement => see https://github.com/facebook/docusaurus/pull/8288#discussion_r1125871405
|
|
44
|
+
const jsxNode = node;
|
|
45
|
+
const attributes = [];
|
|
46
|
+
// require("assets/file.pdf") means requiring from a package called assets
|
|
47
|
+
const relativeAssetPath = `./${(0, utils_1.posixPath)(node_path_1.default.relative(node_path_1.default.dirname(context.filePath), assetPath))}`;
|
|
48
|
+
const parsedUrl = (0, utils_1.parseURLOrPath)(node.url);
|
|
49
|
+
const hash = parsedUrl.hash ?? '';
|
|
50
|
+
const search = parsedUrl.search ?? '';
|
|
51
|
+
const requireString = `${
|
|
52
|
+
// A hack to stop Webpack from using its built-in loader to parse JSON
|
|
53
|
+
node_path_1.default.extname(relativeAssetPath) === '.json'
|
|
54
|
+
? `${relativeAssetPath.replace('.json', '.raw')}!=`
|
|
55
|
+
: ''}${context.inlineMarkdownLinkFileLoader}${(0, utils_1.escapePath)(relativeAssetPath) + search}`;
|
|
56
|
+
attributes.push({
|
|
57
|
+
type: 'mdxJsxAttribute',
|
|
58
|
+
name: 'target',
|
|
59
|
+
value: '_blank',
|
|
60
|
+
});
|
|
61
|
+
// Assets are not routes, and are required by Webpack already
|
|
62
|
+
// They should not trigger the broken link checker
|
|
63
|
+
attributes.push({
|
|
64
|
+
type: 'mdxJsxAttribute',
|
|
65
|
+
name: 'data-noBrokenLinkCheck',
|
|
66
|
+
value: {
|
|
67
|
+
type: 'mdxJsxAttributeValueExpression',
|
|
68
|
+
value: 'true',
|
|
69
|
+
data: {
|
|
70
|
+
estree: {
|
|
71
|
+
type: 'Program',
|
|
72
|
+
body: [
|
|
73
|
+
{
|
|
74
|
+
type: 'ExpressionStatement',
|
|
75
|
+
expression: {
|
|
76
|
+
type: 'Literal',
|
|
77
|
+
value: true,
|
|
78
|
+
raw: 'true',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
sourceType: 'module',
|
|
83
|
+
comments: [],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
attributes.push({
|
|
89
|
+
type: 'mdxJsxAttribute',
|
|
90
|
+
name: 'href',
|
|
91
|
+
value: (0, utils_2.assetRequireAttributeValue)(requireString, hash),
|
|
92
|
+
});
|
|
93
|
+
if (node.title) {
|
|
94
|
+
attributes.push({
|
|
95
|
+
type: 'mdxJsxAttribute',
|
|
96
|
+
name: 'title',
|
|
97
|
+
value: node.title,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const { children } = node;
|
|
101
|
+
(0, utils_2.transformNode)(jsxNode, {
|
|
102
|
+
type: 'mdxJsxTextElement',
|
|
103
|
+
name: 'a',
|
|
104
|
+
attributes,
|
|
105
|
+
children,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Checks if the given file path exists and is a file.
|
|
110
|
+
* Returns true if it exists, false otherwise.
|
|
111
|
+
*/
|
|
112
|
+
async function isExistingFile(filePath) {
|
|
113
|
+
try {
|
|
114
|
+
return (await fs_1.fs.stat(filePath)).isFile();
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function getLocalFileAbsolutePath(assetPath, { siteDir, filePath, staticDirs }) {
|
|
121
|
+
if (assetPath.startsWith('@site/')) {
|
|
122
|
+
const assetFilePath = node_path_1.default.join(siteDir, assetPath.replace('@site/', ''));
|
|
123
|
+
if (await isExistingFile(assetFilePath)) {
|
|
124
|
+
return assetFilePath;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else if (node_path_1.default.isAbsolute(assetPath)) {
|
|
128
|
+
const assetFilePath = await (0, utils_1.findAsyncSequential)(staticDirs.map((dir) => node_path_1.default.join(dir, assetPath)), isExistingFile);
|
|
129
|
+
if (assetFilePath) {
|
|
130
|
+
return assetFilePath;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
const assetFilePath = node_path_1.default.join(node_path_1.default.dirname(filePath), assetPath);
|
|
135
|
+
if (await isExistingFile(assetFilePath)) {
|
|
136
|
+
return assetFilePath;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
async function processLinkNode(target, context) {
|
|
142
|
+
const [node] = target;
|
|
143
|
+
if (!node.url) {
|
|
144
|
+
node.url =
|
|
145
|
+
context.onBrokenMarkdownLinks({
|
|
146
|
+
url: node.url,
|
|
147
|
+
sourceFilePath: context.filePath,
|
|
148
|
+
node,
|
|
149
|
+
}) ?? node.url;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const localUrlPath = (0, utils_1.parseLocalURLPath)(node.url);
|
|
153
|
+
if (!localUrlPath) {
|
|
154
|
+
// Don't process pathname:// here, it's used by the <Link> component
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const hasSiteAlias = localUrlPath.pathname.startsWith('@site/');
|
|
158
|
+
const hasAssetLikeExtension = node_path_1.default.extname(localUrlPath.pathname) &&
|
|
159
|
+
!localUrlPath.pathname.match(/\.(?:mdx?|html)(?:#|$)/);
|
|
160
|
+
if (!hasSiteAlias && !hasAssetLikeExtension) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const localFilePath = await getLocalFileAbsolutePath(decodeURIComponent(localUrlPath.pathname), context);
|
|
164
|
+
if (localFilePath) {
|
|
165
|
+
toAssetRequireNode(target, localFilePath, context);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// The @site alias is the only way to believe that the user wants an asset.
|
|
169
|
+
if (hasSiteAlias) {
|
|
170
|
+
node.url =
|
|
171
|
+
context.onBrokenMarkdownLinks({
|
|
172
|
+
url: node.url,
|
|
173
|
+
sourceFilePath: context.filePath,
|
|
174
|
+
node,
|
|
175
|
+
}) ?? node.url;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
// Even if the url has a dot, and it looks like a file extension
|
|
179
|
+
// it can be risky to throw and fail fast by default
|
|
180
|
+
// It's perfectly valid for a route path segment to look like a filename
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const plugin = function plugin(options) {
|
|
185
|
+
const onBrokenMarkdownLinks = asFunction(options.onBrokenMarkdownLinks);
|
|
186
|
+
return async (root, vfile) => {
|
|
187
|
+
const fileLoaderUtils = (0, utils_1.getFileLoaderUtils)(vfile.data.compilerName === 'server');
|
|
188
|
+
const context = {
|
|
189
|
+
...options,
|
|
190
|
+
filePath: vfile.path,
|
|
191
|
+
inlineMarkdownLinkFileLoader: fileLoaderUtils.loaders.inlineMarkdownLinkFileLoader,
|
|
192
|
+
onBrokenMarkdownLinks,
|
|
193
|
+
};
|
|
194
|
+
const promises = [];
|
|
195
|
+
(0, unist_util_visit_1.visit)(root, 'link', (node, index, parent) => {
|
|
196
|
+
if (!parent || index === undefined) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
promises.push(processLinkNode([node, index, parent], context));
|
|
200
|
+
});
|
|
201
|
+
await Promise.all(promises);
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
exports.default = plugin;
|
|
205
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/transformLinks/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Root } from 'mdast';
|
|
2
|
+
import type { Plugin } from 'unified';
|
|
3
|
+
import type { MarkdownConfig } from '@docusaurus/types';
|
|
4
|
+
export type PluginOptions = {
|
|
5
|
+
onUnusedMarkdownDirectives: MarkdownConfig['hooks']['onUnusedMarkdownDirectives'];
|
|
6
|
+
};
|
|
7
|
+
declare const plugin: Plugin<PluginOptions[], Root>;
|
|
8
|
+
export default plugin;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|