Skip to content

Commit 438b82b

Browse files
Preps for the release 2.0.0
1 parent b42b45e commit 438b82b

File tree

6 files changed

+97
-27
lines changed

6 files changed

+97
-27
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## [2.0.0] - 2019-12-28
2+
* Migration to Dart 2.7
3+
* Extension method on String to create PubspecLock from YAML
4+
* Major refactoring to improve code modularity
5+
16
## [1.1.0] - 2019-12-07
27
* YAML formatting with json2yaml i.s.o. using ad-hoc YAML generator
38

README.md

Lines changed: 86 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,98 @@
11
# 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)
22
Dart library to access and manipulate content of pubpec.lock files
33

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
58

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

1213
```
1314
class PubspecLock {
1415
final Iterable<SdkDependency> sdks;
1516
final Iterable<PackageDependency> packages;
17+
}
18+
```
1619

17-
const PubspecLock({this.sdks = const {}, this.packages = const {}});
18-
factory PubspecLock.loadFromYamlString(String content);
20+
SdkDependency provides sdk name and version:
1921

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;
2134
}
2235
```
2336

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
2542

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

2847
```
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());
3196
```
3297

3398
## Full example
@@ -39,28 +104,29 @@ import 'dart:io';
39104
40105
import 'package:pubspec_lock/pubspec_lock.dart';
41106
107+
// ignore_for_file: avoid_print
108+
42109
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:');
47112
48113
final depsNotHostedByPubDev = [
49114
for (final package in pubspecLock.packages)
50115
if (!isHostedByPubDev(package))
51116
package
52117
];
53118
54-
if (depsNotHostedByPubDev.isEmpty)
119+
if (depsNotHostedByPubDev.isEmpty) {
55120
print('SUCCESS: All dependencies are hosted by pub.dev');
56-
else {
121+
} else {
57122
print('WARNING: Dependencies hosted outside of pub.dev:');
58123
depsNotHostedByPubDev.forEach(print);
59124
}
125+
126+
File('pubspec.lock').writeAsStringSync(pubspecLock.toYamlString());
60127
}
61128
62-
bool isHostedByPubDev(PackageDependency package) =>
63-
package.iswitcho(
129+
bool isHostedByPubDev(PackageDependency package) => package.iswitcho(
64130
hosted: (package) => package.url == 'https://pub.dartlang.org',
65131
otherwise: () => false,
66132
);

example/main.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,7 @@ void main() {
1818
}
1919
}
2020

21-
bool isHostedByPubDev(PackageDependency package) =>
22-
package.iswitcho(hosted: (package) => package.url == 'https://pub.dartlang.org', otherwise: () => false);
21+
bool isHostedByPubDev(PackageDependency package) => package.iswitcho(
22+
hosted: (package) => package.url == 'https://pub.dartlang.org',
23+
otherwise: () => false,
24+
);

lib/src/package_dependency/package_dependency.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import 'sdk_package_dependency/sdk_package_dependency.dart';
3535
part 'package_dependency.g.dart';
3636

3737
/// Dependency sources as specified by https://dart.dev/tools/pub/dependencies
38+
@immutable
3839
@SumType()
3940
class PackageDependency extends _$PackageDependency {
4041
const PackageDependency.sdk(SdkPackageDependency sdk) : super(sdk: sdk);

lib/src/pubspec_lock.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,6 @@ part 'pubspec_lock.g.dart';
4141
// ignore_for_file: avoid_as
4242

4343
/// PubspecLock is a data type representing data stored in pubspec.lock files.
44-
/// It provides the following facilities:
45-
/// - Parser from pubspec.lock YAML string
46-
/// - Formatter to pubspec.lock YAML string
47-
/// - https://pub.dev/packages/functional_data is used to provide data type facilities
4844
@immutable
4945
@FunctionalData()
5046
class PubspecLock extends $PubspecLock {

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: pubspec_lock
22
description: Dart library to access and manipulate content of pubpec.lock files
3-
version: 1.1.0
3+
version: 2.0.0
44
homepage: https://github.com/alexei-sintotski/pubspec_lock
55

66
environment:

0 commit comments

Comments
 (0)