@docusaurus/mdx-loader 2.0.0-beta.14 → 2.0.0-beta.15

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAa3C,aAAK,OAAO,GAAG,4BAA4B,GAAG;IAC5C,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;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE;QACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAwDF,wBAA8B,SAAS,CACrC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA2Gf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,OAAO,KAAK,EAAC,4BAA4B,EAAC,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAa3C,aAAK,OAAO,GAAG,4BAA4B,GAAG;IAC5C,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;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE;QACxB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAwDF,wBAA8B,SAAS,CACrC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAC5B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAgHf"}
package/lib/index.js CHANGED
@@ -84,12 +84,17 @@ async function mdxLoader(fileString) {
84
84
  remarkPlugins: [
85
85
  ...(reqOptions.beforeDefaultRemarkPlugins || []),
86
86
  ...DEFAULT_OPTIONS.remarkPlugins,
87
- [transformImage_1.default, { staticDirs: reqOptions.staticDirs, filePath }],
87
+ [
88
+ transformImage_1.default,
89
+ {
90
+ staticDirs: reqOptions.staticDirs,
91
+ siteDir: reqOptions.siteDir,
92
+ },
93
+ ],
88
94
  [
89
95
  transformLinks_1.default,
90
96
  {
91
97
  staticDirs: reqOptions.staticDirs,
92
- filePath,
93
98
  siteDir: reqOptions.siteDir,
94
99
  },
95
100
  ],
@@ -110,7 +115,7 @@ async function mdxLoader(fileString) {
110
115
  return callback(err);
111
116
  }
112
117
  // MDX partials are MDX files starting with _ or in a folder starting with _
113
- // Partial are not expected to have an associated metadata file or frontmatter
118
+ // Partial are not expected to have an associated metadata file or front matter
114
119
  const isMDXPartial = options.isMDXPartial && options.isMDXPartial(filePath);
115
120
  if (isMDXPartial && hasFrontMatter) {
116
121
  const errorMessage = `Docusaurus MDX partial files should not contain FrontMatter.
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/headings/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,gMAAgM;AAEhM,6CAAwE;AACxE,qFAAgD;AAChD,6FAA4C;AAK5C,SAAS,QAAQ;IACf,MAAM,WAAW,GAAgB,CAAC,GAAG,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,IAAA,qBAAa,GAAE,CAAC;QAE9B,MAAM,OAAO,GAAqB,CAAC,WAAW,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAE9D,CAAC;YACF,IAAI,EAAC,EAAE,EAAC,GAAG,UAAU,CAAC;YAEtB,IAAI,EAAE,EAAE;gBACN,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC,CAAC;aAC3C;iBAAM;gBACL,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAClD,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5C,CAAC;gBACF,MAAM,OAAO,GAAG,IAAA,8BAAQ,EACtB,gBAAgB,CAAC,MAAM,GAAG,CAAC;oBACzB,CAAC,CAAE,EAAC,QAAQ,EAAE,gBAAgB,EAAY;oBAC1C,CAAC,CAAC,WAAW,CAChB,CAAC;gBAEF,+BAA+B;gBAC/B,MAAM,aAAa,GAAG,IAAA,8BAAsB,EAAC,OAAO,CAAC,CAAC;gBAEtD,EAAE,GAAG,aAAa,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAE7C,IAAI,aAAa,CAAC,EAAE,EAAE;oBACpB,0DAA0D;oBAC1D,6EAA6E;oBAC7E,+BAA+B;oBAC/B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CACnC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CACxB,CAAC;oBAEV,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnC,MAAM,YAAY,GAAG,IAAA,8BAAsB,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;wBACjE,iDAAiD;wBACjD,IAAI,YAAY,EAAE;4BAChB,QAAQ,CAAC,KAAK,GAAG,YAAY,CAAC;yBAC/B;wBACD,mEAAmE;6BAC9D;4BACH,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;yBAC5B;qBACF;yBAAM;wBACL,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC;qBACrC;iBACF;aACF;YAED,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;QACrB,CAAC,CAAC;QAEF,IAAA,0BAAK,EAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,kBAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/headings/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,gMAAgM;AAEhM,6CAAwE;AACxE,qFAAqD;AACrD,6FAA4C;AAK5C,SAAS,QAAQ;IACf,MAAM,WAAW,GAAgB,CAAC,GAAG,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,IAAA,qBAAa,GAAE,CAAC;QAE9B,MAAM,OAAO,GAAqB,CAAC,WAAW,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAE9D,CAAC;YACF,IAAI,EAAC,EAAE,EAAC,GAAG,UAAU,CAAC;YAEtB,IAAI,EAAE,EAAE;gBACN,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC,CAAC;aAC3C;iBAAM;gBACL,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAClD,CAAC,EAAC,IAAI,EAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5C,CAAC;gBACF,MAAM,OAAO,GAAG,IAAA,8BAAQ,EACtB,gBAAgB,CAAC,MAAM,GAAG,CAAC;oBACzB,CAAC,CAAE,EAAC,QAAQ,EAAE,gBAAgB,EAAY;oBAC1C,CAAC,CAAC,WAAW,CAChB,CAAC;gBAEF,+BAA+B;gBAC/B,MAAM,aAAa,GAAG,IAAA,8BAAsB,EAAC,OAAO,CAAC,CAAC;gBAEtD,EAAE,GAAG,aAAa,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAE7C,IAAI,aAAa,CAAC,EAAE,EAAE;oBACpB,0DAA0D;oBAC1D,6EAA6E;oBAC7E,+BAA+B;oBAC/B,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CACnC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CACxB,CAAC;oBAEV,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;wBACnC,MAAM,YAAY,GAAG,IAAA,8BAAsB,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;wBACjE,iDAAiD;wBACjD,IAAI,YAAY,EAAE;4BAChB,QAAQ,CAAC,KAAK,GAAG,YAAY,CAAC;yBAC/B;wBACD,mEAAmE;6BAC9D;4BACH,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;yBAC5B;qBACF;yBAAM;wBACL,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC;qBACrC;iBACF;aACF;YAED,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YACb,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;QACrB,CAAC,CAAC;QAEF,IAAA,0BAAK,EAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,kBAAe,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/toc/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,0CAAmD;AAEnD,4EAAuC;AACvC,qFAA+C;AAC/C,mEAA8B;AAK9B,MAAM,YAAY,GAAkB;IAClC,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAW,EAAoB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC5E,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,CAAC,KAAW,EAAoB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAM5E,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,IAAY,EAAE,EAAE;IAChD,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,GAAG,GAAG,IAAA,cAAK,EAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC7C,IAAA,kBAAQ,EAAC,GAAG,EAAE;QACZ,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAK,IAAI,CAAC,IAAI,CAAC,EAAiB,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC9C,KAAK,GAAG,IAAI,CAAC;aACd;QACH,CAAC;KACF,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAE;IACxE,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IAErB,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnB,YAAY,GAAG,KAAK,CAAC;SACtB;aAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;YACnD,WAAW,GAAG,KAAK,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;QACtB,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,gBAAgB,IAAI,QAAQ;SACpC,CAAC;QAEF,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;KACzC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,MAAM,GAA6B,CAAC,OAAO,GAAG,EAAE,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IAEnC,MAAM,WAAW,GAAgB,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAuB,CAAC;QAC3C,MAAM,WAAW,GAAG,8BAA8B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEnE,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC/B,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,GAAG,gBAAgB,IAAI,MAAM,IAAA,0BAAe,EACrE,QAAQ,CACT,GAAG,CAAC;SACN;IACH,CAAC,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/toc/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,0CAAwD;AAExD,4EAAuC;AACvC,qFAA+C;AAC/C,mEAA8B;AAK9B,MAAM,YAAY,GAAkB;IAClC,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAW,EAAoB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC5E,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACjD,MAAM,QAAQ,GAAG,CAAC,KAAW,EAAoB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAM5E,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAE,IAAY,EAAE,EAAE;IAChD,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,GAAG,GAAG,IAAA,cAAK,EAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC7C,IAAA,kBAAQ,EAAC,GAAG,EAAE;QACZ,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAK,IAAI,CAAC,IAAI,CAAC,EAAiB,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC9C,KAAK,GAAG,IAAI,CAAC;aACd;QACH,CAAC;KACF,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAE;IACxE,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IAErB,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnB,YAAY,GAAG,KAAK,CAAC;SACtB;aAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;YACnD,WAAW,GAAG,KAAK,CAAC;SACrB;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;QACtB,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,gBAAgB,IAAI,QAAQ;SACpC,CAAC;QAEF,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;KACzC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,MAAM,GAA6B,CAAC,OAAO,GAAG,EAAE,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;IAEnC,MAAM,WAAW,GAAgB,CAAC,IAAI,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAuB,CAAC;QAC3C,MAAM,WAAW,GAAG,8BAA8B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEnE,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC/B,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,GAAG,gBAAgB,IAAI,MAAM,IAAA,0BAAe,EACrE,QAAQ,CACT,GAAG,CAAC;SACN;IACH,CAAC,CAAC;IAEF,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/remark/toc/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAUhC;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,EAAE,CAwDpD"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/remark/toc/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAUhC;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,EAAE,CAsDpD"}
@@ -16,7 +16,7 @@ const utils_1 = require("../utils");
16
16
  */
17
17
  function search(node) {
18
18
  const headings = [];
19
- const visitor = (child, _index, parent) => {
19
+ (0, unist_util_visit_1.default)(node, 'heading', (child, _index, parent) => {
20
20
  const value = (0, mdast_util_to_string_1.default)(child);
21
21
  // depth:1 headings are titles and not included in the TOC
22
22
  if (parent !== node || !value || child.depth < 2) {
@@ -32,9 +32,8 @@ function search(node) {
32
32
  level: child.depth,
33
33
  parentIndex: -1,
34
34
  });
35
- };
36
- (0, unist_util_visit_1.default)(node, 'heading', visitor);
37
- // Keep track of which previous index would be the current heading's direcy parent.
35
+ });
36
+ // Keep track of which previous index would be the current heading's direct parent.
38
37
  // Each entry <i> is the last index of the `headings` array at heading level <i>.
39
38
  // We will modify these indices as we iterate through all headings.
40
39
  // e.g. if an ### H3 was last seen at index 2, then prevIndexForLevel[3] === 2
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/remark/toc/search.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,6FAA4C;AAC5C,qFAAgD;AAChD,oCAAiC;AAYjC;;;GAGG;AACH,SAAwB,MAAM,CAAC,IAAU;IACvC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAElC,MAAM,OAAO,GAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,IAAA,8BAAQ,EAAC,KAAK,CAAC,CAAC;QAE9B,0DAA0D;QAC1D,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE;YAChD,OAAO;SACR;QAED,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAA,eAAO,EAAC,KAAK,CAAC;gBACrB,EAAE,EAAE,KAAK,CAAC,IAAK,CAAC,EAAY;gBAC5B,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB;YACD,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,CAAC,CAAC;SAChB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAA,0BAAK,EAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAEhC,mFAAmF;IACnF,iFAAiF;IACjF,mEAAmE;IACnE,8EAA8E;IAC9E,sCAAsC;IACtC,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QACnC,gEAAgE;QAChE,4DAA4D;QAC5D,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;QACrD,0DAA0D;QAC1D,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;YAC5B,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChE;aAAM;YACL,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACzB;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,QAAQ;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;SACvE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,gCAAgC;IACnE,OAAO,GAAG,CAAC;AACb,CAAC;AAxDD,yBAwDC"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/remark/toc/search.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,6FAA4C;AAC5C,qFAAqC;AACrC,oCAAiC;AAYjC;;;GAGG;AACH,SAAwB,MAAM,CAAC,IAAU;IACvC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAElC,IAAA,0BAAK,EAAC,IAAI,EAAE,SAAS,EAAE,CAAC,KAAc,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,IAAA,8BAAQ,EAAC,KAAK,CAAC,CAAC;QAE9B,0DAA0D;QAC1D,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE;YAChD,OAAO;SACR;QAED,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAA,eAAO,EAAC,KAAK,CAAC;gBACrB,EAAE,EAAE,KAAK,CAAC,IAAK,CAAC,EAAY;gBAC5B,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB;YACD,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,CAAC,CAAC;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,mFAAmF;IACnF,iFAAiF;IACjF,mEAAmE;IACnE,8EAA8E;IAC9E,sCAAsC;IACtC,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QACnC,gEAAgE;QAChE,4DAA4D;QAC5D,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;QACrD,0DAA0D;QAC1D,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAa,EAAE,CAAC;IAErC,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE;YAC5B,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChE;aAAM;YACL,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACzB;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,QAAQ;SACjB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;SACvE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,gCAAgC;IACnE,OAAO,GAAG,CAAC;AACb,CAAC;AAtDD,yBAsDC"}
@@ -5,10 +5,10 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import type { Plugin } from 'unified';
8
- interface PluginOptions {
9
- filePath: string;
8
+ declare type PluginOptions = {
10
9
  staticDirs: string[];
11
- }
10
+ siteDir: string;
11
+ };
12
12
  declare const plugin: Plugin<[PluginOptions]>;
13
13
  export default plugin;
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/remark/transformImage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EAAC,MAAM,EAAc,MAAM,SAAS,CAAC;AAOjD,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AA8FD,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,CAAC,aAAa,CAAC,CASnC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/remark/transformImage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,KAAK,EAAC,MAAM,EAAc,MAAM,SAAS,CAAC;AAQjD,aAAK,aAAa,GAAG;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAyHF,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,CAAC,aAAa,CAAC,CAWnC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -7,52 +7,84 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  const tslib_1 = require("tslib");
10
+ const utils_1 = require("@docusaurus/utils");
10
11
  const unist_util_visit_1 = (0, tslib_1.__importDefault)(require("unist-util-visit"));
11
12
  const path_1 = (0, tslib_1.__importDefault)(require("path"));
12
13
  const url_1 = (0, tslib_1.__importDefault)(require("url"));
13
14
  const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
14
15
  const escape_html_1 = (0, tslib_1.__importDefault)(require("escape-html"));
15
- const utils_1 = require("@docusaurus/utils");
16
+ const image_size_1 = (0, tslib_1.__importDefault)(require("image-size"));
17
+ const util_1 = require("util");
18
+ const logger_1 = (0, tslib_1.__importDefault)(require("@docusaurus/logger"));
16
19
  const { loaders: { inlineMarkdownImageFileLoader }, } = (0, utils_1.getFileLoaderUtils)();
17
- const createJSX = (node, pathUrl) => {
20
+ async function toImageRequireNode(node, imagePath, filePath) {
21
+ var _a, _b;
18
22
  const jsxNode = node;
19
- jsxNode.type = 'jsx';
20
- jsxNode.value = `<img ${node.alt ? `alt={"${(0, escape_html_1.default)(node.alt)}"} ` : ''}${node.url
21
- ? `src={require("${inlineMarkdownImageFileLoader}${(0, utils_1.escapePath)(pathUrl)}").default}`
22
- : ''}${node.title ? ` title="${(0, escape_html_1.default)(node.title)}"` : ''} />`;
23
- if (jsxNode.url) {
24
- delete jsxNode.url;
25
- }
26
- if (jsxNode.alt) {
27
- delete jsxNode.alt;
23
+ let relativeImagePath = (0, utils_1.posixPath)(path_1.default.relative(path_1.default.dirname(filePath), imagePath));
24
+ relativeImagePath = `./${relativeImagePath}`;
25
+ const parsedUrl = url_1.default.parse(node.url);
26
+ const hash = (_a = parsedUrl.hash) !== null && _a !== void 0 ? _a : '';
27
+ const search = (_b = parsedUrl.search) !== null && _b !== void 0 ? _b : '';
28
+ const alt = node.alt ? `alt={"${(0, escape_html_1.default)(node.alt)}"} ` : '';
29
+ const src = `require("${inlineMarkdownImageFileLoader}${(0, utils_1.escapePath)(relativeImagePath) + search}").default${hash ? ` + '${hash}'` : ''}`;
30
+ const title = node.title ? ` title="${(0, escape_html_1.default)(node.title)}"` : '';
31
+ let width = '';
32
+ let height = '';
33
+ try {
34
+ const size = (await (0, util_1.promisify)(image_size_1.default)(imagePath));
35
+ if (size.width) {
36
+ width = ` width="${size.width}"`;
37
+ }
38
+ if (size.height) {
39
+ height = ` height="${size.height}"`;
40
+ }
28
41
  }
29
- if (jsxNode.title) {
30
- delete jsxNode.title;
42
+ catch (e) {
43
+ logger_1.default.error `The image at path=${imagePath} can't be read correctly. Please ensure it's a valid image.
44
+ ${e.message}`;
31
45
  }
32
- };
46
+ Object.keys(jsxNode).forEach((key) => delete jsxNode[key]);
47
+ jsxNode.type = 'jsx';
48
+ jsxNode.value = `<img ${alt}src={${src}}${title}${width}${height} />`;
49
+ }
33
50
  async function ensureImageFileExist(imagePath, sourceFilePath) {
34
51
  const imageExists = await fs_extra_1.default.pathExists(imagePath);
35
52
  if (!imageExists) {
36
53
  throw new Error(`Image ${(0, utils_1.toMessageRelativeFilePath)(imagePath)} used in ${(0, utils_1.toMessageRelativeFilePath)(sourceFilePath)} not found.`);
37
54
  }
38
55
  }
39
- async function findImage(possiblePaths, sourceFilePath) {
40
- // eslint-disable-next-line no-restricted-syntax
41
- for (const possiblePath of possiblePaths) {
42
- if (await fs_extra_1.default.pathExists(possiblePath)) {
43
- return possiblePath;
56
+ async function getImageAbsolutePath(imagePath, { siteDir, filePath, staticDirs }) {
57
+ if (imagePath.startsWith('@site/')) {
58
+ const imageFilePath = path_1.default.join(siteDir, imagePath.replace('@site/', ''));
59
+ await ensureImageFileExist(imageFilePath, filePath);
60
+ return imageFilePath;
61
+ }
62
+ else if (path_1.default.isAbsolute(imagePath)) {
63
+ // absolute paths are expected to exist in the static folder
64
+ const possiblePaths = staticDirs.map((dir) => path_1.default.join(dir, imagePath));
65
+ const imageFilePath = await (0, utils_1.findAsyncSequential)(possiblePaths, fs_extra_1.default.pathExists);
66
+ if (!imageFilePath) {
67
+ throw new Error(`Image ${possiblePaths
68
+ .map((p) => (0, utils_1.toMessageRelativeFilePath)(p))
69
+ .join(' or ')} used in ${(0, utils_1.toMessageRelativeFilePath)(filePath)} not found.`);
44
70
  }
71
+ return imageFilePath;
72
+ }
73
+ // We try to convert image urls without protocol to images with require calls
74
+ // going through webpack ensures that image assets exist at build time
75
+ else {
76
+ // relative paths are resolved against the source file's folder
77
+ const imageFilePath = path_1.default.join(path_1.default.dirname(filePath), imagePath);
78
+ await ensureImageFileExist(imageFilePath, filePath);
79
+ return imageFilePath;
45
80
  }
46
- throw new Error(`Image ${possiblePaths
47
- .map((p) => (0, utils_1.toMessageRelativeFilePath)(p))
48
- .join(' or ')} used in ${(0, utils_1.toMessageRelativeFilePath)(sourceFilePath)} not found.`);
49
81
  }
50
- async function processImageNode(node, { filePath, staticDirs }) {
82
+ async function processImageNode(node, context) {
51
83
  if (!node.url) {
52
- throw new Error(`Markdown image URL is mandatory in "${(0, utils_1.toMessageRelativeFilePath)(filePath)}" file`);
84
+ throw new Error(`Markdown image URL is mandatory in "${(0, utils_1.toMessageRelativeFilePath)(context.filePath)}" file`);
53
85
  }
54
86
  const parsedUrl = url_1.default.parse(node.url);
55
- if (parsedUrl.protocol) {
87
+ if (parsedUrl.protocol || !parsedUrl.pathname) {
56
88
  // pathname:// is an escape hatch,
57
89
  // in case user does not want his images to be converted to require calls going through webpack loader
58
90
  // we don't have to document this for now,
@@ -60,28 +92,16 @@ async function processImageNode(node, { filePath, staticDirs }) {
60
92
  if (parsedUrl.protocol === 'pathname:') {
61
93
  node.url = node.url.replace('pathname://', '');
62
94
  }
95
+ return;
63
96
  }
64
- // images without protocol
65
- else if (path_1.default.isAbsolute(node.url)) {
66
- // absolute paths are expected to exist in the static folder
67
- const possibleImagePaths = staticDirs.map((dir) => path_1.default.join(dir, node.url));
68
- const imagePath = await findImage(possibleImagePaths, filePath);
69
- createJSX(node, (0, utils_1.posixPath)(imagePath));
70
- }
71
- // We try to convert image urls without protocol to images with require calls
72
- // going through webpack ensures that image assets exist at build time
73
- else {
74
- // relative paths are resolved against the source file's folder
75
- const expectedImagePath = path_1.default.join(path_1.default.dirname(filePath), node.url);
76
- await ensureImageFileExist(expectedImagePath, filePath);
77
- createJSX(node, node.url.startsWith('./') ? node.url : `./${node.url}`);
78
- }
97
+ const imagePath = await getImageAbsolutePath(parsedUrl.pathname, context);
98
+ await toImageRequireNode(node, imagePath, context.filePath);
79
99
  }
80
100
  const plugin = (options) => {
81
- const transformer = async (root) => {
101
+ const transformer = async (root, vfile) => {
82
102
  const promises = [];
83
103
  (0, unist_util_visit_1.default)(root, 'image', (node) => {
84
- promises.push(processImageNode(node, options));
104
+ promises.push(processImageNode(node, { ...options, filePath: vfile.path }));
85
105
  });
86
106
  await Promise.all(promises);
87
107
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/transformImage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/transformImage/index.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,10 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import type { Plugin } from 'unified';
8
- interface PluginOptions {
9
- filePath: string;
8
+ declare type PluginOptions = {
10
9
  staticDirs: string[];
11
10
  siteDir: string;
12
- }
11
+ };
13
12
  declare const plugin: Plugin<[PluginOptions]>;
14
13
  export default plugin;
15
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/remark/transformLinks/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,OAAO,KAAK,EAAC,MAAM,EAAc,MAAM,SAAS,CAAC;AAQjD,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AA0HD,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,CAAC,aAAa,CAAC,CASnC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/remark/transformLinks/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,OAAO,KAAK,EAAC,MAAM,EAAc,MAAM,SAAS,CAAC;AAOjD,aAAK,aAAa,GAAG;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AA4GF,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,CAAC,aAAa,CAAC,CASnC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -15,89 +15,85 @@ const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
15
15
  const escape_html_1 = (0, tslib_1.__importDefault)(require("escape-html"));
16
16
  const utils_2 = require("../utils");
17
17
  const { loaders: { inlineMarkdownLinkFileLoader }, } = (0, utils_1.getFileLoaderUtils)();
18
- const hashRegex = /#.*$/;
19
- async function ensureAssetFileExist(fileSystemAssetPath, sourceFilePath) {
20
- const assetExists = await fs_extra_1.default.pathExists(fileSystemAssetPath);
21
- if (!assetExists) {
22
- throw new Error(`Asset ${(0, utils_1.toMessageRelativeFilePath)(fileSystemAssetPath)} used in ${(0, utils_1.toMessageRelativeFilePath)(sourceFilePath)} not found.`);
23
- }
24
- }
25
18
  // transform the link node to a jsx link with a require() call
26
- function toAssetRequireNode({ node, filePath, requireAssetPath, }) {
27
- let relativeRequireAssetPath = (0, utils_1.posixPath)(path_1.default.relative(path_1.default.dirname(filePath), requireAssetPath));
28
- const hash = hashRegex.test(node.url)
29
- ? node.url.substr(node.url.indexOf('#'))
30
- : '';
31
- // nodejs does not like require("assets/file.pdf")
32
- relativeRequireAssetPath = relativeRequireAssetPath.startsWith('.')
33
- ? relativeRequireAssetPath
34
- : `./${relativeRequireAssetPath}`;
35
- const href = `require('${inlineMarkdownLinkFileLoader}${(0, utils_1.escapePath)(relativeRequireAssetPath)}').default${hash ? ` + '${hash}'` : ''}`;
19
+ function toAssetRequireNode(node, assetPath, filePath) {
20
+ var _a, _b;
21
+ const jsxNode = node;
22
+ let relativeAssetPath = (0, utils_1.posixPath)(path_1.default.relative(path_1.default.dirname(filePath), assetPath));
23
+ // require("assets/file.pdf") means requiring from a package called assets
24
+ relativeAssetPath = `./${relativeAssetPath}`;
25
+ const parsedUrl = url_1.default.parse(node.url);
26
+ const hash = (_a = parsedUrl.hash) !== null && _a !== void 0 ? _a : '';
27
+ const search = (_b = parsedUrl.search) !== null && _b !== void 0 ? _b : '';
28
+ const href = `require('${
29
+ // A hack to stop Webpack from using its built-in loader to parse JSON
30
+ path_1.default.extname(relativeAssetPath) === '.json'
31
+ ? `${relativeAssetPath.replace('.json', '.raw')}!=`
32
+ : ''}${inlineMarkdownLinkFileLoader}${(0, utils_1.escapePath)(relativeAssetPath) + search}').default${hash ? ` + '${hash}'` : ''}`;
36
33
  const children = (0, utils_2.stringifyContent)(node);
37
34
  const title = node.title ? ` title="${(0, escape_html_1.default)(node.title)}"` : '';
38
- node.type = 'jsx';
39
- node.value = `<a target="_blank" href={${href}}${title}>${children}</a>`;
35
+ Object.keys(jsxNode).forEach((key) => delete jsxNode[key]);
36
+ jsxNode.type = 'jsx';
37
+ jsxNode.value = `<a target="_blank" href={${href}}${title}>${children}</a>`;
40
38
  }
41
- // If the link looks like an asset link, we'll link to the asset,
42
- // and use a require("assetUrl") (using webpack url-loader/file-loader)
43
- // instead of navigating to such link
44
- async function convertToAssetLinkIfNeeded(node, { filePath, siteDir, staticDirs }) {
45
- const assetPath = node.url.replace(hashRegex, '');
46
- const hasSiteAlias = assetPath.startsWith('@site/');
47
- const hasAssetLikeExtension = path_1.default.extname(assetPath) && !assetPath.match(/#|.md|.mdx|.html/);
48
- const looksLikeAssetLink = hasSiteAlias || hasAssetLikeExtension;
49
- if (!looksLikeAssetLink) {
50
- return;
51
- }
52
- function toAssetLinkNode(requireAssetPath) {
53
- toAssetRequireNode({
54
- node,
55
- filePath,
56
- requireAssetPath,
57
- });
39
+ async function ensureAssetFileExist(assetPath, sourceFilePath) {
40
+ const assetExists = await fs_extra_1.default.pathExists(assetPath);
41
+ if (!assetExists) {
42
+ throw new Error(`Asset ${(0, utils_1.toMessageRelativeFilePath)(assetPath)} used in ${(0, utils_1.toMessageRelativeFilePath)(sourceFilePath)} not found.`);
58
43
  }
44
+ }
45
+ async function getAssetAbsolutePath(assetPath, { siteDir, filePath, staticDirs }) {
59
46
  if (assetPath.startsWith('@site/')) {
60
- const fileSystemAssetPath = path_1.default.join(siteDir, assetPath.replace('@site/', ''));
61
- await ensureAssetFileExist(fileSystemAssetPath, filePath);
62
- toAssetLinkNode(fileSystemAssetPath);
47
+ const assetFilePath = path_1.default.join(siteDir, assetPath.replace('@site/', ''));
48
+ // The @site alias is the only way to believe that the user wants an asset.
49
+ // Everything else can just be a link URL
50
+ await ensureAssetFileExist(assetFilePath, filePath);
51
+ return assetFilePath;
63
52
  }
64
53
  else if (path_1.default.isAbsolute(assetPath)) {
65
- // eslint-disable-next-line no-restricted-syntax
66
- for (const staticDir of staticDirs) {
67
- const fileSystemAssetPath = path_1.default.join(staticDir, assetPath);
68
- if (await fs_extra_1.default.pathExists(fileSystemAssetPath)) {
69
- toAssetLinkNode(fileSystemAssetPath);
70
- return;
71
- }
54
+ const assetFilePath = await (0, utils_1.findAsyncSequential)(staticDirs.map((dir) => path_1.default.join(dir, assetPath)), fs_extra_1.default.pathExists);
55
+ if (assetFilePath) {
56
+ return assetFilePath;
72
57
  }
73
58
  }
74
59
  else {
75
- const fileSystemAssetPath = path_1.default.join(path_1.default.dirname(filePath), assetPath);
76
- if (await fs_extra_1.default.pathExists(fileSystemAssetPath)) {
77
- toAssetLinkNode(fileSystemAssetPath);
60
+ const assetFilePath = path_1.default.join(path_1.default.dirname(filePath), assetPath);
61
+ if (await fs_extra_1.default.pathExists(assetFilePath)) {
62
+ return assetFilePath;
78
63
  }
79
64
  }
65
+ return null;
80
66
  }
81
- async function processLinkNode(node, options) {
67
+ async function processLinkNode(node, context) {
82
68
  var _a, _b, _c;
83
69
  if (!node.url) {
84
70
  // try to improve error feedback
85
71
  // see https://github.com/facebook/docusaurus/issues/3309#issuecomment-690371675
86
72
  const title = node.title || ((_a = node.children[0]) === null || _a === void 0 ? void 0 : _a.value) || '?';
87
73
  const line = ((_c = (_b = node === null || node === void 0 ? void 0 : node.position) === null || _b === void 0 ? void 0 : _b.start) === null || _c === void 0 ? void 0 : _c.line) || '?';
88
- throw new Error(`Markdown link URL is mandatory in "${(0, utils_1.toMessageRelativeFilePath)(options.filePath)}" file (title: ${title}, line: ${line}).`);
74
+ throw new Error(`Markdown link URL is mandatory in "${(0, utils_1.toMessageRelativeFilePath)(context.filePath)}" file (title: ${title}, line: ${line}).`);
89
75
  }
90
76
  const parsedUrl = url_1.default.parse(node.url);
91
- if (parsedUrl.protocol) {
77
+ if (parsedUrl.protocol || !parsedUrl.pathname) {
78
+ // Don't process pathname:// here, it's used by the <Link> component
92
79
  return;
93
80
  }
94
- await convertToAssetLinkIfNeeded(node, options);
81
+ const hasSiteAlias = parsedUrl.pathname.startsWith('@site/');
82
+ const hasAssetLikeExtension = path_1.default.extname(parsedUrl.pathname) &&
83
+ !parsedUrl.pathname.match(/\.(?:mdx?|html)(?:#|$)/);
84
+ if (!hasSiteAlias && !hasAssetLikeExtension) {
85
+ return;
86
+ }
87
+ const assetPath = await getAssetAbsolutePath(parsedUrl.pathname, context);
88
+ if (assetPath) {
89
+ toAssetRequireNode(node, assetPath, context.filePath);
90
+ }
95
91
  }
96
92
  const plugin = (options) => {
97
- const transformer = async (root) => {
93
+ const transformer = async (root, vfile) => {
98
94
  const promises = [];
99
95
  (0, unist_util_visit_1.default)(root, 'link', (node) => {
100
- promises.push(processLinkNode(node, options));
96
+ promises.push(processLinkNode(node, { ...options, filePath: vfile.path }));
101
97
  });
102
98
  await Promise.all(promises);
103
99
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/transformLinks/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/remark/transformLinks/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docusaurus/mdx-loader",
3
- "version": "2.0.0-beta.14",
3
+ "version": "2.0.0-beta.15",
4
4
  "description": "Docusaurus Loader for MDX",
5
5
  "main": "lib/index.js",
6
6
  "types": "src/mdx-loader.d.ts",
@@ -20,14 +20,13 @@
20
20
  "dependencies": {
21
21
  "@babel/parser": "^7.16.4",
22
22
  "@babel/traverse": "^7.16.3",
23
- "@docusaurus/logger": "2.0.0-beta.14",
24
- "@docusaurus/utils": "2.0.0-beta.14",
23
+ "@docusaurus/logger": "2.0.0-beta.15",
24
+ "@docusaurus/utils": "2.0.0-beta.15",
25
25
  "@mdx-js/mdx": "^1.6.21",
26
- "@mdx-js/react": "^1.6.21",
27
26
  "escape-html": "^1.0.3",
28
27
  "file-loader": "^6.2.0",
29
28
  "fs-extra": "^10.0.0",
30
- "gray-matter": "^4.0.3",
29
+ "image-size": "^1.0.1",
31
30
  "mdast-util-to-string": "^2.0.0",
32
31
  "remark-emoji": "^2.1.0",
33
32
  "stringify-object": "^3.3.0",
@@ -37,7 +36,7 @@
37
36
  "webpack": "^5.61.0"
38
37
  },
39
38
  "devDependencies": {
40
- "@docusaurus/types": "2.0.0-beta.14",
39
+ "@docusaurus/types": "2.0.0-beta.15",
41
40
  "@types/escape-html": "^1.0.1",
42
41
  "@types/mdast": "^3.0.7",
43
42
  "@types/stringify-object": "^3.3.1",
@@ -55,5 +54,5 @@
55
54
  "engines": {
56
55
  "node": ">=14"
57
56
  },
58
- "gitHead": "c4824a8937d8f1aa0806667749cbc74058e2b294"
57
+ "gitHead": "32ec84ef3c0a238436e913b2026ab809e5750fa8"
59
58
  }
package/src/index.ts CHANGED
@@ -124,12 +124,17 @@ export default async function mdxLoader(
124
124
  remarkPlugins: [
125
125
  ...(reqOptions.beforeDefaultRemarkPlugins || []),
126
126
  ...DEFAULT_OPTIONS.remarkPlugins,
127
- [transformImage, {staticDirs: reqOptions.staticDirs, filePath}],
127
+ [
128
+ transformImage,
129
+ {
130
+ staticDirs: reqOptions.staticDirs,
131
+ siteDir: reqOptions.siteDir,
132
+ },
133
+ ],
128
134
  [
129
135
  transformLinks,
130
136
  {
131
137
  staticDirs: reqOptions.staticDirs,
132
- filePath,
133
138
  siteDir: reqOptions.siteDir,
134
139
  },
135
140
  ],
@@ -151,7 +156,7 @@ export default async function mdxLoader(
151
156
  }
152
157
 
153
158
  // MDX partials are MDX files starting with _ or in a folder starting with _
154
- // Partial are not expected to have an associated metadata file or frontmatter
159
+ // Partial are not expected to have an associated metadata file or front matter
155
160
  const isMDXPartial = options.isMDXPartial && options.isMDXPartial(filePath);
156
161
  if (isMDXPartial && hasFrontMatter) {
157
162
  const errorMessage = `Docusaurus MDX partial files should not contain FrontMatter.
@@ -8,7 +8,7 @@
8
8
  /* Based on remark-slug (https://github.com/remarkjs/remark-slug) and gatsby-remark-autolink-headers (https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-remark-autolink-headers) */
9
9
 
10
10
  import {parseMarkdownHeadingId, createSlugger} from '@docusaurus/utils';
11
- import visit, {Visitor} from 'unist-util-visit';
11
+ import visit, {type Visitor} from 'unist-util-visit';
12
12
  import toString from 'mdast-util-to-string';
13
13
  import type {Transformer} from 'unified';
14
14
  import type {Parent} from 'unist';
@@ -5,7 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import {parse, ParserOptions} from '@babel/parser';
8
+ import {parse, type ParserOptions} from '@babel/parser';
9
9
  import type {Identifier} from '@babel/types';
10
10
  import traverse from '@babel/traverse';
11
11
  import stringifyObject from 'stringify-object';
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import toString from 'mdast-util-to-string';
9
- import visit, {Visitor} from 'unist-util-visit';
9
+ import visit from 'unist-util-visit';
10
10
  import {toValue} from '../utils';
11
11
  import type {TOCItem} from '@docusaurus/types';
12
12
  import type {Node} from 'unist';
@@ -26,7 +26,7 @@ interface SearchItem {
26
26
  export default function search(node: Node): TOCItem[] {
27
27
  const headings: SearchItem[] = [];
28
28
 
29
- const visitor: Visitor<Heading> = (child, _index, parent) => {
29
+ visit(node, 'heading', (child: Heading, _index, parent) => {
30
30
  const value = toString(child);
31
31
 
32
32
  // depth:1 headings are titles and not included in the TOC
@@ -44,11 +44,9 @@ export default function search(node: Node): TOCItem[] {
44
44
  level: child.depth,
45
45
  parentIndex: -1,
46
46
  });
47
- };
48
-
49
- visit(node, 'heading', visitor);
47
+ });
50
48
 
51
- // Keep track of which previous index would be the current heading's direcy parent.
49
+ // Keep track of which previous index would be the current heading's direct parent.
52
50
  // Each entry <i> is the last index of the `headings` array at heading level <i>.
53
51
  // We will modify these indices as we iterate through all headings.
54
52
  // e.g. if an ### H3 was last seen at index 2, then prevIndexForLevel[3] === 2
@@ -5,53 +5,80 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import visit from 'unist-util-visit';
9
- import path from 'path';
10
- import url from 'url';
11
- import fs from 'fs-extra';
12
- import escapeHtml from 'escape-html';
13
8
  import {
9
+ toMessageRelativeFilePath,
14
10
  posixPath,
15
11
  escapePath,
16
- toMessageRelativeFilePath,
17
12
  getFileLoaderUtils,
13
+ findAsyncSequential,
18
14
  } from '@docusaurus/utils';
15
+ import visit from 'unist-util-visit';
16
+ import path from 'path';
17
+ import url from 'url';
18
+ import fs from 'fs-extra';
19
+ import escapeHtml from 'escape-html';
20
+ import sizeOf from 'image-size';
21
+ import {promisify} from 'util';
19
22
  import type {Plugin, Transformer} from 'unified';
20
23
  import type {Image, Literal} from 'mdast';
24
+ import logger from '@docusaurus/logger';
21
25
 
22
26
  const {
23
27
  loaders: {inlineMarkdownImageFileLoader},
24
28
  } = getFileLoaderUtils();
25
29
 
26
- interface PluginOptions {
27
- filePath: string;
30
+ type PluginOptions = {
28
31
  staticDirs: string[];
29
- }
32
+ siteDir: string;
33
+ };
30
34
 
31
- const createJSX = (node: Image, pathUrl: string) => {
32
- const jsxNode = node;
33
- (jsxNode as unknown as Literal).type = 'jsx';
34
- (jsxNode as unknown as Literal).value = `<img ${
35
- node.alt ? `alt={"${escapeHtml(node.alt)}"} ` : ''
36
- }${
37
- node.url
38
- ? `src={require("${inlineMarkdownImageFileLoader}${escapePath(
39
- pathUrl,
40
- )}").default}`
41
- : ''
42
- }${node.title ? ` title="${escapeHtml(node.title)}"` : ''} />`;
43
-
44
- if (jsxNode.url) {
45
- delete (jsxNode as Partial<Image>).url;
46
- }
47
- if (jsxNode.alt) {
48
- delete jsxNode.alt;
49
- }
50
- if (jsxNode.title) {
51
- delete jsxNode.title;
52
- }
35
+ type Context = PluginOptions & {
36
+ filePath: string;
53
37
  };
54
38
 
39
+ async function toImageRequireNode(
40
+ node: Image,
41
+ imagePath: string,
42
+ filePath: string,
43
+ ) {
44
+ const jsxNode = node as Literal & Partial<Image>;
45
+ let relativeImagePath = posixPath(
46
+ path.relative(path.dirname(filePath), imagePath),
47
+ );
48
+ relativeImagePath = `./${relativeImagePath}`;
49
+
50
+ const parsedUrl = url.parse(node.url);
51
+ const hash = parsedUrl.hash ?? '';
52
+ const search = parsedUrl.search ?? '';
53
+
54
+ const alt = node.alt ? `alt={"${escapeHtml(node.alt)}"} ` : '';
55
+ const src = `require("${inlineMarkdownImageFileLoader}${
56
+ escapePath(relativeImagePath) + search
57
+ }").default${hash ? ` + '${hash}'` : ''}`;
58
+ const title = node.title ? ` title="${escapeHtml(node.title)}"` : '';
59
+ let width = '';
60
+ let height = '';
61
+ try {
62
+ const size = (await promisify(sizeOf)(imagePath))!;
63
+ if (size.width) {
64
+ width = ` width="${size.width}"`;
65
+ }
66
+ if (size.height) {
67
+ height = ` height="${size.height}"`;
68
+ }
69
+ } catch (e) {
70
+ logger.error`The image at path=${imagePath} can't be read correctly. Please ensure it's a valid image.
71
+ ${(e as Error).message}`;
72
+ }
73
+
74
+ Object.keys(jsxNode).forEach(
75
+ (key) => delete jsxNode[key as keyof typeof jsxNode],
76
+ );
77
+
78
+ (jsxNode as Literal).type = 'jsx';
79
+ jsxNode.value = `<img ${alt}src={${src}}${title}${width}${height} />`;
80
+ }
81
+
55
82
  async function ensureImageFileExist(imagePath: string, sourceFilePath: string) {
56
83
  const imageExists = await fs.pathExists(imagePath);
57
84
  if (!imageExists) {
@@ -63,36 +90,53 @@ async function ensureImageFileExist(imagePath: string, sourceFilePath: string) {
63
90
  }
64
91
  }
65
92
 
66
- async function findImage(possiblePaths: string[], sourceFilePath: string) {
67
- // eslint-disable-next-line no-restricted-syntax
68
- for (const possiblePath of possiblePaths) {
69
- if (await fs.pathExists(possiblePath)) {
70
- return possiblePath;
93
+ async function getImageAbsolutePath(
94
+ imagePath: string,
95
+ {siteDir, filePath, staticDirs}: Context,
96
+ ) {
97
+ if (imagePath.startsWith('@site/')) {
98
+ const imageFilePath = path.join(siteDir, imagePath.replace('@site/', ''));
99
+ await ensureImageFileExist(imageFilePath, filePath);
100
+ return imageFilePath;
101
+ } else if (path.isAbsolute(imagePath)) {
102
+ // absolute paths are expected to exist in the static folder
103
+ const possiblePaths = staticDirs.map((dir) => path.join(dir, imagePath));
104
+ const imageFilePath = await findAsyncSequential(
105
+ possiblePaths,
106
+ fs.pathExists,
107
+ );
108
+ if (!imageFilePath) {
109
+ throw new Error(
110
+ `Image ${possiblePaths
111
+ .map((p) => toMessageRelativeFilePath(p))
112
+ .join(' or ')} used in ${toMessageRelativeFilePath(
113
+ filePath,
114
+ )} not found.`,
115
+ );
71
116
  }
117
+ return imageFilePath;
118
+ }
119
+ // We try to convert image urls without protocol to images with require calls
120
+ // going through webpack ensures that image assets exist at build time
121
+ else {
122
+ // relative paths are resolved against the source file's folder
123
+ const imageFilePath = path.join(path.dirname(filePath), imagePath);
124
+ await ensureImageFileExist(imageFilePath, filePath);
125
+ return imageFilePath;
72
126
  }
73
- throw new Error(
74
- `Image ${possiblePaths
75
- .map((p) => toMessageRelativeFilePath(p))
76
- .join(' or ')} used in ${toMessageRelativeFilePath(
77
- sourceFilePath,
78
- )} not found.`,
79
- );
80
127
  }
81
128
 
82
- async function processImageNode(
83
- node: Image,
84
- {filePath, staticDirs}: PluginOptions,
85
- ) {
129
+ async function processImageNode(node: Image, context: Context) {
86
130
  if (!node.url) {
87
131
  throw new Error(
88
132
  `Markdown image URL is mandatory in "${toMessageRelativeFilePath(
89
- filePath,
133
+ context.filePath,
90
134
  )}" file`,
91
135
  );
92
136
  }
93
137
 
94
138
  const parsedUrl = url.parse(node.url);
95
- if (parsedUrl.protocol) {
139
+ if (parsedUrl.protocol || !parsedUrl.pathname) {
96
140
  // pathname:// is an escape hatch,
97
141
  // in case user does not want his images to be converted to require calls going through webpack loader
98
142
  // we don't have to document this for now,
@@ -100,31 +144,20 @@ async function processImageNode(
100
144
  if (parsedUrl.protocol === 'pathname:') {
101
145
  node.url = node.url.replace('pathname://', '');
102
146
  }
147
+ return;
103
148
  }
104
- // images without protocol
105
- else if (path.isAbsolute(node.url)) {
106
- // absolute paths are expected to exist in the static folder
107
- const possibleImagePaths = staticDirs.map((dir) =>
108
- path.join(dir, node.url),
109
- );
110
- const imagePath = await findImage(possibleImagePaths, filePath);
111
- createJSX(node, posixPath(imagePath));
112
- }
113
- // We try to convert image urls without protocol to images with require calls
114
- // going through webpack ensures that image assets exist at build time
115
- else {
116
- // relative paths are resolved against the source file's folder
117
- const expectedImagePath = path.join(path.dirname(filePath), node.url);
118
- await ensureImageFileExist(expectedImagePath, filePath);
119
- createJSX(node, node.url.startsWith('./') ? node.url : `./${node.url}`);
120
- }
149
+
150
+ const imagePath = await getImageAbsolutePath(parsedUrl.pathname, context);
151
+ await toImageRequireNode(node, imagePath, context.filePath);
121
152
  }
122
153
 
123
154
  const plugin: Plugin<[PluginOptions]> = (options) => {
124
- const transformer: Transformer = async (root) => {
155
+ const transformer: Transformer = async (root, vfile) => {
125
156
  const promises: Promise<void>[] = [];
126
157
  visit(root, 'image', (node: Image) => {
127
- promises.push(processImageNode(node, options));
158
+ promises.push(
159
+ processImageNode(node, {...options, filePath: vfile.path!}),
160
+ );
128
161
  });
129
162
  await Promise.all(promises);
130
163
  };
@@ -10,6 +10,7 @@ import {
10
10
  posixPath,
11
11
  escapePath,
12
12
  getFileLoaderUtils,
13
+ findAsyncSequential,
13
14
  } from '@docusaurus/utils';
14
15
  import visit from 'unist-util-visit';
15
16
  import path from 'path';
@@ -23,114 +24,87 @@ import type {Link, Literal} from 'mdast';
23
24
  const {
24
25
  loaders: {inlineMarkdownLinkFileLoader},
25
26
  } = getFileLoaderUtils();
26
- const hashRegex = /#.*$/;
27
27
 
28
- interface PluginOptions {
29
- filePath: string;
28
+ type PluginOptions = {
30
29
  staticDirs: string[];
31
30
  siteDir: string;
32
- }
31
+ };
33
32
 
34
- async function ensureAssetFileExist(
35
- fileSystemAssetPath: string,
36
- sourceFilePath: string,
37
- ) {
38
- const assetExists = await fs.pathExists(fileSystemAssetPath);
39
- if (!assetExists) {
40
- throw new Error(
41
- `Asset ${toMessageRelativeFilePath(
42
- fileSystemAssetPath,
43
- )} used in ${toMessageRelativeFilePath(sourceFilePath)} not found.`,
44
- );
45
- }
46
- }
33
+ type Context = PluginOptions & {
34
+ filePath: string;
35
+ };
47
36
 
48
37
  // transform the link node to a jsx link with a require() call
49
- function toAssetRequireNode({
50
- node,
51
- filePath,
52
- requireAssetPath,
53
- }: {
54
- node: Link;
55
- filePath: string;
56
- requireAssetPath: string;
57
- }) {
58
- let relativeRequireAssetPath = posixPath(
59
- path.relative(path.dirname(filePath), requireAssetPath),
38
+ function toAssetRequireNode(node: Link, assetPath: string, filePath: string) {
39
+ const jsxNode = node as Literal & Partial<Link>;
40
+ let relativeAssetPath = posixPath(
41
+ path.relative(path.dirname(filePath), assetPath),
60
42
  );
61
- const hash = hashRegex.test(node.url)
62
- ? node.url.substr(node.url.indexOf('#'))
63
- : '';
64
-
65
- // nodejs does not like require("assets/file.pdf")
66
- relativeRequireAssetPath = relativeRequireAssetPath.startsWith('.')
67
- ? relativeRequireAssetPath
68
- : `./${relativeRequireAssetPath}`;
69
-
70
- const href = `require('${inlineMarkdownLinkFileLoader}${escapePath(
71
- relativeRequireAssetPath,
72
- )}').default${hash ? ` + '${hash}'` : ''}`;
43
+ // require("assets/file.pdf") means requiring from a package called assets
44
+ relativeAssetPath = `./${relativeAssetPath}`;
45
+
46
+ const parsedUrl = url.parse(node.url);
47
+ const hash = parsedUrl.hash ?? '';
48
+ const search = parsedUrl.search ?? '';
49
+
50
+ const href = `require('${
51
+ // A hack to stop Webpack from using its built-in loader to parse JSON
52
+ path.extname(relativeAssetPath) === '.json'
53
+ ? `${relativeAssetPath.replace('.json', '.raw')}!=`
54
+ : ''
55
+ }${inlineMarkdownLinkFileLoader}${
56
+ escapePath(relativeAssetPath) + search
57
+ }').default${hash ? ` + '${hash}'` : ''}`;
73
58
  const children = stringifyContent(node);
74
59
  const title = node.title ? ` title="${escapeHtml(node.title)}"` : '';
75
60
 
76
- (node as unknown as Literal).type = 'jsx';
77
- (
78
- node as unknown as Literal
79
- ).value = `<a target="_blank" href={${href}}${title}>${children}</a>`;
80
- }
81
-
82
- // If the link looks like an asset link, we'll link to the asset,
83
- // and use a require("assetUrl") (using webpack url-loader/file-loader)
84
- // instead of navigating to such link
85
- async function convertToAssetLinkIfNeeded(
86
- node: Link,
87
- {filePath, siteDir, staticDirs}: PluginOptions,
88
- ) {
89
- const assetPath = node.url.replace(hashRegex, '');
90
-
91
- const hasSiteAlias = assetPath.startsWith('@site/');
92
- const hasAssetLikeExtension =
93
- path.extname(assetPath) && !assetPath.match(/#|.md|.mdx|.html/);
94
-
95
- const looksLikeAssetLink = hasSiteAlias || hasAssetLikeExtension;
61
+ Object.keys(jsxNode).forEach(
62
+ (key) => delete jsxNode[key as keyof typeof jsxNode],
63
+ );
96
64
 
97
- if (!looksLikeAssetLink) {
98
- return;
99
- }
65
+ (jsxNode as Literal).type = 'jsx';
66
+ jsxNode.value = `<a target="_blank" href={${href}}${title}>${children}</a>`;
67
+ }
100
68
 
101
- function toAssetLinkNode(requireAssetPath: string) {
102
- toAssetRequireNode({
103
- node,
104
- filePath,
105
- requireAssetPath,
106
- });
69
+ async function ensureAssetFileExist(assetPath: string, sourceFilePath: string) {
70
+ const assetExists = await fs.pathExists(assetPath);
71
+ if (!assetExists) {
72
+ throw new Error(
73
+ `Asset ${toMessageRelativeFilePath(
74
+ assetPath,
75
+ )} used in ${toMessageRelativeFilePath(sourceFilePath)} not found.`,
76
+ );
107
77
  }
78
+ }
108
79
 
80
+ async function getAssetAbsolutePath(
81
+ assetPath: string,
82
+ {siteDir, filePath, staticDirs}: Context,
83
+ ) {
109
84
  if (assetPath.startsWith('@site/')) {
110
- const fileSystemAssetPath = path.join(
111
- siteDir,
112
- assetPath.replace('@site/', ''),
113
- );
114
- await ensureAssetFileExist(fileSystemAssetPath, filePath);
115
- toAssetLinkNode(fileSystemAssetPath);
85
+ const assetFilePath = path.join(siteDir, assetPath.replace('@site/', ''));
86
+ // The @site alias is the only way to believe that the user wants an asset.
87
+ // Everything else can just be a link URL
88
+ await ensureAssetFileExist(assetFilePath, filePath);
89
+ return assetFilePath;
116
90
  } else if (path.isAbsolute(assetPath)) {
117
- // eslint-disable-next-line no-restricted-syntax
118
- for (const staticDir of staticDirs) {
119
- const fileSystemAssetPath = path.join(staticDir, assetPath);
120
- if (await fs.pathExists(fileSystemAssetPath)) {
121
- toAssetLinkNode(fileSystemAssetPath);
122
- return;
123
- }
91
+ const assetFilePath = await findAsyncSequential(
92
+ staticDirs.map((dir) => path.join(dir, assetPath)),
93
+ fs.pathExists,
94
+ );
95
+ if (assetFilePath) {
96
+ return assetFilePath;
124
97
  }
125
98
  } else {
126
- const fileSystemAssetPath = path.join(path.dirname(filePath), assetPath);
127
- if (await fs.pathExists(fileSystemAssetPath)) {
128
- toAssetLinkNode(fileSystemAssetPath);
99
+ const assetFilePath = path.join(path.dirname(filePath), assetPath);
100
+ if (await fs.pathExists(assetFilePath)) {
101
+ return assetFilePath;
129
102
  }
130
103
  }
104
+ return null;
131
105
  }
132
106
 
133
- async function processLinkNode(node: Link, options: PluginOptions) {
107
+ async function processLinkNode(node: Link, context: Context) {
134
108
  if (!node.url) {
135
109
  // try to improve error feedback
136
110
  // see https://github.com/facebook/docusaurus/issues/3309#issuecomment-690371675
@@ -138,24 +112,35 @@ async function processLinkNode(node: Link, options: PluginOptions) {
138
112
  const line = node?.position?.start?.line || '?';
139
113
  throw new Error(
140
114
  `Markdown link URL is mandatory in "${toMessageRelativeFilePath(
141
- options.filePath,
115
+ context.filePath,
142
116
  )}" file (title: ${title}, line: ${line}).`,
143
117
  );
144
118
  }
145
119
 
146
120
  const parsedUrl = url.parse(node.url);
147
- if (parsedUrl.protocol) {
121
+ if (parsedUrl.protocol || !parsedUrl.pathname) {
122
+ // Don't process pathname:// here, it's used by the <Link> component
123
+ return;
124
+ }
125
+ const hasSiteAlias = parsedUrl.pathname.startsWith('@site/');
126
+ const hasAssetLikeExtension =
127
+ path.extname(parsedUrl.pathname) &&
128
+ !parsedUrl.pathname.match(/\.(?:mdx?|html)(?:#|$)/);
129
+ if (!hasSiteAlias && !hasAssetLikeExtension) {
148
130
  return;
149
131
  }
150
132
 
151
- await convertToAssetLinkIfNeeded(node, options);
133
+ const assetPath = await getAssetAbsolutePath(parsedUrl.pathname, context);
134
+ if (assetPath) {
135
+ toAssetRequireNode(node, assetPath, context.filePath);
136
+ }
152
137
  }
153
138
 
154
139
  const plugin: Plugin<[PluginOptions]> = (options) => {
155
- const transformer: Transformer = async (root) => {
140
+ const transformer: Transformer = async (root, vfile) => {
156
141
  const promises: Promise<void>[] = [];
157
142
  visit(root, 'link', (node: Link) => {
158
- promises.push(processLinkNode(node, options));
143
+ promises.push(processLinkNode(node, {...options, filePath: vfile.path!}));
159
144
  });
160
145
  await Promise.all(promises);
161
146
  };