{"id":24927020,"url":"https://github.com/alexei-sintotski/pubspec_lock","last_synced_at":"2025-04-09T20:42:10.791Z","repository":{"id":36354245,"uuid":"214798737","full_name":"alexei-sintotski/pubspec_lock","owner":"alexei-sintotski","description":"Dart library to access and manipulate content of pubpec.lock files","archived":false,"fork":false,"pushed_at":"2023-08-21T13:51:18.000Z","size":119,"stargazers_count":5,"open_issues_count":4,"forks_count":9,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-23T22:37:36.479Z","etag":null,"topics":["dart","flutter","pub","pubspec"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexei-sintotski.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-13T10:14:25.000Z","updated_at":"2023-05-30T08:22:40.000Z","dependencies_parsed_at":"2022-08-08T14:16:41.956Z","dependency_job_id":null,"html_url":"https://github.com/alexei-sintotski/pubspec_lock","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexei-sintotski%2Fpubspec_lock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexei-sintotski%2Fpubspec_lock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexei-sintotski%2Fpubspec_lock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexei-sintotski%2Fpubspec_lock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexei-sintotski","download_url":"https://codeload.github.com/alexei-sintotski/pubspec_lock/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248109972,"owners_count":21049407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","flutter","pub","pubspec"],"created_at":"2025-02-02T12:54:12.788Z","updated_at":"2025-04-09T20:42:10.765Z","avatar_url":"https://github.com/alexei-sintotski.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pubspec_lock ![Build Status](https://github.com/alexei-sintotski/pubspec_lock/actions/workflows/dart.yml/badge.svg?branch=master) [![pubspec_lock version](https://img.shields.io/pub/v/pubspec_lock?label=pubspec_lock)](https://pub.dev/packages/pubspec_lock)\nDart library to access and manipulate content of pubpec.lock files\n\n## Data classes\n\nPubspecLock represents data stored in pubspec.lock files.\n\nhttps://pub.dev/packages/functional_data is used to provide data type facilities\n\n```\nclass PubspecLock {\n  final Iterable\u003cSdkDependency\u003e sdks;\n  final Iterable\u003cPackageDependency\u003e packages;\n}\n```\n\nSdkDependency provides sdk name and version:\n\n```\n@immutable\n@FunctionalData()\nclass SdkDependency {\n  /// Default constructor\n  const SdkDependency({\n    @required this.sdk,\n    @required this.version,\n  });\n\n  final String sdk;\n  final String version;\n}\n```\n\nPackageDependency represents a package dependency, which can be:\n* a hosted dependency,\n* an SDK dependency,\n* a Git dependency, or\n* a path dependency\n\nPlease checkout https://dart.dev/tools/pub/dependencies for details.\n\nhttps://pub.dev/packages/sum_types is used to deal with variations of different package dependency types in a type-safe and concise manner.\n\n```\n@immutable\n@SumType()\nclass PackageDependency extends _$PackageDependency {\n  const PackageDependency.sdk(SdkPackageDependency sdk) : super(sdk: sdk);\n  const PackageDependency.hosted(HostedPackageDependency hosted) : super(hosted: hosted);\n  const PackageDependency.git(GitPackageDependency git) : super(git: git);\n  const PackageDependency.path(PathPackageDependency path) : super(path: path);\n\n  /// Provides package dependency name\n  String package() =\u003e iswitch(\n        sdk: (d) =\u003e d.package,\n        hosted: (d) =\u003e d.package,\n        git: (d) =\u003e d.package,\n        path: (d) =\u003e d.package,\n      );\n\n  /// Provides package dependency version\n  String version() =\u003e iswitch(\n        sdk: (d) =\u003e d.version,\n        hosted: (d) =\u003e d.version,\n        git: (d) =\u003e d.version,\n        path: (d) =\u003e d.version,\n      );\n\n  /// Provides package dependency type -- direct, development, or transitive\n  DependencyType type() =\u003e iswitch(\n        sdk: (d) =\u003e d.type,\n        hosted: (d) =\u003e d.type,\n        git: (d) =\u003e d.type,\n        path: (d) =\u003e d.type,\n      );\n}\n```\n\n## Import from YAML\n\nThe String extension method `loadPubspecLockFromYaml()` can be used to create a PubspecLock instance from a YAML string:\n\n```\nfinal pubspecLock = File('pubspec.lock').readAsStringSync().loadPubspecLockFromYaml();\n```\n\n## Export to YAML\n\n`PubspecLock.toYamlString()` can be used to export PubspecLock object to a YAML string:\n\n```\nFile('pubspec.lock').writeAsStringSync(pubspecLock.toYamlString());\n```\n\n## Full example\n\nThe following Dart script checks whether all Dart dependencies are taken from pub.dev.\n\n```\nimport 'dart:io';\n\nimport 'package:pubspec_lock/pubspec_lock.dart';\n\n// ignore_for_file: avoid_print\n\nvoid main() {\n  final pubspecLock = File('pubspec.lock').readAsStringSync().loadPubspecLockFromYaml();\n  print('Loaded pubspec.lock with ${pubspecLock.packages.length} package dependencies:');\n\n  final depsNotHostedByPubDev = [\n    for (final package in pubspecLock.packages)\n      if (!isHostedByPubDev(package))\n        package\n  ];\n\n  if (depsNotHostedByPubDev.isEmpty) {\n    print('SUCCESS: All dependencies are hosted by pub.dev');\n  } else {\n    print('WARNING: Dependencies hosted outside of pub.dev:');\n    depsNotHostedByPubDev.forEach(print);\n  }\n\n  File('pubspec.lock').writeAsStringSync(pubspecLock.toYamlString());\n}\n\nbool isHostedByPubDev(PackageDependency package) =\u003e package.iswitcho(\n      hosted: (package) =\u003e package.url == 'https://pub.dartlang.org',\n      otherwise: () =\u003e false,\n    );\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexei-sintotski%2Fpubspec_lock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexei-sintotski%2Fpubspec_lock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexei-sintotski%2Fpubspec_lock/lists"}