blob: 068297dbf17974e6e3db328c7f48d8c667f5fef3 [file] [edit]
// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'package:path/path.dart' as path;
/// A default [path.Context] for use in `pub` code.
path.Context get p =>
Zone.current[_pathContextKey] as path.Context? ?? path.context;
/// The key for the [path.Context] in the current [Zone].
final _pathContextKey = Object();
/// Runs [callback] in a [Zone] where [p] is overridden by [pathContext].
R withPathContext<R>(
R Function() callback, {
required path.Context pathContext,
}) => runZoned(callback, zoneValues: {_pathContextKey: pathContext});
extension PathContextExt on path.Context {
/// A default context for manipulating POSIX paths.
path.Context get posix => path.posix;
/// A default context for manipulating URLs.
///
/// URL path equality is undefined for paths that differ only in their
/// percent-encoding or only in the case of their host segment.
path.Context get url => path.url;
}