• Stars
    star
    215
  • Rank 177,411 (Top 4 %)
  • Language
    Dart
  • License
    BSD 3-Clause "New...
  • Created over 9 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A string-based path manipulation library.

Dart CI pub package package publisher

A comprehensive, cross-platform path manipulation library for Dart.

The path package provides common operations for manipulating paths: joining, splitting, normalizing, etc.

We've tried very hard to make this library do the "right" thing on whatever platform you run it on, including in the browser. When you use the top-level functions, it will assume the current platform's path style and work with that. If you want to explicitly work with paths of a specific style, you can construct a p.Context for that style.

Using

The path library was designed to be imported with a prefix, though you don't have to if you don't want to:

import 'package:path/path.dart' as p;

The most common way to use the library is through the top-level functions. These manipulate path strings based on your current working directory and the path style (POSIX, Windows, or URLs) of the host platform. For example:

p.join('directory', 'file.txt');

This calls the top-level join() function to join the "directory" and "file.txt" using the current platform's directory separator.

If you want to work with paths for a specific platform regardless of the underlying platform that the program is running on, you can create a Context and give it an explicit [Style]:

var context = p.Context(style: Style.windows);
context.join('directory', 'file.txt');

This will join "directory" and "file.txt" using the Windows path separator, even when the program is run on a POSIX machine.

Stability

The path package is used by many Dart packages, and as such it strives for a very high degree of stability. For the same reason, though, releasing a new major version would probably cause a lot of versioning pain, so some flexibility is necessary.

We try to guarantee that operations with valid inputs and correct output will not change. Operations, where one or more inputs are invalid according to the semantics of the corresponding platform, may produce different outputs over time. Operations for which path produces incorrect output will also change so that we can fix bugs.

Also, the path package's URL handling is based on the WHATWG URL spec. This is a living standard, and some parts of it haven't yet been entirely solidified by vendor support. The path package reserves the right to change its URL behavior if the underlying specification changes, although if the change is big enough to break many valid uses we may elect to treat it as a breaking change anyway.

FAQ

Where can I use this?

The path package runs on the Dart VM and in the browser under both dart2js and Dartium. On the browser, window.location.href is used as the current path.

Why doesn't this make paths first-class objects?

When you have path objects, then every API that takes a path has to decide if it accepts strings, path objects, or both.

  • Accepting strings is the most convenient, but then it seems weird to have these path objects that aren't actually accepted by anything that needs a path. Once you've created a path, you have to always call .toString() on it before you can do anything useful with it.

  • Requiring objects forces users to wrap path strings in these objects, which is tedious. It also means coupling that API to whatever library defines this path class. If there are multiple "path" libraries that each define their own path types, then any library that works with paths has to pick which one it uses.

  • Taking both means you can't type your API. That defeats the purpose of having a path type: why have a type if your APIs can't annotate that they expect it?

Given that, we've decided this library should simply treat paths as strings.

How cross-platform is this?

We believe this library handles most of the corner cases of Windows paths (POSIX paths are generally pretty straightforward):

  • It understands that both "/" and "\" are valid path separators, not just "\".

  • It can accurately tell if a path is absolute based on drive-letters or UNC prefix.

  • It understands that "/foo" is not an absolute path on Windows.

  • It knows that "C:\foo\one.txt" and "c:/foo\two.txt" are two files in the same directory.

What is a "path" in the browser?

If you use this package in a browser, then it considers the "platform" to be the browser itself and uses URL strings to represent "browser paths".

More Repositories

1

sdk

The Dart SDK, including the VM, dart2js, core libraries, and more.
Dart
9,763
star
2

language

Design of the Dart language
TeX
2,536
star
3

dart-pad

An online Dart editor with support for console, web, and Flutter apps
Dart
1,637
star
4

pub

The pub command line tool
Dart
1,024
star
5

http

A composable API for making HTTP requests in Dart.
Dart
994
star
6

site-www

Source for Dart website
Dart
922
star
7

shelf

Web server middleware for Dart
Dart
870
star
8

build

A build system for Dart written in Dart
Dart
763
star
9

pub-dev

The pub.dev website
Dart
762
star
10

dart-vim-plugin

Syntax highlighting for Dart in Vim
Vim Script
635
star
11

dart_style

An opinionated formatter/linter for Dart code
Dart
629
star
12

linter

Linter for Dart.
Dart
626
star
13

mockito

Mockito-inspired mock library for Dart
Dart
618
star
14

samples

A collection of Dart code samples by Dart DevRel
Dart
576
star
15

test

A library for writing unit tests in Dart.
Dart
486
star
16

source_gen

Automatic source code generation for Dart
Dart
479
star
17

dartdoc

API documentation tool for Dart.
Dart
459
star
18

markdown

A Dart markdown library
Dart
428
star
19

code_builder

A fluent API for generating valid Dart source code
Dart
416
star
20

web_socket_channel

StreamChannel wrappers for WebSockets.
Dart
405
star
21

leak_tracker

A framework for memory leak tracking for Dart and Flutter applications.
Dart
369
star
22

ffigen

FFI binding generator
Dart
364
star
23

collection

The collection package for Dart contains a number of separate libraries with utility functions and classes that makes working with collections easier.
Dart
359
star
24

logging

A Dart package for debug and error logging.
Dart
311
star
25

wasm

Utilities for loading and running WASM modules from Dart code
Dart
309
star
26

async

A Dart package that contains tools to work with asynchronous computations.
Dart
300
star
27

html

Dart port of html5lib. For parsing HTML/HTML5 with Dart. Works in the client and on the server.
Dart
268
star
28

crypto

A set of cryptographic functions implemented in pure Dart.
Dart
261
star
29

webdev

A CLI for Dart web development.
Dart
210
star
30

oauth2

An OAuth2 client library for Dart.
Dart
208
star
31

args

A command-line argument parsing library for Dart.
Dart
202
star
32

pana

Package ANAlysis for Dart
Dart
190
star
33

setup-dart

A GitHub Action to install and setup a Dart SDK.
Dart
176
star
34

yaml

A Dart YAML parser.
Dart
163
star
35

jnigen

Experimental bindings generator for Java bindings through dart:ffi and JNI.
Dart
154
star
36

http2

A HTTP/2 implementation for dart.
Dart
150
star
37

ffi

Utilities for working with Foreign Function Interface (FFI) code
Dart
149
star
38

homebrew-dart

Dart team's official tap for homebrew.
Ruby
147
star
39

sample-pop_pop_win

"Pop, Pop, Win!" is an implementation of Minesweeper in Dart.
Dart
146
star
40

usage

A Google Analytics wrapper for command-line, web, and Flutter apps.
Dart
143
star
41

watcher

A file system watcher library for Dart.
Dart
135
star
42

stack_trace

A package for manipulating stack traces and printing them readably.
Dart
128
star
43

gcloud

High-level interfaces to Google Cloud Platform APIs
Dart
127
star
44

mime

Dart package for working with MIME type definitions and for processing streams of MIME multipart media types.
Dart
124
star
45

stream_transform

Dart utility methods to create StreamTransfomer instances to manipulate Streams
Dart
118
star
46

lints

Official Dart lint rules; the core and recommended set of lints suggested by the Dart team.
Dart
106
star
47

coverage

Dart coverage data manipulation and formatting
Dart
102
star
48

appengine

Dart support for App Engine managed VMs
Dart
93
star
49

csslib

A library for parsing CSS.
Dart
92
star
50

benchmark_harness

The official benchmark harness for Dart
Dart
92
star
51

web

Lightweight browser API bindings built around JS static interop.
Dart
89
star
52

sse

Dart Server Sent Events package
Dart
89
star
53

fake_async

Fake asynchronous events for deterministic testing.
Dart
87
star
54

native

Dart packages related to FFI and native assets bundling.
Dart
74
star
55

matcher

A declarative API for specifying expectations.
Dart
70
star
56

json_rpc_2

A Dart implementation of the JSON-RPC 2.0 spec.
Dart
70
star
57

convert

Conversion utilities
Dart
68
star
58

characters

A package for characters represented as unicode extended grapheme clusters
Dart
67
star
59

dart-docker

Docker images for the Dart programming language (https://dart.dev)
Dart
65
star
60

pub_semver

A package for working with Pub/semver-style versions and version constraints
Dart
62
star
61

string_scanner

A class for parsing strings using a sequence of patterns.
Dart
59
star
62

cli_util

A library to help in building Dart command-line apps
Dart
59
star
63

glob

Bash-style filename globbing for Dart.
Dart
55
star
64

pubspec_parse

Simple package for parsing pubspec.yaml files with a type-safe API and rich error reporting
Dart
50
star
65

i18n

A general mono-repo for Dart i18n and l10n packages.
Dart
50
star
66

pool

A class for managing a finite pool of resources.
Dart
48
star
67

stream_channel

An abstraction for two-way communication channels.
Dart
47
star
68

io

Utilities for the Dart VM's dart:io.
Dart
47
star
69

fixnum

Fixed-width integer library for Dart.
Dart
44
star
70

clock

A fakeable wrapper for dart:core clock APIs.
Dart
40
star
71

site-shared

Content shared across Dart websites
Dart
40
star
72

co19

A Dart language and library conformance test suite
Dart
36
star
73

http_parser

A platform-independent Dart package for parsing and serializing HTTP formats.
Dart
35
star
74

ecosystem

This repository is home to general Dart Ecosystem tools and packages.
Dart
35
star
75

typed_data

Utility functions and classes that makes working with typed data lists easier in Dart
Dart
35
star
76

source_span

A library for identifying source spans and locations.
Dart
28
star
77

http_multi_server

A dart:io HttpServer wrapper that handles requests from multiple servers.
Dart
27
star
78

native_synchronization

Low-level synchronization primitives built using dart:ffi.
Dart
26
star
79

dartbug.com

The redirect service for Dart issues and bugs.
Dart
23
star
80

bazel_worker

Dart integration for Bazel build system
Dart
23
star
81

boolean_selector

A flexible syntax for boolean expressions.
Dart
23
star
82

os_detect

Dart multi-platform operating system identification
Dart
22
star
83

dart-syntax-highlight

Tools and documentation for how Dart code is formatted
Dart
21
star
84

yaml_edit

A library for YAML manipulation with comment and whitespace preservation.
Dart
21
star
85

tools

This repository is home to tooling related Dart packages.
Dart
21
star
86

api.dart.dev

Dart API docs
Python
19
star
87

dart_ci

Tools used by Dart's continuous integration (CI) testing that aren't needed by Dart SDK contributors. Mirrored from dart.googlesource.com/dart_ci. Do not land pull requests on Github.
Dart
18
star
88

test_process

A Dart package for testing subprocesses
Dart
17
star
89

term_glyph

Useful glyphs and Windows-safe equivalents
Dart
16
star
90

browser_launcher

Provides a standardized way to launch web browsers.
Dart
16
star
91

source_maps

A package to programmatically manipulate source maps.
Dart
15
star
92

grpc_cronet

Flutter dart:grpc implementation that uses the Cronet native library.
Dart
14
star
93

timing

A Dart package for tracking time spent in child operations
Dart
14
star
94

package_config

Support for working with Package Resolution Configuration files
Dart
14
star
95

root_certificates

The set of root certificates trusted by dart:io's default SecurityContext. Taken from Mozilla's NSS library.
C++
11
star
96

test_descriptor

Provides a convenient, easy-to-read API for defining and verifying directory structures in tests
Dart
10
star
97

dartlang_project_templates

Project templates for new repos under the dart-lang organization
Dart
8
star
98

source_map_stack_trace

Convert stack traces generated by dart2js-compiled code into readable native Dart stack traces
Dart
7
star
99

.github

GitHub default community health file for dart-lang repos
7
star
100

test_reflective_loader

Discover tests and test suites using reflection
Dart
5
star