1
1
# pubspec_lock [ ![ Build Status] ( https://travis-ci.org/alexei-sintotski/pubspec_lock.svg?branch=master )] ( https://travis-ci.org/alexei-sintotski/pubspec_lock ) [ ![ codecov] ( https://codecov.io/gh/alexei-sintotski/pubspec_lock/branch/master/graph/badge.svg )] ( https://codecov.io/gh/alexei-sintotski/pubspec_lock ) [ ![ pubspec_lock version] ( https://img.shields.io/pub/v/pubspec_lock?label=pubspec_lock )] ( https://pub.dev/packages/pubspec_lock )
2
2
Dart library to access and manipulate content of pubpec.lock files
3
3
4
- ## Class PubspecLock
4
+ The versions 2.x of this package require Dart 2.7.
5
+ Consider version 1.1.0 if you intend to use the package with Dart 2.5 or 2.6.
6
+
7
+ ## Data classes
5
8
6
9
PubspecLock represents data stored in pubspec.lock files.
7
- It provides the following facilities:
8
- - Parser from pubspec.lock YAML string
9
- - Formatter to pubspec.lock YAML string
10
- - https://pub.dev/packages/functional_data is used to provide data type facilities
10
+
11
+ https://pub.dev/packages/functional_data is used to provide data type facilities
11
12
12
13
```
13
14
class PubspecLock {
14
15
final Iterable<SdkDependency> sdks;
15
16
final Iterable<PackageDependency> packages;
17
+ }
18
+ ```
16
19
17
- const PubspecLock({this.sdks = const {}, this.packages = const {}});
18
- factory PubspecLock.loadFromYamlString(String content);
20
+ SdkDependency provides sdk name and version:
19
21
20
- String toYaml();
22
+ ```
23
+ @immutable
24
+ @FunctionalData()
25
+ class SdkDependency {
26
+ /// Default constructor
27
+ const SdkDependency({
28
+ @required this.sdk,
29
+ @required this.version,
30
+ });
31
+
32
+ final String sdk;
33
+ final String version;
21
34
}
22
35
```
23
36
24
- ## Usage
37
+ PackageDependency represents a package dependency, which can be:
38
+ * a hosted dependency,
39
+ * an SDK dependency,
40
+ * a Git dependency, or
41
+ * a path dependency
25
42
26
- To use pubspec_lock, add the following dependency to pubspec.yaml:
43
+ Please checkout https://dart.dev/tools/pub/dependencies for details.
44
+
45
+ https://pub.dev/packages/sum_types is used to deal with variations of different package dependency types in a type-safe and concise manner.
27
46
28
47
```
29
- dependencies:
30
- pubspec_lock:
48
+ @immutable
49
+ @SumType()
50
+ class PackageDependency extends _$PackageDependency {
51
+ const PackageDependency.sdk(SdkPackageDependency sdk) : super(sdk: sdk);
52
+ const PackageDependency.hosted(HostedPackageDependency hosted) : super(hosted: hosted);
53
+ const PackageDependency.git(GitPackageDependency git) : super(git: git);
54
+ const PackageDependency.path(PathPackageDependency path) : super(path: path);
55
+
56
+ /// Provides package dependency name
57
+ String package() => iswitch(
58
+ sdk: (d) => d.package,
59
+ hosted: (d) => d.package,
60
+ git: (d) => d.package,
61
+ path: (d) => d.package,
62
+ );
63
+
64
+ /// Provides package dependency version
65
+ String version() => iswitch(
66
+ sdk: (d) => d.version,
67
+ hosted: (d) => d.version,
68
+ git: (d) => d.version,
69
+ path: (d) => d.version,
70
+ );
71
+
72
+ /// Provides package dependency type -- direct, development, or transitive
73
+ DependencyType type() => iswitch(
74
+ sdk: (d) => d.type,
75
+ hosted: (d) => d.type,
76
+ git: (d) => d.type,
77
+ path: (d) => d.type,
78
+ );
79
+ }
80
+ ```
81
+
82
+ ## Import from YAML
83
+
84
+ The String extension method ` loadPubspecLockFromYaml() ` can be used to create a PubspecLock instance from a YAML string:
85
+
86
+ ```
87
+ final pubspecLock = File('pubspec.lock').readAsStringSync().loadPubspecLockFromYaml();
88
+ ```
89
+
90
+ ## Export to YAML
91
+
92
+ ` PubspecLock.toYamlString() ` can be used to export PubspecLock object to a YAML string:
93
+
94
+ ```
95
+ File('pubspec.lock').writeAsStringSync(pubspecLock.toYamlString());
31
96
```
32
97
33
98
## Full example
@@ -39,28 +104,29 @@ import 'dart:io';
39
104
40
105
import 'package:pubspec_lock/pubspec_lock.dart';
41
106
107
+ // ignore_for_file: avoid_print
108
+
42
109
void main() {
43
- final fileContent = File('pubspec.lock').readAsStringSync();
44
- final pubspecLock = PubspecLock.loadFromYamlString(fileContent);
45
- print('Loaded pubspec.lock with '
46
- '${pubspecLock.packages.length} package dependencies:');
110
+ final pubspecLock = File('pubspec.lock').readAsStringSync().loadPubspecLockFromYaml();
111
+ print('Loaded pubspec.lock with ${pubspecLock.packages.length} package dependencies:');
47
112
48
113
final depsNotHostedByPubDev = [
49
114
for (final package in pubspecLock.packages)
50
115
if (!isHostedByPubDev(package))
51
116
package
52
117
];
53
118
54
- if (depsNotHostedByPubDev.isEmpty)
119
+ if (depsNotHostedByPubDev.isEmpty) {
55
120
print('SUCCESS: All dependencies are hosted by pub.dev');
56
- else {
121
+ } else {
57
122
print('WARNING: Dependencies hosted outside of pub.dev:');
58
123
depsNotHostedByPubDev.forEach(print);
59
124
}
125
+
126
+ File('pubspec.lock').writeAsStringSync(pubspecLock.toYamlString());
60
127
}
61
128
62
- bool isHostedByPubDev(PackageDependency package) =>
63
- package.iswitcho(
129
+ bool isHostedByPubDev(PackageDependency package) => package.iswitcho(
64
130
hosted: (package) => package.url == 'https://pub.dartlang.org',
65
131
otherwise: () => false,
66
132
);
0 commit comments