@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.
Files changed (130) hide show
  1. package/README.md +57 -2
  2. package/lib/createMDXLoader.d.ts +14 -0
  3. package/lib/createMDXLoader.d.ts.map +1 -0
  4. package/lib/createMDXLoader.js +52 -0
  5. package/lib/createMDXLoader.js.map +1 -0
  6. package/lib/format.d.ts +14 -0
  7. package/lib/format.d.ts.map +1 -0
  8. package/lib/format.js +41 -0
  9. package/lib/format.js.map +1 -0
  10. package/lib/frontMatter.d.ts +13 -0
  11. package/lib/frontMatter.d.ts.map +1 -0
  12. package/lib/frontMatter.js +23 -0
  13. package/lib/frontMatter.js.map +1 -0
  14. package/lib/index.d.ts +35 -0
  15. package/lib/index.d.ts.map +1 -0
  16. package/lib/index.js +15 -0
  17. package/lib/index.js.map +1 -0
  18. package/lib/loader.d.ts +11 -0
  19. package/lib/loader.d.ts.map +1 -0
  20. package/lib/loader.js +170 -0
  21. package/lib/loader.js.map +1 -0
  22. package/lib/options.d.ts +35 -0
  23. package/lib/options.d.ts.map +1 -0
  24. package/lib/options.js +9 -0
  25. package/lib/options.js.map +1 -0
  26. package/lib/preprocessor.d.ts +18 -0
  27. package/lib/preprocessor.d.ts.map +1 -0
  28. package/lib/preprocessor.js +34 -0
  29. package/lib/preprocessor.js.map +1 -0
  30. package/lib/processor.d.ts +49 -0
  31. package/lib/processor.d.ts.map +1 -0
  32. package/lib/processor.js +209 -0
  33. package/lib/processor.js.map +1 -0
  34. package/lib/remark/admonitions/index.d.ts +11 -0
  35. package/lib/remark/admonitions/index.d.ts.map +1 -0
  36. package/lib/remark/admonitions/index.js +107 -0
  37. package/lib/remark/admonitions/index.js.map +1 -0
  38. package/lib/remark/contentTitle/index.d.ts +13 -0
  39. package/lib/remark/contentTitle/index.d.ts.map +1 -0
  40. package/lib/remark/contentTitle/index.js +62 -0
  41. package/lib/remark/contentTitle/index.js.map +1 -0
  42. package/lib/remark/details/index.d.ts +10 -0
  43. package/lib/remark/details/index.d.ts.map +1 -0
  44. package/lib/remark/details/index.js +22 -0
  45. package/lib/remark/details/index.js.map +1 -0
  46. package/lib/remark/head/index.d.ts +10 -0
  47. package/lib/remark/head/index.d.ts.map +1 -0
  48. package/lib/remark/head/index.js +22 -0
  49. package/lib/remark/head/index.js.map +1 -0
  50. package/lib/remark/headings/index.d.ts +14 -0
  51. package/lib/remark/headings/index.d.ts.map +1 -0
  52. package/lib/remark/headings/index.js +126 -0
  53. package/lib/remark/headings/index.js.map +1 -0
  54. package/lib/remark/mdx1Compat/codeCompatPlugin.d.ts +11 -0
  55. package/lib/remark/mdx1Compat/codeCompatPlugin.d.ts.map +1 -0
  56. package/lib/remark/mdx1Compat/codeCompatPlugin.js +30 -0
  57. package/lib/remark/mdx1Compat/codeCompatPlugin.js.map +1 -0
  58. package/lib/remark/mermaid/index.d.ts +10 -0
  59. package/lib/remark/mermaid/index.d.ts.map +1 -0
  60. package/lib/remark/mermaid/index.js +34 -0
  61. package/lib/remark/mermaid/index.js.map +1 -0
  62. package/lib/remark/resolveMarkdownLinks/index.d.ts +33 -0
  63. package/lib/remark/resolveMarkdownLinks/index.d.ts.map +1 -0
  64. package/lib/remark/resolveMarkdownLinks/index.js +87 -0
  65. package/lib/remark/resolveMarkdownLinks/index.js.map +1 -0
  66. package/lib/remark/toc/index.d.ts +14 -0
  67. package/lib/remark/toc/index.d.ts.map +1 -0
  68. package/lib/remark/toc/index.js +115 -0
  69. package/lib/remark/toc/index.js.map +1 -0
  70. package/lib/remark/toc/types.d.ts +22 -0
  71. package/lib/remark/toc/types.d.ts.map +1 -0
  72. package/lib/remark/toc/types.js +9 -0
  73. package/lib/remark/toc/types.js.map +1 -0
  74. package/lib/remark/toc/utils.d.ts +26 -0
  75. package/lib/remark/toc/utils.d.ts.map +1 -0
  76. package/lib/remark/toc/utils.js +184 -0
  77. package/lib/remark/toc/utils.js.map +1 -0
  78. package/lib/remark/transformImage/index.d.ts +17 -0
  79. package/lib/remark/transformImage/index.d.ts.map +1 -0
  80. package/lib/remark/transformImage/index.js +187 -0
  81. package/lib/remark/transformImage/index.js.map +1 -0
  82. package/lib/remark/transformLinks/index.d.ts +17 -0
  83. package/lib/remark/transformLinks/index.d.ts.map +1 -0
  84. package/lib/remark/transformLinks/index.js +205 -0
  85. package/lib/remark/transformLinks/index.js.map +1 -0
  86. package/lib/remark/unusedDirectives/index.d.ts +9 -0
  87. package/lib/remark/unusedDirectives/index.d.ts.map +1 -0
  88. package/lib/remark/unusedDirectives/index.js +125 -0
  89. package/lib/remark/unusedDirectives/index.js.map +1 -0
  90. package/lib/remark/utils/index.d.ts +18 -0
  91. package/lib/remark/utils/index.d.ts.map +1 -0
  92. package/lib/remark/utils/index.js +93 -0
  93. package/lib/remark/utils/index.js.map +1 -0
  94. package/lib/serializeJS.d.ts +17 -0
  95. package/lib/serializeJS.d.ts.map +1 -0
  96. package/lib/serializeJS.js +24 -0
  97. package/lib/serializeJS.js.map +1 -0
  98. package/lib/utils.d.ts +35 -0
  99. package/lib/utils.d.ts.map +1 -0
  100. package/lib/utils.js +97 -0
  101. package/lib/utils.js.map +1 -0
  102. package/package.json +65 -4
  103. package/src/createMDXLoader.ts +65 -0
  104. package/src/format.ts +50 -0
  105. package/src/frontMatter.ts +31 -0
  106. package/src/index.ts +44 -0
  107. package/src/loader.ts +227 -0
  108. package/src/options.ts +37 -0
  109. package/src/preprocessor.ts +47 -0
  110. package/src/processor.ts +306 -0
  111. package/src/remark/admonitions/LICENSE +45 -0
  112. package/src/remark/admonitions/README.md +3 -0
  113. package/src/remark/admonitions/index.ts +138 -0
  114. package/src/remark/contentTitle/index.ts +76 -0
  115. package/src/remark/details/index.ts +23 -0
  116. package/src/remark/head/index.ts +23 -0
  117. package/src/remark/headings/index.ts +158 -0
  118. package/src/remark/mdx1Compat/codeCompatPlugin.ts +35 -0
  119. package/src/remark/mermaid/index.ts +35 -0
  120. package/src/remark/resolveMarkdownLinks/index.ts +137 -0
  121. package/src/remark/toc/index.ts +183 -0
  122. package/src/remark/toc/types.ts +29 -0
  123. package/src/remark/toc/utils.ts +243 -0
  124. package/src/remark/transformImage/index.ts +268 -0
  125. package/src/remark/transformLinks/index.ts +291 -0
  126. package/src/remark/unusedDirectives/index.ts +171 -0
  127. package/src/remark/utils/index.ts +99 -0
  128. package/src/serializeJS.ts +22 -0
  129. package/src/types.d.mts +40 -0
  130. 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