mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-12 16:47:26 +02:00
fix(utils): always match exclusion root dirs as complete folder paths (#7864)
* fix(utils): always match exclusion root dirs as complete folder paths * fix * fix? * fix for real
This commit is contained in:
parent
3a0e90eacd
commit
40827c6c72
5 changed files with 35 additions and 5 deletions
|
@ -113,4 +113,21 @@ describe('createAbsoluteFilePathMatcher', () => {
|
||||||
`"createAbsoluteFilePathMatcher unexpected error, absoluteFilePath=/bad/path/myDoc.md was not contained in any of the root folders: /_root/docs, /root/_docs/, /__test__/website/src"`,
|
`"createAbsoluteFilePathMatcher unexpected error, absoluteFilePath=/bad/path/myDoc.md was not contained in any of the root folders: /_root/docs, /root/_docs/, /__test__/website/src"`,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('matches paths with overlapping paths', () => {
|
||||||
|
const overlapMatcher = createAbsoluteFilePathMatcher(GlobExcludeDefault, [
|
||||||
|
'/root/docs',
|
||||||
|
'/root/versioned_docs/version-2.0.0',
|
||||||
|
'/root/versioned_docs/version-2.0.0-rc.1',
|
||||||
|
]);
|
||||||
|
expect(
|
||||||
|
overlapMatcher('/root/versioned_docs/version-2.0.0-rc.1/_partial.mdx'),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
overlapMatcher('/root/versioned_docs/version-2.0.0/_partial.mdx'),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
overlapMatcher('/root/versioned_docs/version-2.0.0/no-partial.mdx'),
|
||||||
|
).toBe(false);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import Micromatch from 'micromatch'; // Note: Micromatch is used by Globby
|
import Micromatch from 'micromatch'; // Note: Micromatch is used by Globby
|
||||||
|
import {addSuffix} from './jsUtils';
|
||||||
|
|
||||||
/** A re-export of the globby instance. */
|
/** A re-export of the globby instance. */
|
||||||
export {default as Globby} from 'globby';
|
export {default as Globby} from 'globby';
|
||||||
|
@ -68,7 +69,9 @@ export function createAbsoluteFilePathMatcher(
|
||||||
|
|
||||||
function getRelativeFilePath(absoluteFilePath: string) {
|
function getRelativeFilePath(absoluteFilePath: string) {
|
||||||
const rootFolder = rootFolders.find((folderPath) =>
|
const rootFolder = rootFolders.find((folderPath) =>
|
||||||
absoluteFilePath.startsWith(folderPath),
|
[addSuffix(folderPath, '/'), addSuffix(folderPath, '\\')].some((p) =>
|
||||||
|
absoluteFilePath.startsWith(p),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
if (!rootFolder) {
|
if (!rootFolder) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
|
|
|
@ -5,6 +5,16 @@
|
||||||
* LICENSE file in the root directory of this source tree.
|
* LICENSE file in the root directory of this source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** Adds a given string prefix to `str`. */
|
||||||
|
export function addPrefix(str: string, prefix: string): string {
|
||||||
|
return str.startsWith(prefix) ? str : `${prefix}${str}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Adds a given string suffix to `str`. */
|
||||||
|
export function addSuffix(str: string, suffix: string): string {
|
||||||
|
return str.endsWith(suffix) ? str : `${str}${suffix}`;
|
||||||
|
}
|
||||||
|
|
||||||
/** Removes a given string suffix from `str`. */
|
/** Removes a given string suffix from `str`. */
|
||||||
export function removeSuffix(str: string, suffix: string): string {
|
export function removeSuffix(str: string, suffix: string): string {
|
||||||
if (suffix === '') {
|
if (suffix === '') {
|
||||||
|
|
|
@ -119,5 +119,5 @@ export function addTrailingPathSeparator(str: string): string {
|
||||||
return str.endsWith(path.sep)
|
return str.endsWith(path.sep)
|
||||||
? str
|
? str
|
||||||
: // If this is Windows, we need to change the forward slash to backward
|
: // If this is Windows, we need to change the forward slash to backward
|
||||||
`${str.replace(/\/$/, '')}${path.sep}`;
|
`${str.replace(/[\\/]$/, '')}${path.sep}`;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import resolvePathnameUnsafe from 'resolve-pathname';
|
import resolvePathnameUnsafe from 'resolve-pathname';
|
||||||
import {removeSuffix} from './jsUtils';
|
import {addPrefix, addSuffix, removeSuffix} from './jsUtils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Much like `path.join`, but much better. Takes an array of URL segments, and
|
* Much like `path.join`, but much better. Takes an array of URL segments, and
|
||||||
|
@ -175,13 +175,13 @@ export function resolvePathname(to: string, from?: string): string {
|
||||||
}
|
}
|
||||||
/** Appends a leading slash to `str`, if one doesn't exist. */
|
/** Appends a leading slash to `str`, if one doesn't exist. */
|
||||||
export function addLeadingSlash(str: string): string {
|
export function addLeadingSlash(str: string): string {
|
||||||
return str.startsWith('/') ? str : `/${str}`;
|
return addPrefix(str, '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO deduplicate: also present in @docusaurus/utils-common
|
// TODO deduplicate: also present in @docusaurus/utils-common
|
||||||
/** Appends a trailing slash to `str`, if one doesn't exist. */
|
/** Appends a trailing slash to `str`, if one doesn't exist. */
|
||||||
export function addTrailingSlash(str: string): string {
|
export function addTrailingSlash(str: string): string {
|
||||||
return str.endsWith('/') ? str : `${str}/`;
|
return addSuffix(str, '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Removes the trailing slash from `str`. */
|
/** Removes the trailing slash from `str`. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue