patha
Version:
File paths library. All you need to work with paths. Tiny drop-in replacement for 'path'. Works in Node, Browser, and Deno.
32 lines • 2.93 kB
JavaScript
import { relative, resolve, sep } from "path";
/**
* Check if a path is inside another path.
*
* Note that relative paths are resolved against `process.cwd()` to make them absolute.
*
* This function does not check if the paths exist and it only works with strings.
*
* @example
*
* ```js
* import { isPathInside } from "patha"
*
* isPathInside("a/b/c", "a/b")
* //=> true
*
* isPathInside("a/b/c", "x/y")
* //=> false
*
* isPathInside("a/b/c", "a/b/c")
* //=> false
*
* isPathInside("/Users/some/dev/aa", "/Users/some")
* //=> true
* ```
*/
export function isPathInside(childPath, parentPath) {
// copied from is-path-inside because the package uses node:path that can't be bundled for the browser
const relation = relative(parentPath, childPath);
return Boolean(relation && relation !== ".." && !relation.startsWith(`..${sep}`) && relation !== resolve(childPath));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtcGF0aC1pbnNpZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaXMtcGF0aC1pbnNpZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRTdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFNBQWlCLEVBQUUsVUFBa0I7SUFDaEUsc0dBQXNHO0lBRXRHLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFFaEQsT0FBTyxPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxRQUFRLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7QUFDdEgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbGF0aXZlLCByZXNvbHZlLCBzZXAgfSBmcm9tIFwicGF0aFwiXG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwYXRoIGlzIGluc2lkZSBhbm90aGVyIHBhdGguXG4gKlxuICogTm90ZSB0aGF0IHJlbGF0aXZlIHBhdGhzIGFyZSByZXNvbHZlZCBhZ2FpbnN0IGBwcm9jZXNzLmN3ZCgpYCB0byBtYWtlIHRoZW0gYWJzb2x1dGUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBpZiB0aGUgcGF0aHMgZXhpc3QgYW5kIGl0IG9ubHkgd29ya3Mgd2l0aCBzdHJpbmdzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7IGlzUGF0aEluc2lkZSB9IGZyb20gXCJwYXRoYVwiXG4gKlxuICogaXNQYXRoSW5zaWRlKFwiYS9iL2NcIiwgXCJhL2JcIilcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIGlzUGF0aEluc2lkZShcImEvYi9jXCIsIFwieC95XCIpXG4gKiAvLz0+IGZhbHNlXG4gKlxuICogaXNQYXRoSW5zaWRlKFwiYS9iL2NcIiwgXCJhL2IvY1wiKVxuICogLy89PiBmYWxzZVxuICpcbiAqIGlzUGF0aEluc2lkZShcIi9Vc2Vycy9zb21lL2Rldi9hYVwiLCBcIi9Vc2Vycy9zb21lXCIpXG4gKiAvLz0+IHRydWVcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoSW5zaWRlKGNoaWxkUGF0aDogc3RyaW5nLCBwYXJlbnRQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gY29waWVkIGZyb20gaXMtcGF0aC1pbnNpZGUgYmVjYXVzZSB0aGUgcGFja2FnZSB1c2VzIG5vZGU6cGF0aCB0aGF0IGNhbid0IGJlIGJ1bmRsZWQgZm9yIHRoZSBicm93c2VyXG5cbiAgY29uc3QgcmVsYXRpb24gPSByZWxhdGl2ZShwYXJlbnRQYXRoLCBjaGlsZFBhdGgpXG5cbiAgcmV0dXJuIEJvb2xlYW4ocmVsYXRpb24gJiYgcmVsYXRpb24gIT09IFwiLi5cIiAmJiAhcmVsYXRpb24uc3RhcnRzV2l0aChgLi4ke3NlcH1gKSAmJiByZWxhdGlvbiAhPT0gcmVzb2x2ZShjaGlsZFBhdGgpKVxufVxuIl19