@docusaurus/utils 0.0.0-5956 → 0.0.0-5957

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -9,11 +9,11 @@ export { generate, readOutputHTMLFile } from './emitUtils';
9
9
  export { getFileCommitDate, FileNotTrackedError, GitNotFoundError, } from './gitUtils';
10
10
  export { mergeTranslations, updateTranslationFileMessages, getPluginI18nPath, localizePath, } from './i18nUtils';
11
11
  export { mapAsyncSequential, findAsyncSequential } from './jsUtils';
12
- export { normalizeUrl, getEditUrl, fileToPath, encodePath, isValidPathname, resolvePathname, parseURLPath, serializeURLPath, hasSSHProtocol, buildHttpsUrl, buildSshUrl, } from './urlUtils';
12
+ export { normalizeUrl, getEditUrl, fileToPath, encodePath, isValidPathname, resolvePathname, parseURLPath, parseLocalURLPath, parseURLOrPath, toURLPath, serializeURLPath, hasSSHProtocol, buildHttpsUrl, buildSshUrl, } from './urlUtils';
13
13
  export type { URLPath } from './urlUtils';
14
14
  export { type Tag, type TagsListItem, type TagModule, type FrontMatterTag, normalizeFrontMatterTags, groupTaggedItems, getTagVisibility, } from './tags';
15
15
  export { parseMarkdownHeadingId, escapeMarkdownHeadingIds, unwrapMdxCodeBlocks, admonitionTitleToDirectiveLabel, createExcerpt, DEFAULT_PARSE_FRONT_MATTER, parseMarkdownContentTitle, parseMarkdownFile, writeMarkdownHeadingId, type WriteHeadingIDOptions, } from './markdownUtils';
16
- export { type ContentPaths, type BrokenMarkdownLink, replaceMarkdownLinks, } from './markdownLinks';
16
+ export { type ContentPaths, resolveMarkdownLinkPathname } from './markdownLinks';
17
17
  export { type SluggerOptions, type Slugger, createSlugger } from './slugger';
18
18
  export { isNameTooLong, shortName, posixPath, toMessageRelativeFilePath, aliasedSitePath, aliasedSitePathToRelativePath, escapePath, addTrailingPathSeparator, } from './pathUtils';
19
19
  export { md5Hash, simpleHash, docuHash } from './hashUtils';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,YAAY,EACZ,uBAAuB,EACvB,6BAA6B,EAC7B,UAAU,EACV,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,QAAQ,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,kBAAkB,EAAE,mBAAmB,EAAC,MAAM,WAAW,CAAC;AAClE,OAAO,EACL,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EAAC,OAAO,EAAC,MAAM,YAAY,CAAC;AACxC,OAAO,EACL,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,+BAA+B,EAC/B,aAAa,EACb,0BAA0B,EAC1B,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,aAAa,EAAC,MAAM,WAAW,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,SAAS,EACT,SAAS,EACT,yBAAyB,EACzB,eAAe,EACf,6BAA6B,EAC7B,UAAU,EACV,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAC,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,OAAO,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAC,oBAAoB,EAAC,MAAM,YAAY,CAAC;AAChD,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAE3C,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,YAAY,EACZ,uBAAuB,EACvB,6BAA6B,EAC7B,UAAU,EACV,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,QAAQ,EAAE,kBAAkB,EAAC,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,kBAAkB,EAAE,mBAAmB,EAAC,MAAM,WAAW,CAAC;AAClE,OAAO,EACL,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EAAC,OAAO,EAAC,MAAM,YAAY,CAAC;AACxC,OAAO,EACL,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,+BAA+B,EAC/B,aAAa,EACb,0BAA0B,EAC1B,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,KAAK,YAAY,EAAE,2BAA2B,EAAC,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAC,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,aAAa,EAAC,MAAM,WAAW,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,SAAS,EACT,SAAS,EACT,yBAAyB,EACzB,eAAe,EACf,6BAA6B,EAC7B,UAAU,EACV,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAC,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,OAAO,EAAE,UAAU,EAAC,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAC,oBAAoB,EAAC,MAAM,YAAY,CAAC;AAChD,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAE3C,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,qBAAqB,GAC3B,MAAM,mBAAmB,CAAC"}
package/lib/index.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.writeMarkdownHeadingId = exports.parseMarkdownFile = exports.parseMarkdownContentTitle = exports.DEFAULT_PARSE_FRONT_MATTER = exports.createExcerpt = exports.admonitionTitleToDirectiveLabel = exports.unwrapMdxCodeBlocks = exports.escapeMarkdownHeadingIds = exports.parseMarkdownHeadingId = exports.getTagVisibility = exports.groupTaggedItems = exports.normalizeFrontMatterTags = exports.buildSshUrl = exports.buildHttpsUrl = exports.hasSSHProtocol = exports.serializeURLPath = exports.parseURLPath = exports.resolvePathname = exports.isValidPathname = exports.encodePath = exports.fileToPath = exports.getEditUrl = exports.normalizeUrl = exports.findAsyncSequential = exports.mapAsyncSequential = exports.localizePath = exports.getPluginI18nPath = exports.updateTranslationFileMessages = exports.mergeTranslations = exports.GitNotFoundError = exports.FileNotTrackedError = exports.getFileCommitDate = exports.readOutputHTMLFile = exports.generate = exports.WEBPACK_URL_LOADER_LIMIT = exports.DEFAULT_PLUGIN_ID = exports.DEFAULT_PORT = exports.CODE_TRANSLATIONS_FILE_NAME = exports.DEFAULT_I18N_DIR_NAME = exports.THEME_PATH = exports.OUTPUT_STATIC_ASSETS_DIR_NAME = exports.DEFAULT_STATIC_DIR_NAME = exports.SRC_DIR_NAME = exports.GENERATED_FILES_DIR_NAME = exports.BABEL_CONFIG_FILE_NAME = exports.DEFAULT_CONFIG_FILE_NAME = exports.DEFAULT_BUILD_DIR_NAME = exports.DOCUSAURUS_VERSION = exports.NODE_MINOR_VERSION = exports.NODE_MAJOR_VERSION = void 0;
10
- exports.LAST_UPDATE_FALLBACK = exports.readLastUpdateData = exports.getLastUpdate = exports.getGitLastUpdate = exports.flattenRoutes = exports.askPreferredLanguage = exports.escapeRegexp = exports.isUnlisted = exports.isDraft = exports.getFolderContainingFile = exports.findFolderContainingFile = exports.getContentPathList = exports.getDataFileData = exports.getDataFilePath = exports.loadFreshModule = exports.escapeShellArg = exports.getWebpackLoaderCompilerName = exports.getFileLoaderUtils = exports.createAbsoluteFilePathMatcher = exports.createMatcher = exports.GlobExcludeDefault = exports.Globby = exports.docuHash = exports.simpleHash = exports.md5Hash = exports.addTrailingPathSeparator = exports.escapePath = exports.aliasedSitePathToRelativePath = exports.aliasedSitePath = exports.toMessageRelativeFilePath = exports.posixPath = exports.shortName = exports.isNameTooLong = exports.createSlugger = exports.replaceMarkdownLinks = void 0;
9
+ exports.DEFAULT_PARSE_FRONT_MATTER = exports.createExcerpt = exports.admonitionTitleToDirectiveLabel = exports.unwrapMdxCodeBlocks = exports.escapeMarkdownHeadingIds = exports.parseMarkdownHeadingId = exports.getTagVisibility = exports.groupTaggedItems = exports.normalizeFrontMatterTags = exports.buildSshUrl = exports.buildHttpsUrl = exports.hasSSHProtocol = exports.serializeURLPath = exports.toURLPath = exports.parseURLOrPath = exports.parseLocalURLPath = exports.parseURLPath = exports.resolvePathname = exports.isValidPathname = exports.encodePath = exports.fileToPath = exports.getEditUrl = exports.normalizeUrl = exports.findAsyncSequential = exports.mapAsyncSequential = exports.localizePath = exports.getPluginI18nPath = exports.updateTranslationFileMessages = exports.mergeTranslations = exports.GitNotFoundError = exports.FileNotTrackedError = exports.getFileCommitDate = exports.readOutputHTMLFile = exports.generate = exports.WEBPACK_URL_LOADER_LIMIT = exports.DEFAULT_PLUGIN_ID = exports.DEFAULT_PORT = exports.CODE_TRANSLATIONS_FILE_NAME = exports.DEFAULT_I18N_DIR_NAME = exports.THEME_PATH = exports.OUTPUT_STATIC_ASSETS_DIR_NAME = exports.DEFAULT_STATIC_DIR_NAME = exports.SRC_DIR_NAME = exports.GENERATED_FILES_DIR_NAME = exports.BABEL_CONFIG_FILE_NAME = exports.DEFAULT_CONFIG_FILE_NAME = exports.DEFAULT_BUILD_DIR_NAME = exports.DOCUSAURUS_VERSION = exports.NODE_MINOR_VERSION = exports.NODE_MAJOR_VERSION = void 0;
10
+ exports.LAST_UPDATE_FALLBACK = exports.readLastUpdateData = exports.getLastUpdate = exports.getGitLastUpdate = exports.flattenRoutes = exports.askPreferredLanguage = exports.escapeRegexp = exports.isUnlisted = exports.isDraft = exports.getFolderContainingFile = exports.findFolderContainingFile = exports.getContentPathList = exports.getDataFileData = exports.getDataFilePath = exports.loadFreshModule = exports.escapeShellArg = exports.getWebpackLoaderCompilerName = exports.getFileLoaderUtils = exports.createAbsoluteFilePathMatcher = exports.createMatcher = exports.GlobExcludeDefault = exports.Globby = exports.docuHash = exports.simpleHash = exports.md5Hash = exports.addTrailingPathSeparator = exports.escapePath = exports.aliasedSitePathToRelativePath = exports.aliasedSitePath = exports.toMessageRelativeFilePath = exports.posixPath = exports.shortName = exports.isNameTooLong = exports.createSlugger = exports.resolveMarkdownLinkPathname = exports.writeMarkdownHeadingId = exports.parseMarkdownFile = exports.parseMarkdownContentTitle = void 0;
11
11
  var constants_1 = require("./constants");
12
12
  Object.defineProperty(exports, "NODE_MAJOR_VERSION", { enumerable: true, get: function () { return constants_1.NODE_MAJOR_VERSION; } });
13
13
  Object.defineProperty(exports, "NODE_MINOR_VERSION", { enumerable: true, get: function () { return constants_1.NODE_MINOR_VERSION; } });
@@ -48,6 +48,9 @@ Object.defineProperty(exports, "encodePath", { enumerable: true, get: function (
48
48
  Object.defineProperty(exports, "isValidPathname", { enumerable: true, get: function () { return urlUtils_1.isValidPathname; } });
49
49
  Object.defineProperty(exports, "resolvePathname", { enumerable: true, get: function () { return urlUtils_1.resolvePathname; } });
50
50
  Object.defineProperty(exports, "parseURLPath", { enumerable: true, get: function () { return urlUtils_1.parseURLPath; } });
51
+ Object.defineProperty(exports, "parseLocalURLPath", { enumerable: true, get: function () { return urlUtils_1.parseLocalURLPath; } });
52
+ Object.defineProperty(exports, "parseURLOrPath", { enumerable: true, get: function () { return urlUtils_1.parseURLOrPath; } });
53
+ Object.defineProperty(exports, "toURLPath", { enumerable: true, get: function () { return urlUtils_1.toURLPath; } });
51
54
  Object.defineProperty(exports, "serializeURLPath", { enumerable: true, get: function () { return urlUtils_1.serializeURLPath; } });
52
55
  Object.defineProperty(exports, "hasSSHProtocol", { enumerable: true, get: function () { return urlUtils_1.hasSSHProtocol; } });
53
56
  Object.defineProperty(exports, "buildHttpsUrl", { enumerable: true, get: function () { return urlUtils_1.buildHttpsUrl; } });
@@ -67,7 +70,7 @@ Object.defineProperty(exports, "parseMarkdownContentTitle", { enumerable: true,
67
70
  Object.defineProperty(exports, "parseMarkdownFile", { enumerable: true, get: function () { return markdownUtils_1.parseMarkdownFile; } });
68
71
  Object.defineProperty(exports, "writeMarkdownHeadingId", { enumerable: true, get: function () { return markdownUtils_1.writeMarkdownHeadingId; } });
69
72
  var markdownLinks_1 = require("./markdownLinks");
70
- Object.defineProperty(exports, "replaceMarkdownLinks", { enumerable: true, get: function () { return markdownLinks_1.replaceMarkdownLinks; } });
73
+ Object.defineProperty(exports, "resolveMarkdownLinkPathname", { enumerable: true, get: function () { return markdownLinks_1.resolveMarkdownLinkPathname; } });
71
74
  var slugger_1 = require("./slugger");
72
75
  Object.defineProperty(exports, "createSlugger", { enumerable: true, get: function () { return slugger_1.createSlugger; } });
73
76
  var pathUtils_1 = require("./pathUtils");
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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"}
@@ -33,39 +33,12 @@ export type BrokenMarkdownLink<T extends ContentPaths> = {
33
33
  */
34
34
  link: string;
35
35
  };
36
- /**
37
- * Takes a Markdown file and replaces relative file references with their URL
38
- * counterparts, e.g. `[link](./intro.md)` => `[link](/docs/intro)`, preserving
39
- * everything else.
40
- *
41
- * This method uses best effort to find a matching file. The file reference can
42
- * be relative to the directory of the current file (most likely) or any of the
43
- * content paths (so `/tutorials/intro.md` can be resolved as
44
- * `<siteDir>/docs/tutorials/intro.md`). Links that contain the `http(s):` or
45
- * `@site/` prefix will always be ignored.
46
- */
47
- export declare function replaceMarkdownLinks<T extends ContentPaths>({ siteDir, fileString, filePath, contentPaths, sourceToPermalink, }: {
48
- /** Absolute path to the site directory, used to resolve aliased paths. */
49
- siteDir: string;
50
- /** The Markdown file content to be processed. */
51
- fileString: string;
52
- /** Absolute path to the current file containing `fileString`. */
53
- filePath: string;
54
- /** The content paths which the file reference may live in. */
55
- contentPaths: T;
56
- /**
57
- * A map from source paths to their URLs. Source paths are `@site` aliased.
58
- */
36
+ export declare function resolveMarkdownLinkPathname(linkPathname: string, context: {
37
+ sourceFilePath: string;
59
38
  sourceToPermalink: {
60
- [aliasedPath: string]: string;
39
+ [aliasedFilePath: string]: string;
61
40
  };
62
- }): {
63
- /**
64
- * The content with all Markdown file references replaced with their URLs.
65
- * Unresolved links are left as-is.
66
- */
67
- newContent: string;
68
- /** The list of broken links, */
69
- brokenMarkdownLinks: BrokenMarkdownLink<T>[];
70
- };
41
+ contentPaths: ContentPaths;
42
+ siteDir: string;
43
+ }): string | null;
71
44
  //# sourceMappingURL=markdownLinks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdownLinks.d.ts","sourceRoot":"","sources":["../src/markdownLinks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,YAAY,IAAI;IACvD,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,YAAY,EAAE,CAAC,CAAC;IAChB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAoBF;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,YAAY,EAAE,EAC3D,OAAO,EACP,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,iBAAiB,GAClB,EAAE;IACD,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,YAAY,EAAE,CAAC,CAAC;IAChB;;OAEG;IACH,iBAAiB,EAAE;QAAC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAC;CACpD,GAAG;IACF;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;CAC9C,CAmGA"}
1
+ {"version":3,"file":"markdownLinks.d.ts","sourceRoot":"","sources":["../src/markdownLinks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,YAAY,IAAI;IACvD,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,YAAY,EAAE,CAAC,CAAC;IAChB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAKF,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE;IACP,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE;QAAC,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAC;IACvD,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,MAAM,GAAG,IAAI,CAoBf"}
@@ -6,114 +6,32 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.replaceMarkdownLinks = void 0;
9
+ exports.resolveMarkdownLinkPathname = void 0;
10
10
  const tslib_1 = require("tslib");
11
11
  const path_1 = tslib_1.__importDefault(require("path"));
12
12
  const dataFileUtils_1 = require("./dataFileUtils");
13
13
  const pathUtils_1 = require("./pathUtils");
14
- function parseCodeFence(line) {
15
- const match = line.trim().match(/^(?<fence>`{3,}|~{3,})(?<rest>.*)/);
16
- if (!match) {
17
- return null;
14
+ // Note this is historical logic extracted during a 2024 refactor
15
+ // The algo has been kept exactly as before for retro compatibility
16
+ // See also https://github.com/facebook/docusaurus/pull/10168
17
+ function resolveMarkdownLinkPathname(linkPathname, context) {
18
+ const { sourceFilePath, sourceToPermalink, contentPaths, siteDir } = context;
19
+ const sourceDirsToTry = [];
20
+ // ./file.md and ../file.md are always relative to the current file
21
+ if (!linkPathname.startsWith('./') && !linkPathname.startsWith('../')) {
22
+ sourceDirsToTry.push(...(0, dataFileUtils_1.getContentPathList)(contentPaths), siteDir);
18
23
  }
19
- return {
20
- type: match.groups.fence[0],
21
- definitelyOpen: !!match.groups.rest,
22
- count: match.groups.fence.length,
23
- };
24
- }
25
- /**
26
- * Takes a Markdown file and replaces relative file references with their URL
27
- * counterparts, e.g. `[link](./intro.md)` => `[link](/docs/intro)`, preserving
28
- * everything else.
29
- *
30
- * This method uses best effort to find a matching file. The file reference can
31
- * be relative to the directory of the current file (most likely) or any of the
32
- * content paths (so `/tutorials/intro.md` can be resolved as
33
- * `<siteDir>/docs/tutorials/intro.md`). Links that contain the `http(s):` or
34
- * `@site/` prefix will always be ignored.
35
- */
36
- function replaceMarkdownLinks({ siteDir, fileString, filePath, contentPaths, sourceToPermalink, }) {
37
- const brokenMarkdownLinks = [];
38
- // Replace internal markdown linking (except in fenced blocks).
39
- let lastOpenCodeFence = null;
40
- const lines = fileString.split('\n').map((line) => {
41
- const codeFence = parseCodeFence(line);
42
- if (codeFence) {
43
- if (!lastOpenCodeFence) {
44
- lastOpenCodeFence = codeFence;
45
- }
46
- else if (!codeFence.definitelyOpen &&
47
- lastOpenCodeFence.type === codeFence.type &&
48
- lastOpenCodeFence.count <= codeFence.count) {
49
- // All three conditions must be met in order for this to be considered
50
- // a closing fence.
51
- lastOpenCodeFence = null;
52
- }
53
- }
54
- if (lastOpenCodeFence) {
55
- return line;
56
- }
57
- let modifiedLine = line;
58
- // Replace inline-style links or reference-style links e.g:
59
- // This is [Document 1](doc1.md)
60
- // [doc1]: doc1.md
61
- const linkTitlePattern = '(?:\\s+(?:\'.*?\'|".*?"|\\(.*?\\)))?';
62
- const linkSuffixPattern = '(?:\\?[^#>\\s]+)?(?:#[^>\\s]+)?';
63
- const linkCapture = (forbidden) => `((?!https?://|@site/)[^${forbidden}#?]+)`;
64
- const linkURLPattern = `(?:(?!<)${linkCapture('()\\s')}${linkSuffixPattern}|<${linkCapture('>')}${linkSuffixPattern}>)`;
65
- const linkPattern = new RegExp(`\\[(?:(?!\\]\\().)*\\]\\(\\s*${linkURLPattern}${linkTitlePattern}\\s*\\)|^\\s*\\[[^[\\]]*[^[\\]\\s][^[\\]]*\\]:\\s*${linkURLPattern}${linkTitlePattern}$`, 'dgm');
66
- let mdMatch = linkPattern.exec(modifiedLine);
67
- while (mdMatch !== null) {
68
- // Replace it to correct html link.
69
- const mdLink = mdMatch.slice(1, 5).find(Boolean);
70
- const mdLinkRange = mdMatch.indices.slice(1, 5).find(Boolean);
71
- if (!/\.mdx?$/.test(mdLink)) {
72
- mdMatch = linkPattern.exec(modifiedLine);
73
- continue;
74
- }
75
- const sourcesToTry = [];
76
- // ./file.md and ../file.md are always relative to the current file
77
- if (!mdLink.startsWith('./') && !mdLink.startsWith('../')) {
78
- sourcesToTry.push(...(0, dataFileUtils_1.getContentPathList)(contentPaths), siteDir);
79
- }
80
- // /file.md is always relative to the content path
81
- if (!mdLink.startsWith('/')) {
82
- sourcesToTry.push(path_1.default.dirname(filePath));
83
- }
84
- const aliasedSourceMatch = sourcesToTry
85
- .map((p) => path_1.default.join(p, decodeURIComponent(mdLink)))
86
- .map((source) => (0, pathUtils_1.aliasedSitePath)(source, siteDir))
87
- .find((source) => sourceToPermalink[source]);
88
- const permalink = aliasedSourceMatch
89
- ? sourceToPermalink[aliasedSourceMatch]
90
- : undefined;
91
- if (permalink) {
92
- // MDX won't be happy if the permalink contains a space, we need to
93
- // convert it to %20
94
- const encodedPermalink = permalink
95
- .split('/')
96
- .map((part) => part.replace(/\s/g, '%20'))
97
- .join('/');
98
- modifiedLine = `${modifiedLine.slice(0, mdLinkRange[0])}${encodedPermalink}${modifiedLine.slice(mdLinkRange[1])}`;
99
- // Adjust the lastIndex to avoid passing over the next link if the
100
- // newly replaced URL is shorter.
101
- linkPattern.lastIndex += encodedPermalink.length - mdLink.length;
102
- }
103
- else {
104
- const brokenMarkdownLink = {
105
- contentPaths,
106
- filePath,
107
- link: mdLink,
108
- };
109
- brokenMarkdownLinks.push(brokenMarkdownLink);
110
- }
111
- mdMatch = linkPattern.exec(modifiedLine);
112
- }
113
- return modifiedLine;
114
- });
115
- const newContent = lines.join('\n');
116
- return { newContent, brokenMarkdownLinks };
24
+ // /file.md is never relative to the source file path
25
+ if (!linkPathname.startsWith('/')) {
26
+ sourceDirsToTry.push(path_1.default.dirname(sourceFilePath));
27
+ }
28
+ const aliasedSourceMatch = sourceDirsToTry
29
+ .map((sourceDir) => path_1.default.join(sourceDir, decodeURIComponent(linkPathname)))
30
+ .map((source) => (0, pathUtils_1.aliasedSitePath)(source, siteDir))
31
+ .find((source) => sourceToPermalink[source]);
32
+ return aliasedSourceMatch
33
+ ? sourceToPermalink[aliasedSourceMatch] ?? null
34
+ : null;
117
35
  }
118
- exports.replaceMarkdownLinks = replaceMarkdownLinks;
36
+ exports.resolveMarkdownLinkPathname = resolveMarkdownLinkPathname;
119
37
  //# sourceMappingURL=markdownLinks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdownLinks.js","sourceRoot":"","sources":["../src/markdownLinks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdownLinks.js","sourceRoot":"","sources":["../src/markdownLinks.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,wDAAwB;AACxB,mDAAmD;AACnD,2CAA4C;AAiC5C,iEAAiE;AACjE,mEAAmE;AACnE,6DAA6D;AAC7D,SAAgB,2BAA2B,CACzC,YAAoB,EACpB,OAKC;IAED,MAAM,EAAC,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,EAAC,GAAG,OAAO,CAAC;IAC3E,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,mEAAmE;IACnE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,eAAe,CAAC,IAAI,CAAC,GAAG,IAAA,kCAAkB,EAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IACD,qDAAqD;IACrD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,eAAe,CAAC,IAAI,CAAC,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,kBAAkB,GAAG,eAAe;SACvC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;SAC1E,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,2BAAe,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACjD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/C,OAAO,kBAAkB;QACvB,CAAC,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,IAAI;QAC/C,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AA5BD,kEA4BC"}
package/lib/urlUtils.d.ts CHANGED
@@ -41,12 +41,26 @@ export declare function encodePath(userPath: string): string;
41
41
  * special characters.
42
42
  */
43
43
  export declare function isValidPathname(str: string): boolean;
44
+ export declare function parseURLOrPath(url: string, base?: string | URL): URL;
44
45
  export type URLPath = {
45
46
  pathname: string;
46
47
  search?: string;
47
48
  hash?: string;
48
49
  };
50
+ export declare function toURLPath(url: URL): URLPath;
51
+ /**
52
+ * Let's name the concept of (pathname + search + hash) as URLPath
53
+ * See also https://twitter.com/kettanaito/status/1741768992866308120
54
+ * Note: this function also resolves relative pathnames while parsing!
55
+ */
49
56
  export declare function parseURLPath(urlPath: string, fromPath?: string): URLPath;
57
+ /**
58
+ * This returns results for strings like "foo", "../foo", "./foo.mdx?qs#hash"
59
+ * Unlike "parseURLPath()" above, this will not resolve the pathnames
60
+ * Te returned pathname of "../../foo.mdx" will be "../../foo.mdx", not "/foo"
61
+ * This returns null if the url is not "local" (contains domain/protocol etc)
62
+ */
63
+ export declare function parseLocalURLPath(urlPath: string): URLPath | null;
50
64
  export declare function serializeURLPath(urlPath: URLPath): string;
51
65
  /**
52
66
  * Resolve pathnames and fail-fast if resolution fails. Uses standard URL
@@ -1 +1 @@
1
- {"version":3,"file":"urlUtils.d.ts","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAoFtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAKpB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUpD;AAED,MAAM,MAAM,OAAO,GAAG;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC;AAKzE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CA2CxE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAIzD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,gEAAgE;AAChE,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAKR;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAC3B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAKR;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAU7D"}
1
+ {"version":3,"file":"urlUtils.d.ts","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAoFtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAKpB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUpD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,CAWpE;AAED,MAAM,MAAM,OAAO,GAAG;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC;AAEzE,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CA4B3C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAIxE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAwCjE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAIzD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,gEAAgE;AAChE,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAKR;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAC3B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAKR;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAU7D"}
package/lib/urlUtils.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.hasSSHProtocol = exports.buildHttpsUrl = exports.buildSshUrl = exports.resolvePathname = exports.serializeURLPath = exports.parseURLPath = exports.isValidPathname = exports.encodePath = exports.fileToPath = exports.getEditUrl = exports.normalizeUrl = void 0;
9
+ exports.hasSSHProtocol = exports.buildHttpsUrl = exports.buildSshUrl = exports.resolvePathname = exports.serializeURLPath = exports.parseLocalURLPath = exports.parseURLPath = exports.toURLPath = exports.parseURLOrPath = exports.isValidPathname = exports.encodePath = exports.fileToPath = exports.getEditUrl = exports.normalizeUrl = void 0;
10
10
  const tslib_1 = require("tslib");
11
11
  const resolve_pathname_1 = tslib_1.__importDefault(require("resolve-pathname"));
12
12
  /**
@@ -144,21 +144,18 @@ function isValidPathname(str) {
144
144
  }
145
145
  }
146
146
  exports.isValidPathname = isValidPathname;
147
- // Let's name the concept of (pathname + search + hash) as URLPath
148
- // See also https://twitter.com/kettanaito/status/1741768992866308120
149
- // Note: this function also resolves relative pathnames while parsing!
150
- function parseURLPath(urlPath, fromPath) {
151
- function parseURL(url, base) {
152
- try {
153
- // A possible alternative? https://github.com/unjs/ufo#url
154
- return new URL(url, base ?? 'https://example.com');
155
- }
156
- catch (e) {
157
- throw new Error(`Can't parse URL ${url}${base ? ` with base ${base}` : ''}`, { cause: e });
158
- }
147
+ function parseURLOrPath(url, base) {
148
+ try {
149
+ // TODO when Node supports it, use URL.parse could be faster?
150
+ // see https://kilianvalkhof.com/2024/javascript/the-problem-with-new-url-and-how-url-parse-fixes-that/
151
+ return new URL(url, base ?? 'https://example.com');
152
+ }
153
+ catch (e) {
154
+ throw new Error(`Can't parse URL ${url}${base ? ` with base ${base}` : ''}`, { cause: e });
159
155
  }
160
- const base = fromPath ? parseURL(fromPath) : undefined;
161
- const url = parseURL(urlPath, base);
156
+ }
157
+ exports.parseURLOrPath = parseURLOrPath;
158
+ function toURLPath(url) {
162
159
  const { pathname } = url;
163
160
  // Fixes annoying url.search behavior
164
161
  // "" => undefined
@@ -166,16 +163,16 @@ function parseURLPath(urlPath, fromPath) {
166
163
  // "?param => "param"
167
164
  const search = url.search
168
165
  ? url.search.slice(1)
169
- : urlPath.includes('?')
166
+ : url.href.includes('?')
170
167
  ? ''
171
168
  : undefined;
172
169
  // Fixes annoying url.hash behavior
173
170
  // "" => undefined
174
171
  // "#" => ""
175
- // "?param => "param"
172
+ // "#param => "param"
176
173
  const hash = url.hash
177
174
  ? url.hash.slice(1)
178
- : urlPath.includes('#')
175
+ : url.href.includes('#')
179
176
  ? ''
180
177
  : undefined;
181
178
  return {
@@ -184,7 +181,57 @@ function parseURLPath(urlPath, fromPath) {
184
181
  hash,
185
182
  };
186
183
  }
184
+ exports.toURLPath = toURLPath;
185
+ /**
186
+ * Let's name the concept of (pathname + search + hash) as URLPath
187
+ * See also https://twitter.com/kettanaito/status/1741768992866308120
188
+ * Note: this function also resolves relative pathnames while parsing!
189
+ */
190
+ function parseURLPath(urlPath, fromPath) {
191
+ const base = fromPath ? parseURLOrPath(fromPath) : undefined;
192
+ const url = parseURLOrPath(urlPath, base);
193
+ return toURLPath(url);
194
+ }
187
195
  exports.parseURLPath = parseURLPath;
196
+ /**
197
+ * This returns results for strings like "foo", "../foo", "./foo.mdx?qs#hash"
198
+ * Unlike "parseURLPath()" above, this will not resolve the pathnames
199
+ * Te returned pathname of "../../foo.mdx" will be "../../foo.mdx", not "/foo"
200
+ * This returns null if the url is not "local" (contains domain/protocol etc)
201
+ */
202
+ function parseLocalURLPath(urlPath) {
203
+ // Workaround because URL("") requires a protocol
204
+ const unspecifiedProtocol = 'unspecified:';
205
+ const url = parseURLOrPath(urlPath, `${unspecifiedProtocol}//`);
206
+ // Ignore links with specified protocol / host
207
+ // (usually fully qualified links starting with https://)
208
+ if (url.protocol !== unspecifiedProtocol ||
209
+ url.host !== '' ||
210
+ url.username !== '' ||
211
+ url.password !== '') {
212
+ return null;
213
+ }
214
+ // We can't use "new URL()" result because it always tries to resolve urls
215
+ // IE it will remove any "./" or "../" in the pathname, which we don't want
216
+ // We have to parse it manually...
217
+ let localUrlPath = urlPath;
218
+ // Extract and remove the #hash part
219
+ const hashIndex = localUrlPath.indexOf('#');
220
+ const hash = hashIndex !== -1 ? localUrlPath.substring(hashIndex + 1) : undefined;
221
+ localUrlPath =
222
+ hashIndex !== -1 ? localUrlPath.substring(0, hashIndex) : localUrlPath;
223
+ // Extract and remove ?search part
224
+ const searchIndex = localUrlPath.indexOf('?');
225
+ const search = searchIndex !== -1 ? localUrlPath.substring(searchIndex + 1) : undefined;
226
+ localUrlPath =
227
+ searchIndex !== -1 ? localUrlPath.substring(0, searchIndex) : localUrlPath;
228
+ return {
229
+ pathname: localUrlPath,
230
+ search,
231
+ hash,
232
+ };
233
+ }
234
+ exports.parseLocalURLPath = parseLocalURLPath;
188
235
  function serializeURLPath(urlPath) {
189
236
  const search = urlPath.search === undefined ? '' : `?${urlPath.search}`;
190
237
  const hash = urlPath.hash === undefined ? '' : `#${urlPath.hash}`;
@@ -1 +1 @@
1
- {"version":3,"file":"urlUtils.js","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,gFAAqD;AAErD;;;;;;;;;;;GAWG;AACH,SAAgB,YAAY,CAAC,OAAiB;IAC5C,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC1B,MAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,MAAM,eAAe,GAAG,CAAC,GAAa,EAAgC,EAAE,CACtE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,2EAA2E;IAC3E,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAG,CAAC;QAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,wEAAwE;YACxE,8BAA8B;YAC9B,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,gCAAgC;IAChC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;IAEnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,SAAS,CAAC,kCAAkC,OAAO,SAAS,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC5C,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACV,kEAAkE;gBAClE,SAAS,GAAG,SAAS,CAAC,OAAO,CAC3B,MAAM;gBACN,2DAA2D;gBAC3D,2BAA2B;gBAC3B,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC1D,CAAC;YACJ,CAAC;YAED,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,uEAAuE;YACvE,mEAAmE;YACnE,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,gBAAgB,GAAG,IAAI,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,8EAA8E;IAC9E,6BAA6B;IAE7B,mDAAmD;IACnD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;IAErD,kCAAkC;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,GAAG,GAAG,KAAK,CAAC,KAAK,EAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEvE,wEAAwE;IACxE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;IAEtD,uDAAuD;IACvD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEhC,OAAO,GAAG,CAAC;AACb,CAAC;AApFD,oCAoFC;AAED;;;;GAIG;AACH,SAAgB,UAAU,CACxB,gBAAwB,EACxB,OAAgB;IAEhB,OAAO,OAAO;QACZ,CAAC,CAAC,sEAAsE;YACtE,YAAY,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AARD,gCAQC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,+CAA+C,CAAC;IAChE,MAAM,KAAK,GAAG,uBAAuB,CAAC;IAEtC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;AAC3D,CAAC;AARD,gCAQC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACzC,OAAO,QAAQ;SACZ,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;SACvC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AALD,gCAKC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC;QACnE,OAAO,cAAc,KAAK,GAAG,IAAI,cAAc,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAVD,0CAUC;AAID,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,SAAgB,YAAY,CAAC,OAAe,EAAE,QAAiB;IAC7D,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAmB;QAChD,IAAI,CAAC;YACH,0DAA0D;YAC1D,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,IAAI,qBAAqB,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,mBAAmB,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAC3D,EAAC,KAAK,EAAE,CAAC,EAAC,CACX,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEpC,MAAM,EAAC,QAAQ,EAAC,GAAG,GAAG,CAAC;IAEvB,qCAAqC;IACrC,kBAAkB;IAClB,YAAY;IACZ,qBAAqB;IACrB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM;QACvB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,CAAC;IAEd,mCAAmC;IACnC,kBAAkB;IAClB,YAAY;IACZ,qBAAqB;IACrB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI;QACnB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,QAAQ;QACR,MAAM;QACN,IAAI;KACL,CAAC;AACJ,CAAC;AA3CD,oCA2CC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAClE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC;AAC/C,CAAC;AAJD,4CAIC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,EAAU,EAAE,IAAa;IACvD,uDAAuD;IACvD,qEAAqE;IACrE,OAAO,IAAA,0BAAqB,EAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAJD,0CAIC;AAED,gEAAgE;AAChE,SAAgB,WAAW,CACzB,UAAkB,EAClB,gBAAwB,EACxB,WAAmB,EACnB,UAAmB;IAEnB,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,aAAa,UAAU,IAAI,UAAU,IAAI,gBAAgB,IAAI,WAAW,MAAM,CAAC;IACxF,CAAC;IACD,OAAO,OAAO,UAAU,IAAI,gBAAgB,IAAI,WAAW,MAAM,CAAC;AACpE,CAAC;AAVD,kCAUC;AAED,iEAAiE;AACjE,SAAgB,aAAa,CAC3B,cAAsB,EACtB,UAAkB,EAClB,gBAAwB,EACxB,WAAmB,EACnB,UAAmB;IAEnB,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,WAAW,cAAc,IAAI,UAAU,IAAI,UAAU,IAAI,gBAAgB,IAAI,WAAW,MAAM,CAAC;IACxG,CAAC;IACD,OAAO,WAAW,cAAc,IAAI,UAAU,IAAI,gBAAgB,IAAI,WAAW,MAAM,CAAC;AAC1F,CAAC;AAXD,sCAWC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,aAAqB;IAClD,IAAI,CAAC;QACH,IAAI,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;QACpC,OAAO,+BAA+B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAVD,wCAUC"}
1
+ {"version":3,"file":"urlUtils.js","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docusaurus/utils",
3
- "version": "0.0.0-5956",
3
+ "version": "0.0.0-5957",
4
4
  "description": "Node utility functions for Docusaurus packages.",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -18,8 +18,8 @@
18
18
  },
19
19
  "license": "MIT",
20
20
  "dependencies": {
21
- "@docusaurus/logger": "0.0.0-5956",
22
- "@docusaurus/utils-common": "0.0.0-5956",
21
+ "@docusaurus/logger": "0.0.0-5957",
22
+ "@docusaurus/utils-common": "0.0.0-5957",
23
23
  "@svgr/webpack": "^8.1.0",
24
24
  "escape-string-regexp": "^4.0.0",
25
25
  "file-loader": "^6.2.0",
@@ -42,7 +42,7 @@
42
42
  "node": ">=18.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@docusaurus/types": "0.0.0-5956",
45
+ "@docusaurus/types": "0.0.0-5957",
46
46
  "@types/dedent": "^0.7.0",
47
47
  "@types/github-slugger": "^1.3.0",
48
48
  "@types/micromatch": "^4.0.2",
@@ -58,5 +58,5 @@
58
58
  "optional": true
59
59
  }
60
60
  },
61
- "gitHead": "9d56d3ae55b9d718ecc50f61719c02872478bf52"
61
+ "gitHead": "edb3a453b0b3a853eadfc4e9ec44d47ea76d5002"
62
62
  }
package/src/index.ts CHANGED
@@ -44,6 +44,9 @@ export {
44
44
  isValidPathname,
45
45
  resolvePathname,
46
46
  parseURLPath,
47
+ parseLocalURLPath,
48
+ parseURLOrPath,
49
+ toURLPath,
47
50
  serializeURLPath,
48
51
  hasSSHProtocol,
49
52
  buildHttpsUrl,
@@ -71,11 +74,7 @@ export {
71
74
  writeMarkdownHeadingId,
72
75
  type WriteHeadingIDOptions,
73
76
  } from './markdownUtils';
74
- export {
75
- type ContentPaths,
76
- type BrokenMarkdownLink,
77
- replaceMarkdownLinks,
78
- } from './markdownLinks';
77
+ export {type ContentPaths, resolveMarkdownLinkPathname} from './markdownLinks';
79
78
  export {type SluggerOptions, type Slugger, createSlugger} from './slugger';
80
79
  export {
81
80
  isNameTooLong,
@@ -40,159 +40,35 @@ export type BrokenMarkdownLink<T extends ContentPaths> = {
40
40
  link: string;
41
41
  };
42
42
 
43
- type CodeFence = {
44
- type: '`' | '~';
45
- definitelyOpen: boolean;
46
- count: number;
47
- };
48
-
49
- function parseCodeFence(line: string): CodeFence | null {
50
- const match = line.trim().match(/^(?<fence>`{3,}|~{3,})(?<rest>.*)/);
51
- if (!match) {
52
- return null;
43
+ // Note this is historical logic extracted during a 2024 refactor
44
+ // The algo has been kept exactly as before for retro compatibility
45
+ // See also https://github.com/facebook/docusaurus/pull/10168
46
+ export function resolveMarkdownLinkPathname(
47
+ linkPathname: string,
48
+ context: {
49
+ sourceFilePath: string;
50
+ sourceToPermalink: {[aliasedFilePath: string]: string};
51
+ contentPaths: ContentPaths;
52
+ siteDir: string;
53
+ },
54
+ ): string | null {
55
+ const {sourceFilePath, sourceToPermalink, contentPaths, siteDir} = context;
56
+ const sourceDirsToTry: string[] = [];
57
+ // ./file.md and ../file.md are always relative to the current file
58
+ if (!linkPathname.startsWith('./') && !linkPathname.startsWith('../')) {
59
+ sourceDirsToTry.push(...getContentPathList(contentPaths), siteDir);
60
+ }
61
+ // /file.md is never relative to the source file path
62
+ if (!linkPathname.startsWith('/')) {
63
+ sourceDirsToTry.push(path.dirname(sourceFilePath));
53
64
  }
54
- return {
55
- type: match.groups!.fence![0]! as '`' | '~',
56
- definitelyOpen: !!match.groups!.rest!,
57
- count: match.groups!.fence!.length,
58
- };
59
- }
60
-
61
- /**
62
- * Takes a Markdown file and replaces relative file references with their URL
63
- * counterparts, e.g. `[link](./intro.md)` => `[link](/docs/intro)`, preserving
64
- * everything else.
65
- *
66
- * This method uses best effort to find a matching file. The file reference can
67
- * be relative to the directory of the current file (most likely) or any of the
68
- * content paths (so `/tutorials/intro.md` can be resolved as
69
- * `<siteDir>/docs/tutorials/intro.md`). Links that contain the `http(s):` or
70
- * `@site/` prefix will always be ignored.
71
- */
72
- export function replaceMarkdownLinks<T extends ContentPaths>({
73
- siteDir,
74
- fileString,
75
- filePath,
76
- contentPaths,
77
- sourceToPermalink,
78
- }: {
79
- /** Absolute path to the site directory, used to resolve aliased paths. */
80
- siteDir: string;
81
- /** The Markdown file content to be processed. */
82
- fileString: string;
83
- /** Absolute path to the current file containing `fileString`. */
84
- filePath: string;
85
- /** The content paths which the file reference may live in. */
86
- contentPaths: T;
87
- /**
88
- * A map from source paths to their URLs. Source paths are `@site` aliased.
89
- */
90
- sourceToPermalink: {[aliasedPath: string]: string};
91
- }): {
92
- /**
93
- * The content with all Markdown file references replaced with their URLs.
94
- * Unresolved links are left as-is.
95
- */
96
- newContent: string;
97
- /** The list of broken links, */
98
- brokenMarkdownLinks: BrokenMarkdownLink<T>[];
99
- } {
100
- const brokenMarkdownLinks: BrokenMarkdownLink<T>[] = [];
101
-
102
- // Replace internal markdown linking (except in fenced blocks).
103
- let lastOpenCodeFence: CodeFence | null = null;
104
- const lines = fileString.split('\n').map((line) => {
105
- const codeFence = parseCodeFence(line);
106
- if (codeFence) {
107
- if (!lastOpenCodeFence) {
108
- lastOpenCodeFence = codeFence;
109
- } else if (
110
- !codeFence.definitelyOpen &&
111
- lastOpenCodeFence.type === codeFence.type &&
112
- lastOpenCodeFence.count <= codeFence.count
113
- ) {
114
- // All three conditions must be met in order for this to be considered
115
- // a closing fence.
116
- lastOpenCodeFence = null;
117
- }
118
- }
119
- if (lastOpenCodeFence) {
120
- return line;
121
- }
122
-
123
- let modifiedLine = line;
124
- // Replace inline-style links or reference-style links e.g:
125
- // This is [Document 1](doc1.md)
126
- // [doc1]: doc1.md
127
- const linkTitlePattern = '(?:\\s+(?:\'.*?\'|".*?"|\\(.*?\\)))?';
128
- const linkSuffixPattern = '(?:\\?[^#>\\s]+)?(?:#[^>\\s]+)?';
129
- const linkCapture = (forbidden: string) =>
130
- `((?!https?://|@site/)[^${forbidden}#?]+)`;
131
- const linkURLPattern = `(?:(?!<)${linkCapture(
132
- '()\\s',
133
- )}${linkSuffixPattern}|<${linkCapture('>')}${linkSuffixPattern}>)`;
134
- const linkPattern = new RegExp(
135
- `\\[(?:(?!\\]\\().)*\\]\\(\\s*${linkURLPattern}${linkTitlePattern}\\s*\\)|^\\s*\\[[^[\\]]*[^[\\]\\s][^[\\]]*\\]:\\s*${linkURLPattern}${linkTitlePattern}$`,
136
- 'dgm',
137
- );
138
- let mdMatch = linkPattern.exec(modifiedLine);
139
- while (mdMatch !== null) {
140
- // Replace it to correct html link.
141
- const mdLink = mdMatch.slice(1, 5).find(Boolean)!;
142
- const mdLinkRange = mdMatch.indices!.slice(1, 5).find(Boolean)!;
143
- if (!/\.mdx?$/.test(mdLink)) {
144
- mdMatch = linkPattern.exec(modifiedLine);
145
- continue;
146
- }
147
-
148
- const sourcesToTry: string[] = [];
149
- // ./file.md and ../file.md are always relative to the current file
150
- if (!mdLink.startsWith('./') && !mdLink.startsWith('../')) {
151
- sourcesToTry.push(...getContentPathList(contentPaths), siteDir);
152
- }
153
- // /file.md is always relative to the content path
154
- if (!mdLink.startsWith('/')) {
155
- sourcesToTry.push(path.dirname(filePath));
156
- }
157
-
158
- const aliasedSourceMatch = sourcesToTry
159
- .map((p) => path.join(p, decodeURIComponent(mdLink)))
160
- .map((source) => aliasedSitePath(source, siteDir))
161
- .find((source) => sourceToPermalink[source]);
162
-
163
- const permalink: string | undefined = aliasedSourceMatch
164
- ? sourceToPermalink[aliasedSourceMatch]
165
- : undefined;
166
-
167
- if (permalink) {
168
- // MDX won't be happy if the permalink contains a space, we need to
169
- // convert it to %20
170
- const encodedPermalink = permalink
171
- .split('/')
172
- .map((part) => part.replace(/\s/g, '%20'))
173
- .join('/');
174
- modifiedLine = `${modifiedLine.slice(
175
- 0,
176
- mdLinkRange[0],
177
- )}${encodedPermalink}${modifiedLine.slice(mdLinkRange[1])}`;
178
- // Adjust the lastIndex to avoid passing over the next link if the
179
- // newly replaced URL is shorter.
180
- linkPattern.lastIndex += encodedPermalink.length - mdLink.length;
181
- } else {
182
- const brokenMarkdownLink: BrokenMarkdownLink<T> = {
183
- contentPaths,
184
- filePath,
185
- link: mdLink,
186
- };
187
-
188
- brokenMarkdownLinks.push(brokenMarkdownLink);
189
- }
190
- mdMatch = linkPattern.exec(modifiedLine);
191
- }
192
- return modifiedLine;
193
- });
194
65
 
195
- const newContent = lines.join('\n');
66
+ const aliasedSourceMatch = sourceDirsToTry
67
+ .map((sourceDir) => path.join(sourceDir, decodeURIComponent(linkPathname)))
68
+ .map((source) => aliasedSitePath(source, siteDir))
69
+ .find((source) => sourceToPermalink[source]);
196
70
 
197
- return {newContent, brokenMarkdownLinks};
71
+ return aliasedSourceMatch
72
+ ? sourceToPermalink[aliasedSourceMatch] ?? null
73
+ : null;
198
74
  }
package/src/urlUtils.ts CHANGED
@@ -164,27 +164,22 @@ export function isValidPathname(str: string): boolean {
164
164
  }
165
165
  }
166
166
 
167
- export type URLPath = {pathname: string; search?: string; hash?: string};
168
-
169
- // Let's name the concept of (pathname + search + hash) as URLPath
170
- // See also https://twitter.com/kettanaito/status/1741768992866308120
171
- // Note: this function also resolves relative pathnames while parsing!
172
- export function parseURLPath(urlPath: string, fromPath?: string): URLPath {
173
- function parseURL(url: string, base?: string | URL): URL {
174
- try {
175
- // A possible alternative? https://github.com/unjs/ufo#url
176
- return new URL(url, base ?? 'https://example.com');
177
- } catch (e) {
178
- throw new Error(
179
- `Can't parse URL ${url}${base ? ` with base ${base}` : ''}`,
180
- {cause: e},
181
- );
182
- }
167
+ export function parseURLOrPath(url: string, base?: string | URL): URL {
168
+ try {
169
+ // TODO when Node supports it, use URL.parse could be faster?
170
+ // see https://kilianvalkhof.com/2024/javascript/the-problem-with-new-url-and-how-url-parse-fixes-that/
171
+ return new URL(url, base ?? 'https://example.com');
172
+ } catch (e) {
173
+ throw new Error(
174
+ `Can't parse URL ${url}${base ? ` with base ${base}` : ''}`,
175
+ {cause: e},
176
+ );
183
177
  }
178
+ }
184
179
 
185
- const base = fromPath ? parseURL(fromPath) : undefined;
186
- const url = parseURL(urlPath, base);
180
+ export type URLPath = {pathname: string; search?: string; hash?: string};
187
181
 
182
+ export function toURLPath(url: URL): URLPath {
188
183
  const {pathname} = url;
189
184
 
190
185
  // Fixes annoying url.search behavior
@@ -193,17 +188,17 @@ export function parseURLPath(urlPath: string, fromPath?: string): URLPath {
193
188
  // "?param => "param"
194
189
  const search = url.search
195
190
  ? url.search.slice(1)
196
- : urlPath.includes('?')
191
+ : url.href.includes('?')
197
192
  ? ''
198
193
  : undefined;
199
194
 
200
195
  // Fixes annoying url.hash behavior
201
196
  // "" => undefined
202
197
  // "#" => ""
203
- // "?param => "param"
198
+ // "#param => "param"
204
199
  const hash = url.hash
205
200
  ? url.hash.slice(1)
206
- : urlPath.includes('#')
201
+ : url.href.includes('#')
207
202
  ? ''
208
203
  : undefined;
209
204
 
@@ -214,6 +209,65 @@ export function parseURLPath(urlPath: string, fromPath?: string): URLPath {
214
209
  };
215
210
  }
216
211
 
212
+ /**
213
+ * Let's name the concept of (pathname + search + hash) as URLPath
214
+ * See also https://twitter.com/kettanaito/status/1741768992866308120
215
+ * Note: this function also resolves relative pathnames while parsing!
216
+ */
217
+ export function parseURLPath(urlPath: string, fromPath?: string): URLPath {
218
+ const base = fromPath ? parseURLOrPath(fromPath) : undefined;
219
+ const url = parseURLOrPath(urlPath, base);
220
+ return toURLPath(url);
221
+ }
222
+
223
+ /**
224
+ * This returns results for strings like "foo", "../foo", "./foo.mdx?qs#hash"
225
+ * Unlike "parseURLPath()" above, this will not resolve the pathnames
226
+ * Te returned pathname of "../../foo.mdx" will be "../../foo.mdx", not "/foo"
227
+ * This returns null if the url is not "local" (contains domain/protocol etc)
228
+ */
229
+ export function parseLocalURLPath(urlPath: string): URLPath | null {
230
+ // Workaround because URL("") requires a protocol
231
+ const unspecifiedProtocol = 'unspecified:';
232
+
233
+ const url = parseURLOrPath(urlPath, `${unspecifiedProtocol}//`);
234
+ // Ignore links with specified protocol / host
235
+ // (usually fully qualified links starting with https://)
236
+ if (
237
+ url.protocol !== unspecifiedProtocol ||
238
+ url.host !== '' ||
239
+ url.username !== '' ||
240
+ url.password !== ''
241
+ ) {
242
+ return null;
243
+ }
244
+
245
+ // We can't use "new URL()" result because it always tries to resolve urls
246
+ // IE it will remove any "./" or "../" in the pathname, which we don't want
247
+ // We have to parse it manually...
248
+ let localUrlPath = urlPath;
249
+
250
+ // Extract and remove the #hash part
251
+ const hashIndex = localUrlPath.indexOf('#');
252
+ const hash =
253
+ hashIndex !== -1 ? localUrlPath.substring(hashIndex + 1) : undefined;
254
+ localUrlPath =
255
+ hashIndex !== -1 ? localUrlPath.substring(0, hashIndex) : localUrlPath;
256
+
257
+ // Extract and remove ?search part
258
+ const searchIndex = localUrlPath.indexOf('?');
259
+ const search =
260
+ searchIndex !== -1 ? localUrlPath.substring(searchIndex + 1) : undefined;
261
+ localUrlPath =
262
+ searchIndex !== -1 ? localUrlPath.substring(0, searchIndex) : localUrlPath;
263
+
264
+ return {
265
+ pathname: localUrlPath,
266
+ search,
267
+ hash,
268
+ };
269
+ }
270
+
217
271
  export function serializeURLPath(urlPath: URLPath): string {
218
272
  const search = urlPath.search === undefined ? '' : `?${urlPath.search}`;
219
273
  const hash = urlPath.hash === undefined ? '' : `#${urlPath.hash}`;