p-hatan/ mirror

pub repository

mirror.p-hatan.ir

build

0.4.1+2

A build system for Dart.

Download archive

Readme

Build Status Coverage Status

This package provides a way of generating files using Dart code, outside of pub. These files are generated directly on disk in the current package folder, and rebuilds are incremental.

Differences between the build package and pub.

You might be asking, why use this package instead of a pub Transformer? There are a few key differences that make this package better for some use cases.

Outputs

Pub will only ever output files into your build directory, and pub serve only ever outputs them into an in-memory file system. With the build package, you can output files anywhere in the current package.

This enables you to generate dart files which are imported by your project, without getting any warnings about missing files from the analyzer. At the same time it enables you to easily go explore those files in your editor, and set breakpoints inside those files.

Inputs

With build, you can use any file from any package you depend on as a primary input, where with pub you can only use files from your current package.

Consistency

You can't overwrite any pre-existing files using build, you can only generate new ones.

In pub a transformer could overwrite a file any number of times, and this can lead to confusion and difficulty when debugging, especially with source maps.

Incremental builds

The build package does incremental builds whenever possible. It may decide to do a full rebuild due to changes in your build script (or one of its deps), or if you delete the cache folder, but those things shouldn't happen often.

With pub, some transformations on your package dependencies may be cached, but any transformations on your current package are always redone each time you call pub build or pub serve. In serve mode it will do incremental builds once the first build has run, but if you restart it then you have to start over from scratch.

Execution modes and reflection

Most frameworks that use reflection today enable running in two different modes, one which uses dart:mirrors for development in dartium, and one which uses static code generated by a Transformer for deployment. All features that use reflection have to be implemented in both modes, and bugs might exist in only one mode. This all ends up resulting in obscure deployment time only issues, as well as a lot of wasted cycles testing the same app in multiple different modes.

With build, you can eliminate entirely the dart:mirrors mode. You are always using the generated code, all the time. This makes it easier on framework devs, and easier on users who have fewer modes to support.

Running Builds

In order to run a build, you write a script which uses one of the three top level functions defined by this library:

  • build: Runs a single build and exits.
  • watch: Continuously runs builds as you edit files.
  • serve: Same as watch, but also provides a basic file server which blocks if there are ongoing builds.

All three of these methods have a single required argument, a PhaseGroup. This is conceptually just a List<Phase> with some helper methods. Each of these Phases runs sequentially, and blocks until the previous Phase is completed.

A single Phase may be composed of one or more BuildActions, which are just a combination of a single Builder and a single InputSet. The Builder is what will actually generate outputs, and the InputSet determines what the primary inputs to that Builder will be. All BuildActions in a Phase can be ran at the same time, and cannot read in the outputs of any other BuildAction in the same Phase.

Lets look at a very simple example, with a single BuildAction. You can ignore the CopyBuilder for now, just know that its a Builder which copies files:

import 'package:build/build.dart';

main() async {
  /// The [PhaseGroup#singleAction] constructor is a shorthand for:
  ///
  ///   new PhaseGroup().newPhase().addAction(builder, inputSet);
  await build(new PhaseGroup.singleAction(
      new CopyBuilder('.copy'), new InputSet('my_package', ['lib/*.dart'])));
}

The above example would copy all *.dart files directly under lib to corresponding *.dart.copy files. Each time you run a build, it will check for any changes to the input files, and rerun the CopyBuilder only for the inputs that actually changed.

You can add as many actions as you want to the first phase using the addAction method, and they will all run at the same time. For example, you could make multiple copies:

main() async {
  var inputs = new InputSet('my_package', ['lib/*.dart']);
  await build(new PhaseGroup().newPhase()
      ..addAction(new CopyBuilder('.copy1'), inputs)
      ..addAction(new CopyBuilder('.copy2'), inputs));
}

Lets say however, that you want to make a copy of one of your copies. Since no action can read outputs of another action in the same phase, you need to add an additional Phase:

main() async {
  var phases = new PhaseGroup();
  group.newPhase().addAction(
      new CopyBuilder('.copy'), new InputSet('my_package', ['lib/*.dart']));
  group.newPhase().addAction(
      new CopyBuilder('.bak'), new InputSet('my_package', ['lib/*.dart.copy']));

  await build(phases);
}

This time, all the *.dart.copy files will be created first, and then the next Phase will read those in and create additional *.dart.copy.bak files. You can add as many phases as you want, but in general it's better to add more actions to a single phase since they can run at the same time.

Note: Any time you change your build script (or any of its dependencies), the next build will be a full rebuild. This is because the system has no way of knowing how that change may have affected the outputs.

Inputs

Valid inputs follow the general dart package rules. You can read any files under the top level lib folder any package dependency, and you can read all files from the current package.

In general it is best to be as specific as possible with your InputSets, because all matching files will be provided to declareOutputs.

Outputs

You may only output files in the current package, but anywhere in the current package is allowed.

You are not allowed to overwrite existing files, only create new ones.

Outputs from previous builds will not be treated as inputs to later ones.

Source control

This package creates a top level .dart_tool folder in your package, which should not be submitted to your source control repo (likely this just means adding '.dart_tool' to your '.gitignore' file).

When it comes to generated files it is generally best to not submit them to source control, but a specific Builder may provide a recommendation otherwise.

It should be noted that if you do submit generated files to your repo then when you change branches or merge in changes you may get a warning on your next build about declared outputs that already exist. This will be followed up with a prompt to delete those files. You can type l to list the files, and then type y to delete them if everything looks correct. If you think something is wrong you can type n to abandon the build without taking any action.

Publishing packages

In general generated files should be published with your package, but this may not always be the case. Some Builders may provide a recommendation for this as well.

Implementing your own Builders

If you have written a pub Transformer in the past, then the Builderapi should be familiar to you. The main difference is that Builders must always declare their outputs, similar to a DeclaringTransformer.

The basic api looks like this:

abstract class Builder {
  /// You can only output files in `build` that you declare here. You are not
  /// required to output all of these files, but no other [Builder] is allowed
  /// to declare the same outputs.
  List<AssetId> declareOutputs(AssetId input);

  /// Similar to `Transformer.apply`. This is where you build and output files.
  Future build(BuildStep buildStep);
}

Building on the example in Running Builds, here is an implementation of a Builder which just copies files to other files with the same name, but an additional extension:

/// A really simple [Builder], it just makes copies!
class CopyBuilder implements Builder {
  final String extension;

  CopyBuilder(this.extension)

  Future build(BuildStep buildStep) async {
    /// Each [buildStep] has just one input. This is a fully realized [Asset]
    /// with its [stringContents] already available.
    var input = buildStep.input;

    /// Create a new [Asset], with the new [AssetId].
    var copy = new Asset(_copiedId(input.id), input.stringContents);

    /// Write out the [Asset].
    ///
    /// There is no need to `await` here, the system handles waiting on these
    /// files as necessary before advancing to the next phase.
    buildStep.writeAsString(copy);
  }

  /// Declare your outputs, just one file in this case.
  List<AssetId> declareOutputs(AssetId inputId) => [_copiedId(inputId)];

  AssetId _copiedId(AssetId inputId) => inputId.addExtension('$extension');
}

It should be noted that you should never touch the file system directly. Go through the buildStep#readAsString and buildStep#writeAsString methods in order to read and write assets. This is what enables the package to track all of your dependencies and do incremental rebuilds. It is also what enables your Builder to run on different environments.

Using the analyzer (experimental)

If you need to do analyzer resolution, you can use the BuildStep#resolve method. This makes sure that all Builders in the system share the same analysis context, which greatly speeds up the overall system when multiple Builders are doing resolution. Additionally, it handles for you making the analyzer work in an async environment.

This Resolver has the exact same api as the one from code_transformers, so migrating to it should be easy if you have used code_transformers in the past.

Here is an example of a Builder which uses the resolve method:

class ResolvingCopyBuilder {
  Future build(BuildStep buildStep) {
    /// Resolves all libraries reachable from the primary input.
    var resolver = await buildStep.resolve(buildStep.input.id);
    /// Get a [LibraryElement] by asset id.
    var entryLib = resolver.getLibrary(buildStep.input.id);
    /// Or get a [LibraryElement] by name.
    var otherLib = resolver.getLibraryByName('my.library');

    /// **IMPORTANT**: If you don't release a resolver, your builds will hang.
    resolver.release();
  }

  /// Declare outputs as well....
}

Once you have gotten a LibraryElement using one of the methods on Resolver, you are now just using the regular analyzer package to explore your app.

Important Note: As shown in the code above, you must call release on your resolver when you are done. If you don't then the next call to resolve will never complete.

Features and bugs

Please file feature requests and bugs at the issue tracker.

Changelog

0.4.1+2

  • Stop using removed argument useSharedSources when constructing Resolvers
  • Support code_transformers 0.5.x

0.4.1+1

  • Support analyzer 0.29.x

0.4.1

  • Support analyzer 0.28.x

0.4.0

  • BREAKING BuilderTransformer must be constructed with a List rather than inherit and override.
  • Simplifies Resolver interface so it is possible to add implementations which are less complex than the one from code_transformers.
  • Adds a Resolvers class and support for overriding the concrete Resolver that is used by build steps.
  • Updates some test expectations to match the new behavior of analyzer.

0.3.0+6

  • Convert packages paths in the file watcher to their absolute paths. This fixes #109.

0.3.0+5

  • Fix duplicate logs issue when running as a BuilderTransformer.

  • Support crypto 2.0.0.

0.3.0+4

  • Add error and stack trace to log messages from the BuilderTransformer.

0.3.0+3

  • Fixed BuilderTransformer so that logs are passed on to the TransformLogger.

0.3.0+2

  • Enable serving files outside the server root by default (enables serving files from other packages).

0.3.0+1

  • Fix an AssetGraph bug where generated nodes might be created as non-generated nodes if they are attempted to be read from previous build steps.

0.3.0

  • BREAKING Renamed values of three enums to be lower-case: BuildType, BuildStatus, and PackageDependencyType.
  • Updated to crypto ^1.0.0.
  • Added option to resolve additional entry points in buildStep.resolve.
  • Added option to pass in a custom Resolvers instance.

0.2.1

  • Added the deleteFilesByDefault option to all top level methods. This will skip the prompt to delete files, and instead act as if you responded y.
    • Also by default in a non-console environment the prompt no longer exists and it will instead just exit with an error.
  • Added support for multiple build scripts. Each script now has its own asset graph based on a hash of the script uri.
    • You need to be careful here, as you can get in an infinite loop if two separate build scripts keep triggering updates for each other.
    • There is no explicit link between multiple scripts, so they operate as if all changes from other scripts were user edits. This will usually just do the "right thing", but may result in undesired behavior in some circumstances.
  • Improved logging for non-posix consoles.

0.2.0

  • Updated the top level classes to take a PhaseGroup instead of a List<List<Phase>>.
  • Added logic to handle nested package directories.
  • Basic windows support added, although it may still be unstable.
  • Significantly increased the resolving speed by using the same sources cache.
  • Added a basic README.
  • Moved the .build folder to .dart_tool/build. Other packages in the future may also use this folder.

0.1.4

  • Added top level serve function.
    • Just like watch, but it provides a server which blocks on any ongoing builds before responding to requests.
  • Minor bug fixes.

0.1.3

  • Builds are now fully incremental, even on startup.
    • Builds will be invalidated if the build script or any of its dependencies are updated since there is no way of knowing how that would affect things.
  • Added lastModified to AssetReader (only matters if you implement it).

0.1.2

  • Exposed the top level watch function. This can be used to watch the file system and run incremental rebuilds on changes.
    • Initial build is still non-incremental.

0.1.1

  • Exposed the top level build function. This can be used to run builds.
    • For this release all builds are non-incremental, and delete all previous build outputs when they start up.
    • Creates a .build directory which should be added to your .gitignore.
  • Added resolve method to BuildStep which can give you a Resolver for an AssetId.
    • This is experimental and may get moved out to a separate package.
    • Resolves the full dart sdk so this is slow, first call will take multiple seconds. Subsequent calls are much faster though.
    • Will end up marking all transitive deps as dependencies, so your files may end up being recompiled often when not entirely necessary (once we have incremental builds).
  • Added listAssetIds to AssetReader (only matters if you implement it).
  • Added delete to AssetWriter (also only matters if you implement it).

0.1.0

  • Initial version

Installing

export PUB_HOSTED_URL=https://pub.mirror.p-hatan.ir
flutter pub add build
pubspec.yaml
name: build
version: 0.4.1+2
description: A build system for Dart.
author: Dart Team <misc@dartlang.org>
homepage: https://github.com/dart-lang/build

environment:
  sdk: '>=1.9.1 <2.0.0'

dependencies:
  analyzer: ">=0.27.1 <0.30.0"
  barback: ^0.15.0
  code_transformers: ">=0.4.1 <0.6.0"
  crypto: ">=0.9.2 <3.0.0"
  logging: ^0.11.2
  glob: ^1.1.0
  path: ^1.1.0
  shelf: ^0.6.5
  shelf_static: ^0.2.3
  stack_trace: ^1.6.0
  watcher: ^0.9.7
  yaml: ^2.1.0

dev_dependencies:
  build_test:
    path: ./build_test
  test: ^0.12.0
  transformer_test: ^0.2.0

Version history

VersionPublishedArchiveSHA-256
0.0.12016-01-04T21:42:48.650ZDownload508c2d42d26c8e7b7af3064d7fac3fc481a01acc98e145aaa46329c9f1900230
0.0.1+12016-01-04T21:44:58.291ZDownload722b5ce82a4eaa5412956f0b205c6f0c444183b71d99d3e4bf8e3798156ac348
0.2.02016-03-10T18:46:09.059ZDownload145ff02eacb69dfd5bab4e55eb8c8183284296afce1017cf077f50d15032fba4
0.2.12016-03-15T16:28:01.868ZDownload1b9137d29a470a938366f1a30ba38ec4007afa201c272c264068f0c33ce53e60
0.3.02016-04-28T21:02:26.198ZDownloade59f34fb5373f580321492da2f4f1df9805af1b85ff4a5d9e01456cb798fd3e9
0.3.0+12016-04-29T17:36:06.835ZDownload4f261e76fe58afafce3c68a0de2cb785e61d43a51d0f7c8757e2b4c17af1d352
0.3.0+22016-05-09T21:48:59.893ZDownload6000c56362174189f06c8a705b85940f63982d222950e7cf7f7d461ed0eff698
0.3.0+32016-05-31T16:51:10.024ZDownload8f07249a5d3888d3f57ac43dc72834528137264a4308c136eaa048505d6a48e9
0.3.0+42016-06-03T18:27:27.238ZDownload919c45d2a3d31c9e429713d10d523dc60a599ec76f6bcbda828f953f5779d5a5
0.3.0+52016-06-06T20:11:34.418ZDownloadc881071c0e4758c30381a83a978e6d2826f50fbd1b075c03c447c4428a2a1a1c
0.3.0+62016-06-21T21:56:05.869ZDownload4b4f415aeb1d899a004655db12d1371edce0553805ffb92c15ddcc0eef1a8cad
0.4.02016-09-07T20:14:27.996ZDownload3d3c4e3dee400f85ade26e4f217be8f486854f629bd034489455ec90e30be05d
0.4.12016-09-12T20:35:43.432ZDownload1950a8c59ece5d41dbc41f0132d3f9d8c747d77a8c3b1b6477befb4174eb437b
0.4.1+12016-10-14T19:33:00.583ZDownload114f35365ad864c98848ff6b33c0ec581a34f95ab077edb19c8ca4abf76cb781
0.4.1+22016-10-17T20:48:04.907ZDownload67dae078a3c4784bb59542a2fafa2ffb886144656ec7053d9d748bcc2bb1bc0e
0.4.1+32016-10-28T14:26:39.140ZDownload38655ec95d2d69bbc72873714e64779fe6b9478ca4939440fd3fa75daf4f2ce7
0.5.02016-11-10T21:36:59.985ZDownload108855219a6f506abcb89a2519ba2f0523c3bc863ab29ad064def3eeef2cae8f
0.6.02016-11-28T23:53:52.795ZDownload3397324a8e1a5ddc4c36af791dfea546225bff449ff9352cdbf6493b0087f817
0.6.12016-12-07T23:33:09.887ZDownload6198d71c42f8fba14d16be937be3979f5297e2d9c68639f33e6bee2a4e600eea
0.6.22016-12-08T00:36:49.489ZDownload375757e5d6950e055341edd7d9f05b6fe46606323334c5788e19a97c84c1f8f6
0.6.32016-12-09T17:53:58.640ZDownloada09090dee9d4ad006a7102748de5bdecf9772086385c273a3c908be5784bc6ca
0.7.02017-01-27T21:23:21.183ZDownloadb12b4452eeda8ffba03c9b19250a01ed138073bab092f6607fc80c292048ae7b
0.7.12017-02-11T00:35:48.261ZDownload559a0a7f3093ef037f414484fa56cbfa28c03c324a2995698d6ca5acfdf6f63d
0.7.1+12017-02-11T01:56:31.189ZDownload68dc387d9fd3812a1dd55197ba074fbbd73ee48086d9099ce9324dd5b5715739
0.7.22017-02-16T00:48:06.156ZDownloadadcc59a0a7dd924d36c150a5523ca0b0611ad083526d05793e5d0160a83a6344
0.7.32017-04-13T18:33:13.499384ZDownload10c1b3f3000cd0b2be762d78469e4211ccec876db96d2ba3fb3a035a82f6e1c9
0.8.02017-04-13T21:33:03.206300ZDownload79add698f2ca6508210dbf662446f034d4d77c3c0fdc4005381d96267e76d37b
0.9.02017-04-25T18:02:43.022480ZDownload3a18a541ce67134f39700b2947b4d4ccc698f9378cbc3d98e1cba1149a4acdd2
0.9.12017-04-25T22:29:02.641407ZDownloade6a5954a0d9b79432a3f982f2e876a825786351628de7475aa1c13348fee4769
0.9.22017-05-04T20:54:41.628254ZDownload545b668e7a960aa05b0fb5aed131b15c63265141ec21731022d78a4115822183
0.9.32017-05-13T00:31:30.103277ZDownloadff1b6eca2e8a22bcb021cb5a37477fd76b5604f746ff9f55fffe1ed0821b55f5
0.10.02017-08-14T17:46:05.670053ZDownload3155a9fd180c9e067706de3ad7262d43649a16095d9b15a5c5faf9bc12e0b083
0.10.0+12017-08-16T21:50:33.040791ZDownloadf739afb8f1b032dc9f9b42f9ad505b4e0887bb0022c2c79a74f5f0b0c94eb06b
0.10.12017-09-13T21:03:30.431402ZDownloaddbd08f12823c6bc0f78cd3b459caa1b69a0940deefba597924bc2f9757fd4433
0.10.22017-09-22T17:08:47.218442ZDownload7b308fedb6b962ba066c6e9c904e44d9765659913a148580cd2c16fb1141d55a
0.10.2+12017-09-29T16:39:48.419257ZDownload1095e697d4db759fa3ae929a0389d4aa2fe68be43f8665a4dcfcfcf4cb6fa1af
0.11.02017-11-02T21:13:29.563244ZDownloadac4abd74dc60f939d3495a10fc61cbcaef2fcafb8cad72a4aeed582a58deab12
0.11.12017-11-28T23:39:24.600312ZDownload869eded575f9e538b901a9932af58b63bdf29587a0f4044f382b11ed823cadb8
0.11.22017-12-09T20:24:27.784844ZDownload53942ad5312e5f03f293e618497c3492c6f4cf8f6af57a213c3918c21502b0d1
0.12.02018-01-18T22:13:45.954830ZDownloadeccb5c6489182fedb345667a1dcb69730cdad880adee2803db28232845344d59
0.12.0+12018-02-03T00:27:09.103708ZDownload0753ebd4752d7af314c080e98d1a56bd9221c02aed25cc436c0dc68df993e170
0.12.0+22018-03-09T23:30:10.598044ZDownloada559c7768d79414b74db6fc0af10d92ff31e64331b5be8f3b7fdf68471f264fc
0.12.12018-04-06T21:07:06.642450ZDownload055afc072a969761d2e6f88496b3fdc6075b20c3a81efb8060a5378d50fa426d
0.12.22018-04-16T19:28:28.992985ZDownload2ea26b93dd1a6c864df15f1445652b1c1e495f769fa3154e7c87d68eb6e9f71e
0.12.32018-04-24T19:27:37.591653ZDownload5ce6b2800a23adb8f4f865867b09edd6ab2ce58e5b21c0b6924462ad84867416
0.12.42018-04-26T18:06:07.250784ZDownloadecb66473d7e1c00de5f899bae0cbba2011262916b200c3874098c30297421478
0.12.52018-04-27T21:06:57.673557ZDownload67f0e64cd886451ab7719b0d0c1780178461a8d6accebcb1d96048d53aa78f0c
0.12.62018-05-14T23:56:34.955154ZDownload801f5cd01ab24e1ca9177be8650ff1862da9b1012b9a275925b77e648029443a
0.12.72018-06-21T22:26:37.282460ZDownload7ef076d755add212d0a7bb5e20daa3441a2fb034284b8dac7e97db50d5c068ea
0.12.7+22018-07-16T21:28:13.351782ZDownload3f00daa7c78f0fa94ddd5f159edb81fa1862040b3fcf5a3dc286dbc0316fa27f
0.12.7+32018-08-01T20:30:04.452224ZDownload48569dd889d23f240c740012835724f759b10b9580f43688c81ce5aa43759a9f
0.12.82018-09-24T17:02:16.046421ZDownloada208f2cd331cba16fc9f3c9132389da306804b5d93a8bd1754a7fb7de3b5ed0a
1.0.02018-09-25T18:21:59.800348ZDownloade183af80553ce8c33bcd6150821e429f5d222e9aaeb9e8edf266f65f186d3c12
1.0.12018-10-08T16:41:05.794082ZDownload176906dff0021163b977b2e7b6676e8858fc20eaff840bb9fd28c148a9abd52f
1.0.22018-12-05T21:08:12.587468ZDownload6bc129af4ffc73c2b4aaf51394470ae6612c134b728800762dcc89c62ecd491f
1.1.02019-01-14T15:16:41.167488ZDownloadeb42d8e4d51f2f5ec97c143a36bb828abb7d8301f650fbc030b89ad0090d8eae
1.1.12019-01-31T21:13:18.036668ZDownloadc98aed9ff1c1df46d9bab61fafe8b4f69088f48479c8bacfb04721a529600af8
1.1.22019-03-26T20:22:36.447465ZDownload2c59a0ca1bae15cdfcbe36d13b48f76ee737527f4d7bc9197a985ea78cf2a2ac
1.1.32019-04-04T01:38:24.547811ZDownload39802f462e34141567d60390587e643aac1501e363173ab2a62cbc6645825839
1.1.42019-04-26T16:55:50.098799ZDownloadd94e797ff06c859bc1aa83ad5ba83b9ec36e7b8c6c9a4f8f1df6fb2ea547ec55
1.1.52019-07-15T17:19:31.228014ZDownload83d193e67b2e8b7b8703433a7bf281dabe877321da37b9a2365b7e7387305256
1.1.62019-08-16T15:16:25.866195ZDownload5e17ae09df6711c5376dc250ec604404fc8cf86b1cd43d7e296b3b8ce0f724e0
1.2.02019-09-20T19:15:27.115589ZDownloade13d6e116a3fd341d0ed8b875435f72eb2cfa53de3b4e56bebcf499ffe5d6f47
1.2.12019-10-28T21:18:02.841954ZDownload204d44107ca25e20f866d0e6ef0ffe4ab272673985373a9c88674974a9882813
1.2.22019-11-15T21:41:57.158065ZDownloada6b646a77e30844cb1657eb80f48eb4e98416f3e50ea3295af1e3362f0a97d03
1.3.02020-05-11T20:19:35.419917ZDownload88df4d005f6bfd4e365345b646a91c4a9cbeb71bcc8a6e76937e4bf0b7e4eff1
1.4.02020-09-09T18:41:48.602806ZDownload65aa7ace5e4554a67e243d735cd5657087176b633f71dad904a4932fbf6707d8
1.5.02020-09-22T17:51:42.424726ZDownload1a6c8981f2906dec2d7125030f49016e404b20ff079a000c89f99c850bf098ad
1.5.12020-11-18T16:53:42.439413ZDownload4ffeb53584f5e4fd7d8e4f19658997f0ab47af295ba06277c7ac08985e5d75be
1.5.22020-12-02T15:32:19.897508ZDownloade59e11c0ea37cd49c6d1c5fb4c115ea842f34536c17d1e9bcec9d8013f19ce4f
1.6.02020-12-15T16:17:18.843054ZDownload0bb50718427efe8c465bb4c56034d9a16865a1ac931e29dabda06bf0ee5d864f
1.6.12021-01-07T16:54:58.606074ZDownload8541bbfa9c17760970990cf1fd22f759df483c4a5ddb8d89d67ee8043c5c4a37
1.6.22021-02-01T18:15:49.990827ZDownloade2cb6d6becb0ee2e3adfdecf4f1c4016bcfed589a3e5f6a4afff7384cf6c25c4
1.6.32021-02-17T15:01:00.990340ZDownload1a4415f873cf7c92dccc9fd4284c54432ce9648749a1ee8d2c4b0c20429900b9
2.0.02021-03-12T20:52:28.186740ZDownload227c6478ee2a930451911961031e98b83ff61d70316959dba40363ef72103ff4
2.0.12021-04-20T19:38:38.474952ZDownloadf15fe7e9a42f80d227086c742ecc334a6c2327649f21a02218da843c4bee5e0c
2.0.22021-05-27T20:44:41.860609ZDownloadc6fa8f3d3b06cfe5ec3516dab30fc166ccc6592ebacd323a003075c4cf9ba1e9
2.0.32021-07-09T21:25:51.163384ZDownloadde3ecca84980ee5e632888a04f4a72d8e3c390104fd5edb3a724785f66e9e97a
2.1.02021-08-02T21:29:03.226774ZDownloadad0a562140603cf3dd77f0bdd068ffc11588661e3de7ba53c803e72382a1b3a2
2.1.12021-10-01T14:43:09.703482ZDownload79752d67750874fe7eb6d509a7514237b66eabdb8f6c44295d50083a19d1008e
2.2.02021-12-16T22:43:25.280863ZDownloadecf283ab867bd216d8606e19137dd2ef81305040a154cfeea4cb8db24eebce44
2.2.12021-12-20T20:57:46.405755ZDownloadc9b6c412967d7887e88efe1ffbfe0f31bfaf6a5a4b98eb8d59964977a90f2f9e
2.2.22022-04-14T18:44:36.525577ZDownload2db35d609460afa45c472c2aab5c408ff088d54fda165d3b8705b91275f63c30
2.3.02022-04-15T16:15:49.015076ZDownload29a03af98de60b4eb9136acd56608a54e989f6da238a80af739415b05589d6df
2.3.12022-09-13T17:43:11.240715ZDownload3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777
2.4.02023-05-08T18:49:31.703005ZDownload43865b79fbb78532e4bff7c33087aa43b1d488c4fdef014eaef568af6d8016dc
2.4.12023-06-29T16:47:02.091725ZDownload80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0
2.4.22024-12-16T21:46:50.360631ZDownloadcef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0
2.5.02025-06-16T07:56:41.759581ZDownload8295b0b6dfe00499b786718f2936a56b5e0d56d169c528472c8c1908f2b1e3ee
2.5.12025-06-17T11:40:03.690386ZDownload486337d40a48d75049f2a01efceefc1412e3a6d6342d39624753e7d5a4e70016
2.5.22025-06-18T11:34:39.558627ZDownload7cf79af8eb6023bee797a77b067fb6e63ac5650f3789546e023958098feb776e
2.5.32025-06-20T06:57:21.817067ZDownload74273591bd8b7f82eeb1f191c1b65a6576535bbfd5ca3722778b07d5702d33cc
2.5.42025-06-23T11:52:17.692004ZDownload51dc711996cbf609b90cbe5b335bbce83143875a9d58e4b5c6d3c4f684d3dda7
3.0.0-dev.12025-06-24T11:53:20.618641ZDownloadf2ddd461b83a59b025ea05b3297b7b78d7037ce5aa0d9640da03ba19c51da7ab
3.0.0-dev.22025-07-16T12:22:19.391170ZDownload3519ad96c316ae7ce1be27eba2a3db29a921a3f71fc86fe50211d40ed4af9a42
3.0.02025-07-17T08:09:37.849135ZDownload7d95cbbb1526ab5ae977df9b4cc660963b9b27f6d1075c0b34653868911385e4
3.0.12025-08-07T13:57:26.963972ZDownload7174c5d84b0fed00a1f5e7543597b35d67560465ae3d909f0889b8b20419d5e3
3.0.22025-08-15T11:34:10.611387ZDownload6439a9c71a4e6eca8d9490c1b380a25b02675aa688137dfbe66d2062884a23ac
3.1.02025-09-02T09:10:48.862267ZDownloadce76b1d48875e3233fde17717c23d1f60a91cc631597e49a400c89b475395b1d
4.0.02025-09-02T11:30:51.986869ZDownload5b887c55a0f734b433b3b2d89f9cd1f99eb636b17e268a5b4259258bc916504b
4.0.12025-10-01T10:45:56.740131ZDownload825fed4d63050252a0b6e74f2d75844c4a85b664814be6993bd3493fb5239779
4.0.22025-10-08T09:52:26.647547ZDownloaddfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9
4.0.32025-11-19T09:22:53.251270ZDownloadc1668065e9ba04752570ad7e038288559d1e2ca5c6d0131c0f5f55e39e777413
4.0.42026-01-13T08:59:05.960024ZDownload275bf6bb2a00a9852c28d4e0b410da1d833a734d57d39d44f94bfc895a484ec3
4.0.52026-03-20T17:22:45.982377ZDownloadaadd943f4f8cc946882c954c187e6115a84c98c81ad1d9c6cbf0895a8c85da9c
4.0.62026-04-27T09:15:13.204350ZDownloada156715e7cd728130c592f30552575908aae5b100005fbc1f0fb16b3c03a3d10
4.0.72026-07-08T10:23:28.050463ZDownload45d14a0fb23e018d8287c32fc98d726ce466b231928ed9b9200f29bd3ccd39ae
4.0.82026-07-13T09:26:58.646229ZDownload59f99162d27dff3620f1d21165ce802237eb4556fed563c0902403f8207a7c00
4.0.92026-07-27T10:57:24.697667ZDownload164cb286486106527dbcf8c76dfd9b7a3661ceb588ce8cda462de787b31fbca5
4.0.102026-07-31T09:32:53.708988ZDownloadb94f5da9ed3d081fd4ecc426c260998b5f4f4eb2f6d89b7e5472edef0b2b2a1b
4.0.112026-09-02T12:25:53.610692ZDownload8a5c5761af8e31748bba3c82f68925ace40f3225c3eea25be9beb57eca7cd7a8
4.1.02026-10-14T09:25:14.648846ZDownload744d10797f628d7caedf72a324906002b168d714c552ef34cbb0ff2bea8e79ab
5.0.02026-10-14T13:08:30.758584ZDownload50df3d1558953a0d936401c1687cc41dbc039f9132f538c7bcb2aac2a580ae7f

Dependencies

analyzer "\u003e=0.27.1 \u003c0.30.0"

barback "^0.15.0"

code_transformers "\u003e=0.4.1 \u003c0.6.0"

crypto "\u003e=0.9.2 \u003c3.0.0"

glob "^1.1.0"

logging "^0.11.2"

path "^1.1.0"

shelf "^0.6.5"

shelf_static "^0.2.3"

stack_trace "^1.6.0"

watcher "^0.9.7"

yaml "^2.1.0"