UNPKG

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
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