Merge pull request #231483 from hacker1024/feature/flutter-on-dart

buildFlutterApplication: Wrap buildDartApplication
This commit is contained in:
Maciej Krüger 2023-10-21 23:42:02 +02:00 committed by GitHub
commit b465d339b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 1844 additions and 169 deletions

View File

@ -12,6 +12,8 @@ If you are packaging a Flutter desktop application, use [`buildFlutterApplicatio
If the upstream source is missing a `pubspec.lock` file, you'll have to vendor one and specify it using `pubspecLockFile`. If it is needed, one will be generated for you and printed when attempting to build the derivation.
The `depsListFile` must always be provided when packaging in Nixpkgs. It will be generated and printed if the derivation is attempted to be built without one. Alternatively, `autoDepsList` may be set to `true` only when outside of Nixpkgs, as it relies on import-from-derivation.
The `dart` commands run can be overridden through `pubGetScript` and `dartCompileCommand`, you can also add flags using `dartCompileFlags` or `dartJitFlags`.
Dart supports multiple [outputs types](https://dart.dev/tools/dart-compile#types-of-output), you can choose between them using `dartOutputType` (defaults to `exe`). If you want to override the binaries path or the source path they come from, you can use `dartEntryPoints`. Outputs that require a runtime will automatically be wrapped with the relevant runtime (`dartaotruntime` for `aot-snapshot`, `dart run` for `jit-snapshot` and `kernel`, `node` for `js`), this can be overridden through `dartRuntimeCommand`.
@ -31,6 +33,7 @@ buildDartApplication rec {
};
pubspecLockFile = ./pubspec.lock;
depsListFile = ./deps.json;
vendorHash = "sha256-Atm7zfnDambN/BmmUf4BG0yUz/y6xWzf0reDw3Ad41s=";
}
```
@ -39,9 +42,7 @@ buildDartApplication rec {
The function `buildFlutterApplication` builds Flutter applications.
The deps.json file must always be provided when packaging in Nixpkgs. It will be generated and printed if the derivation is attempted to be built without one. Alternatively, `autoDepsList` may be set to `true` when outside of Nixpkgs, as it relies on import-from-derivation.
A `pubspec.lock` file must be available. See the [Dart documentation](#ssec-dart-applications) for more details.
See the [Dart documentation](#ssec-dart-applications) for more details on required files and arguments.
```nix
{ flutter, fetchFromGitHub }:

View File

@ -1,6 +1,7 @@
{ lib, stdenv, fetchDartDeps, runCommand, writeText, dartHooks, makeWrapper, dart, cacert, nodejs, darwin }:
{ lib, stdenv, callPackage, fetchDartDeps, runCommand, writeText, dartHooks, makeWrapper, dart, cacert, nodejs, darwin, jq }:
{ pubGetScript ? "dart pub get"
{ sdkSetupScript ? ""
, pubGetScript ? "dart pub get"
# Output type to produce. Can be any kind supported by dart
# https://dart.dev/tools/dart-compile#types-of-output
@ -18,12 +19,16 @@
, dartEntryPoints ? null
# Used when wrapping aot, jit, kernel, and js builds.
# Set to null to disable wrapping.
, dartRuntimeCommand ?
if dartOutputType == "aot-snapshot" then "${dart}/bin/dartaotruntime"
else if (dartOutputType == "jit-snapshot" || dartOutputType == "kernel") then "${dart}/bin/dart"
else if dartOutputType == "js" then "${nodejs}/bin/node"
else null
, dartRuntimeCommand ? if dartOutputType == "aot-snapshot" then "${dart}/bin/dartaotruntime"
else if (dartOutputType == "jit-snapshot" || dartOutputType == "kernel") then "${dart}/bin/dart"
else if dartOutputType == "js" then "${nodejs}/bin/node"
else null
, runtimeDependencies ? [ ]
, extraWrapProgramArgs ? ""
, customPackageOverrides ? { }
, autoDepsList ? false
, depsListFile ? null
, pubspecLockFile ? null
, vendorHash ? ""
, ...
@ -38,37 +43,81 @@ let
'';
}) {
buildDrvArgs = args;
inherit pubGetScript vendorHash pubspecLockFile;
inherit sdkSetupScript pubGetScript vendorHash pubspecLockFile;
};
inherit (dartHooks.override { inherit dart; }) dartConfigHook dartBuildHook dartInstallHook;
in
assert !(builtins.isString dartOutputType && dartOutputType != "") ->
throw "dartOutputType must be a non-empty string";
stdenv.mkDerivation (args // {
inherit pubGetScript dartCompileCommand dartOutputType dartRuntimeCommand
dartCompileFlags dartJitFlags;
inherit (dartHooks.override { inherit dart; }) dartConfigHook dartBuildHook dartInstallHook dartFixupHook;
baseDerivation = stdenv.mkDerivation (finalAttrs: args // {
inherit sdkSetupScript pubGetScript dartCompileCommand dartOutputType
dartRuntimeCommand dartCompileFlags dartJitFlags runtimeDependencies;
dartEntryPoints =
if (dartEntryPoints != null)
then writeText "entrypoints.json" (builtins.toJSON dartEntryPoints)
else null;
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
dart
dartDeps
dartConfigHook
dartBuildHook
dartInstallHook
makeWrapper
] ++ lib.optionals stdenv.isDarwin [
darwin.sigtool
];
runtimeDependencyLibraryPath = lib.makeLibraryPath finalAttrs.runtimeDependencies;
# When stripping, it seems some ELF information is lost and the dart VM cli
# runs instead of the expected program. Don't strip if it's an exe output.
dontStrip = args.dontStrip or (dartOutputType == "exe");
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [
dart
dartDeps
dartConfigHook
dartBuildHook
dartInstallHook
dartFixupHook
makeWrapper
jq
] ++ lib.optionals stdenv.isDarwin [
darwin.sigtool
];
passthru = { inherit dartDeps; } // (args.passthru or { });
preUnpack = ''
${lib.optionalString (!autoDepsList) ''
if ! { [ '${lib.boolToString (depsListFile != null)}' = 'true' ] ${lib.optionalString (depsListFile != null) "&& cmp -s <(jq -Sc . '${depsListFile}') <(jq -Sc . '${finalAttrs.passthru.dartDeps.depsListFile}')"}; }; then
echo 1>&2 -e '\nThe dependency list file was either not given or differs from the expected result.' \
'\nPlease choose one of the following solutions:' \
'\n - Duplicate the following file and pass it to the depsListFile argument.' \
'\n ${finalAttrs.passthru.dartDeps.depsListFile}' \
'\n - Set autoDepsList to true (not supported by Hydra or permitted in Nixpkgs)'.
exit 1
fi
''}
${args.preUnpack or ""}
'';
meta = (args.meta or { }) // { platforms = args.meta.platforms or dart.meta.platforms; };
})
# When stripping, it seems some ELF information is lost and the dart VM cli
# runs instead of the expected program. Don't strip if it's an exe output.
dontStrip = args.dontStrip or (dartOutputType == "exe");
passthru = { inherit dartDeps; } // (args.passthru or { });
meta = (args.meta or { }) // { platforms = args.meta.platforms or dart.meta.platforms; };
});
packageOverrideRepository = (callPackage ../../../development/compilers/dart/package-overrides { }) // customPackageOverrides;
productPackages = builtins.filter (package: package.kind != "dev")
(if autoDepsList
then lib.importJSON dartDeps.depsListFile
else
if depsListFile == null
then [ ]
else lib.importJSON depsListFile);
in
assert !(builtins.isString dartOutputType && dartOutputType != "") ->
throw "dartOutputType must be a non-empty string";
builtins.foldl'
(prev: package:
if packageOverrideRepository ? ${package.name}
then
prev.overrideAttrs
(packageOverrideRepository.${package.name} {
inherit (package)
name
version
kind
source
dependencies;
})
else prev)
baseDerivation
productPackages

View File

@ -3,6 +3,9 @@
dartConfigHook() {
echo "Executing dartConfigHook"
echo "Setting up SDK"
eval "$sdkSetupScript"
echo "Installing dependencies"
eval doPubGet "$pubGetScript" --offline

View File

@ -0,0 +1,32 @@
# shellcheck shell=bash
dartFixupHook() {
echo "Executing dartFixupHook"
declare -a wrapProgramArgs
# Add runtime library dependencies to the LD_LIBRARY_PATH.
# For some reason, the RUNPATH of the executable is not used to load dynamic libraries in dart:ffi with DynamicLibrary.open().
#
# This could alternatively be fixed with patchelf --add-needed, but this would cause all the libraries to be opened immediately,
# which is not what application authors expect.
echo "$runtimeDependencyLibraryPath"
if [[ ! -z "$runtimeDependencyLibraryPath" ]]; then
wrapProgramArgs+=(--suffix LD_LIBRARY_PATH : \"$runtimeDependencyLibraryPath\")
fi
if [[ ! -z "$extraWrapProgramArgs" ]]; then
wrapProgramArgs+=("$extraWrapProgramArgs")
fi
if [ ${#wrapProgramArgs[@]} -ne 0 ]; then
for f in "$out"/bin/*; do
echo "Wrapping $f..."
eval "wrapProgram \"$f\" ${wrapProgramArgs[@]}"
done
fi
echo "Finished dartFixupHook"
}
postFixupHooks+=(dartFixupHook)

View File

@ -12,4 +12,7 @@
dartInstallHook = makeSetupHook {
name = "dart-install-hook";
} ./dart-install-hook.sh;
dartFixupHook = makeSetupHook {
name = "dart-fixup-hook";
} ./dart-fixup-hook.sh;
}

View File

@ -169,6 +169,8 @@ let
dart pub deps --json | jq .packages > $out
runHook postBuild
'';
dontInstall = true;
} // (removeAttrs buildDrvInheritArgs [ "name" "pname" ]));
# As of Dart 3.0.0, Pub checks the revision of cached Git-sourced packages.

View File

@ -1,34 +1,28 @@
{ lib
, callPackage
, stdenvNoCC
, runCommand
, makeWrapper
, wrapGAppsHook
, llvmPackages_13
, fetchDartDeps
, buildDartApplication
, cacert
, glib
, flutter
, jq
}:
# absolutely no mac support for now
{ pubGetScript ? "flutter pub get"
, flutterBuildFlags ? [ ]
, runtimeDependencies ? [ ]
, customPackageOverrides ? { }
, autoDepsList ? false
, depsListFile ? null
, vendorHash ? ""
, pubspecLockFile ? null
, nativeBuildInputs ? [ ]
, preUnpack ? ""
, postFixup ? ""
, extraWrapProgramArgs ? ""
, ...
}@args:
let
flutterSetupScript = ''
(buildDartApplication.override {
dart = flutter;
fetchDartDeps = fetchDartDeps.override { dart = flutter; };
}) (args // {
sdkSetupScript = ''
# Pub needs SSL certificates. Dart normally looks in a hardcoded path.
# https://github.com/dart-lang/sdk/blob/3.1.0/runtime/bin/security_context_linux.cc#L48
#
@ -54,136 +48,56 @@ let
flutter config --enable-linux-desktop >/dev/null
'';
deps = callPackage ../dart/fetch-dart-deps { dart = flutter; } {
sdkSetupScript = flutterSetupScript;
inherit pubGetScript vendorHash pubspecLockFile;
buildDrvArgs = args;
};
nativeBuildInputs = (args.nativeBuildInputs or [ ]) ++ [ wrapGAppsHook ];
buildInputs = (args.buildInputs or [ ]) ++ [ glib ];
baseDerivation = llvmPackages_13.stdenv.mkDerivation (finalAttrs: args // {
inherit flutterBuildFlags runtimeDependencies;
dontDartBuild = true;
buildPhase = args.buildPhase or ''
runHook preBuild
outputs = [ "out" "debug" ];
mkdir -p build/flutter_assets/fonts
nativeBuildInputs = [
makeWrapper
deps
flutter
jq
glib
wrapGAppsHook
] ++ nativeBuildInputs;
doPubGet flutter pub get --offline -v
flutter build linux -v --release --split-debug-info="$debug" ${builtins.concatStringsSep " " (map (flag: "\"${flag}\"") flutterBuildFlags)}
dontWrapGApps = true;
runHook postBuild
'';
preUnpack = ''
${lib.optionalString (!autoDepsList) ''
if ! { [ '${lib.boolToString (depsListFile != null)}' = 'true' ] ${lib.optionalString (depsListFile != null) "&& cmp -s <(jq -Sc . '${depsListFile}') <(jq -Sc . '${finalAttrs.passthru.depsListFile}')"}; }; then
echo 1>&2 -e '\nThe dependency list file was either not given or differs from the expected result.' \
'\nPlease choose one of the following solutions:' \
'\n - Duplicate the following file and pass it to the depsListFile argument.' \
'\n ${finalAttrs.passthru.depsListFile}' \
'\n - Set autoDepsList to true (not supported by Hydra or permitted in Nixpkgs)'.
exit 1
fi
''}
dontDartInstall = true;
installPhase = args.installPhase or ''
runHook preInstall
${preUnpack}
'';
built=build/linux/*/release/bundle
configurePhase = ''
runHook preConfigure
mkdir -p $out/bin
mv $built $out/app
${flutterSetupScript}
for f in $(find $out/app -iname "*.desktop" -type f); do
install -D $f $out/share/applications/$(basename $f)
done
runHook postConfigure
'';
for f in $(find $out/app -maxdepth 1 -type f); do
ln -s $f $out/bin/$(basename $f)
done
buildPhase = ''
runHook preBuild
# make *.so executable
find $out/app -iname "*.so" -type f -exec chmod +x {} +
mkdir -p build/flutter_assets/fonts
# remove stuff like /build/source/packages/ubuntu_desktop_installer/linux/flutter/ephemeral
for f in $(find $out/app -executable -type f); do
if patchelf --print-rpath "$f" | grep /build; then # this ignores static libs (e,g. libapp.so) also
echo "strip RPath of $f"
newrp=$(patchelf --print-rpath $f | sed -r "s|/build.*ephemeral:||g" | sed -r "s|/build.*profile:||g")
patchelf --set-rpath "$newrp" "$f"
fi
done
doPubGet flutter pub get --offline -v
flutter build linux -v --release --split-debug-info="$debug" ${builtins.concatStringsSep " " (map (flag: "\"${flag}\"") finalAttrs.flutterBuildFlags)}
runHook postInstall
'';
runHook postBuild
'';
installPhase = ''
runHook preInstall
built=build/linux/*/release/bundle
mkdir -p $out/bin
mv $built $out/app
for f in $(find $out/app -iname "*.desktop" -type f); do
install -D $f $out/share/applications/$(basename $f)
done
for f in $(find $out/app -maxdepth 1 -type f); do
ln -s $f $out/bin/$(basename $f)
done
# make *.so executable
find $out/app -iname "*.so" -type f -exec chmod +x {} +
# remove stuff like /build/source/packages/ubuntu_desktop_installer/linux/flutter/ephemeral
for f in $(find $out/app -executable -type f); do
if patchelf --print-rpath "$f" | grep /build; then # this ignores static libs (e,g. libapp.so) also
echo "strip RPath of $f"
newrp=$(patchelf --print-rpath $f | sed -r "s|/build.*ephemeral:||g" | sed -r "s|/build.*profile:||g")
patchelf --set-rpath "$newrp" "$f"
fi
done
runHook postInstall
'';
postFixup = ''
# Add runtime library dependencies to the LD_LIBRARY_PATH.
# For some reason, the RUNPATH of the executable is not used to load dynamic libraries in dart:ffi with DynamicLibrary.open().
#
# This could alternatively be fixed with patchelf --add-needed, but this would cause all the libraries to be opened immediately,
# which is not what application authors expect.
for f in "$out"/bin/*; do
wrapProgram "$f" \
--suffix LD_LIBRARY_PATH : '${lib.makeLibraryPath finalAttrs.runtimeDependencies}' \
''${gappsWrapperArgs[@]} \
${extraWrapProgramArgs}
done
${postFixup}
'';
passthru = (args.passthru or {}) // {
inherit (deps) depsListFile;
};
});
packageOverrideRepository = (callPackage ../../development/compilers/flutter/package-overrides { }) // customPackageOverrides;
productPackages = builtins.filter (package: package.kind != "dev")
(if autoDepsList
then lib.importJSON deps.depsListFile
else
if depsListFile == null
then [ ]
else lib.importJSON depsListFile);
in
builtins.foldl'
(prev: package:
if packageOverrideRepository ? ${package.name}
then
prev.overrideAttrs
(packageOverrideRepository.${package.name} {
inherit (package)
name
version
kind
source
dependencies;
})
else prev)
baseDerivation
productPackages
dontWrapGApps = true;
extraWrapProgramArgs = ''
''${gappsWrapperArgs[@]} \
${extraWrapProgramArgs}
'';
})

View File

@ -29,6 +29,7 @@ buildDartApplication rec {
};
pubspecLockFile = ./pubspec.lock;
depsListFile = ./deps.json;
vendorHash = "sha256-PQvY+qFXovSXH5wuc60wCrt5RiooKcaGKYzbjKSvqso=";
nativeBuildInputs = [

View File

@ -0,0 +1,930 @@
[
{
"name": "sass",
"version": "1.69.0",
"kind": "root",
"source": "root",
"dependencies": [
"args",
"async",
"charcode",
"cli_pkg",
"cli_repl",
"collection",
"http",
"js",
"meta",
"native_synchronization",
"node_interop",
"package_config",
"path",
"pool",
"protobuf",
"pub_semver",
"source_maps",
"source_span",
"stack_trace",
"stream_channel",
"stream_transform",
"string_scanner",
"term_glyph",
"typed_data",
"watcher",
"analyzer",
"archive",
"crypto",
"dart_style",
"dartdoc",
"grinder",
"node_preamble",
"lints",
"protoc_plugin",
"pub_api_client",
"pubspec_parse",
"test",
"test_descriptor",
"test_process",
"yaml",
"cli_util"
]
},
{
"name": "cli_util",
"version": "0.4.0",
"kind": "dev",
"source": "hosted",
"dependencies": [
"meta",
"path"
]
},
{
"name": "path",
"version": "1.8.3",
"kind": "direct",
"source": "hosted",
"dependencies": []
},
{
"name": "meta",
"version": "1.10.0",
"kind": "direct",
"source": "hosted",
"dependencies": []
},
{
"name": "yaml",
"version": "3.1.2",
"kind": "dev",
"source": "hosted",
"dependencies": [
"collection",
"source_span",
"string_scanner"
]
},
{
"name": "string_scanner",
"version": "1.2.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"source_span"
]
},
{
"name": "source_span",
"version": "1.10.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"collection",
"path",
"term_glyph"
]
},
{
"name": "term_glyph",
"version": "1.2.1",
"kind": "direct",
"source": "hosted",
"dependencies": []
},
{
"name": "collection",
"version": "1.18.0",
"kind": "direct",
"source": "hosted",
"dependencies": []
},
{
"name": "test_process",
"version": "2.1.0",
"kind": "dev",
"source": "hosted",
"dependencies": [
"async",
"meta",
"path",
"test"
]
},
{
"name": "test",
"version": "1.24.6",
"kind": "dev",
"source": "hosted",
"dependencies": [
"analyzer",
"async",
"boolean_selector",
"collection",
"coverage",
"http_multi_server",
"io",
"js",
"matcher",
"node_preamble",
"package_config",
"path",
"pool",
"shelf",
"shelf_packages_handler",
"shelf_static",
"shelf_web_socket",
"source_span",
"stack_trace",
"stream_channel",
"test_api",
"test_core",
"typed_data",
"web_socket_channel",
"webkit_inspection_protocol",
"yaml"
]
},
{
"name": "webkit_inspection_protocol",
"version": "1.2.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"logging"
]
},
{
"name": "logging",
"version": "1.2.0",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "web_socket_channel",
"version": "2.4.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"crypto",
"stream_channel"
]
},
{
"name": "stream_channel",
"version": "2.1.2",
"kind": "direct",
"source": "hosted",
"dependencies": [
"async"
]
},
{
"name": "async",
"version": "2.11.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"collection",
"meta"
]
},
{
"name": "crypto",
"version": "3.0.3",
"kind": "dev",
"source": "hosted",
"dependencies": [
"typed_data"
]
},
{
"name": "typed_data",
"version": "1.3.2",
"kind": "direct",
"source": "hosted",
"dependencies": [
"collection"
]
},
{
"name": "test_core",
"version": "0.5.6",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"analyzer",
"args",
"async",
"boolean_selector",
"collection",
"coverage",
"frontend_server_client",
"glob",
"io",
"meta",
"package_config",
"path",
"pool",
"source_map_stack_trace",
"source_maps",
"source_span",
"stack_trace",
"stream_channel",
"test_api",
"vm_service",
"yaml"
]
},
{
"name": "vm_service",
"version": "11.10.0",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "test_api",
"version": "0.6.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"boolean_selector",
"collection",
"meta",
"source_span",
"stack_trace",
"stream_channel",
"string_scanner",
"term_glyph"
]
},
{
"name": "stack_trace",
"version": "1.11.1",
"kind": "direct",
"source": "hosted",
"dependencies": [
"path"
]
},
{
"name": "boolean_selector",
"version": "2.1.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"source_span",
"string_scanner"
]
},
{
"name": "source_maps",
"version": "0.10.12",
"kind": "direct",
"source": "hosted",
"dependencies": [
"source_span"
]
},
{
"name": "source_map_stack_trace",
"version": "2.1.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"path",
"source_maps",
"stack_trace"
]
},
{
"name": "pool",
"version": "1.5.1",
"kind": "direct",
"source": "hosted",
"dependencies": [
"async",
"stack_trace"
]
},
{
"name": "package_config",
"version": "2.1.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"path"
]
},
{
"name": "io",
"version": "1.0.4",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta",
"path",
"string_scanner"
]
},
{
"name": "glob",
"version": "2.1.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"collection",
"file",
"path",
"string_scanner"
]
},
{
"name": "file",
"version": "7.0.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta",
"path"
]
},
{
"name": "frontend_server_client",
"version": "3.2.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"path"
]
},
{
"name": "coverage",
"version": "1.6.3",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"args",
"logging",
"package_config",
"path",
"source_maps",
"stack_trace",
"vm_service"
]
},
{
"name": "args",
"version": "2.4.2",
"kind": "direct",
"source": "hosted",
"dependencies": []
},
{
"name": "analyzer",
"version": "5.13.0",
"kind": "dev",
"source": "hosted",
"dependencies": [
"_fe_analyzer_shared",
"collection",
"convert",
"crypto",
"glob",
"meta",
"package_config",
"path",
"pub_semver",
"source_span",
"watcher",
"yaml"
]
},
{
"name": "watcher",
"version": "1.1.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"async",
"path"
]
},
{
"name": "pub_semver",
"version": "2.1.4",
"kind": "direct",
"source": "hosted",
"dependencies": [
"collection",
"meta"
]
},
{
"name": "convert",
"version": "3.1.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"typed_data"
]
},
{
"name": "_fe_analyzer_shared",
"version": "61.0.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta"
]
},
{
"name": "shelf_web_socket",
"version": "1.0.4",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"shelf",
"stream_channel",
"web_socket_channel"
]
},
{
"name": "shelf",
"version": "1.4.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"collection",
"http_parser",
"path",
"stack_trace",
"stream_channel"
]
},
{
"name": "http_parser",
"version": "4.0.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"source_span",
"string_scanner",
"typed_data"
]
},
{
"name": "shelf_static",
"version": "1.1.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"convert",
"http_parser",
"mime",
"path",
"shelf"
]
},
{
"name": "mime",
"version": "1.0.4",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "shelf_packages_handler",
"version": "3.0.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"path",
"shelf",
"shelf_static"
]
},
{
"name": "node_preamble",
"version": "2.0.2",
"kind": "dev",
"source": "hosted",
"dependencies": []
},
{
"name": "matcher",
"version": "0.12.16",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"meta",
"stack_trace",
"term_glyph",
"test_api"
]
},
{
"name": "js",
"version": "0.6.7",
"kind": "direct",
"source": "hosted",
"dependencies": [
"meta"
]
},
{
"name": "http_multi_server",
"version": "3.2.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async"
]
},
{
"name": "test_descriptor",
"version": "2.0.1",
"kind": "dev",
"source": "hosted",
"dependencies": [
"async",
"collection",
"matcher",
"meta",
"path",
"term_glyph",
"test"
]
},
{
"name": "pubspec_parse",
"version": "1.2.3",
"kind": "dev",
"source": "hosted",
"dependencies": [
"checked_yaml",
"collection",
"json_annotation",
"pub_semver",
"yaml"
]
},
{
"name": "json_annotation",
"version": "4.8.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta"
]
},
{
"name": "checked_yaml",
"version": "2.0.3",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"json_annotation",
"source_span",
"yaml"
]
},
{
"name": "pub_api_client",
"version": "2.6.0",
"kind": "dev",
"source": "hosted",
"dependencies": [
"collection",
"http",
"oauth2",
"path",
"pubspec"
]
},
{
"name": "pubspec",
"version": "2.3.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"path",
"pub_semver",
"yaml",
"uri"
]
},
{
"name": "uri",
"version": "1.0.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"matcher",
"quiver"
]
},
{
"name": "quiver",
"version": "3.2.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"matcher"
]
},
{
"name": "oauth2",
"version": "2.0.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"crypto",
"http",
"http_parser"
]
},
{
"name": "http",
"version": "1.1.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"async",
"http_parser",
"meta"
]
},
{
"name": "protoc_plugin",
"version": "21.1.1",
"kind": "dev",
"source": "hosted",
"dependencies": [
"fixnum",
"path",
"protobuf"
]
},
{
"name": "protobuf",
"version": "3.1.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"collection",
"fixnum",
"meta"
]
},
{
"name": "fixnum",
"version": "1.1.0",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "lints",
"version": "2.1.1",
"kind": "dev",
"source": "hosted",
"dependencies": []
},
{
"name": "grinder",
"version": "0.9.4",
"kind": "dev",
"source": "hosted",
"dependencies": [
"cli_util",
"glob",
"meta",
"path",
"collection"
]
},
{
"name": "dartdoc",
"version": "6.3.0",
"kind": "dev",
"source": "hosted",
"dependencies": [
"analyzer",
"args",
"cli_util",
"collection",
"crypto",
"glob",
"html",
"logging",
"markdown",
"meta",
"package_config",
"path",
"pub_semver",
"source_span",
"yaml"
]
},
{
"name": "markdown",
"version": "7.1.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"args",
"meta"
]
},
{
"name": "html",
"version": "0.15.4",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"csslib",
"source_span"
]
},
{
"name": "csslib",
"version": "1.0.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"source_span"
]
},
{
"name": "dart_style",
"version": "2.3.2",
"kind": "dev",
"source": "hosted",
"dependencies": [
"analyzer",
"args",
"path",
"pub_semver",
"source_span"
]
},
{
"name": "archive",
"version": "3.3.9",
"kind": "dev",
"source": "hosted",
"dependencies": [
"crypto",
"path",
"pointycastle"
]
},
{
"name": "pointycastle",
"version": "3.7.3",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"convert",
"js"
]
},
{
"name": "stream_transform",
"version": "2.1.0",
"kind": "direct",
"source": "hosted",
"dependencies": []
},
{
"name": "node_interop",
"version": "2.1.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"js"
]
},
{
"name": "native_synchronization",
"version": "0.2.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"ffi"
]
},
{
"name": "ffi",
"version": "2.1.0",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "cli_repl",
"version": "0.2.3",
"kind": "direct",
"source": "hosted",
"dependencies": [
"async",
"js"
]
},
{
"name": "cli_pkg",
"version": "2.5.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"archive",
"async",
"charcode",
"cli_util",
"collection",
"crypto",
"glob",
"grinder",
"http",
"js",
"meta",
"node_interop",
"node_preamble",
"package_config",
"path",
"pool",
"pub_semver",
"pubspec_parse",
"retry",
"string_scanner",
"test",
"test_process",
"xml",
"yaml"
]
},
{
"name": "xml",
"version": "6.4.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"meta",
"petitparser"
]
},
{
"name": "petitparser",
"version": "6.0.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta"
]
},
{
"name": "retry",
"version": "3.1.2",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "charcode",
"version": "1.3.1",
"kind": "direct",
"source": "hosted",
"dependencies": []
}
]

View File

@ -16,6 +16,7 @@ buildDartApplication rec {
sourceRoot = "${src.name}/protoc_plugin";
pubspecLockFile = ./pubspec.lock;
depsListFile = ./deps.json;
vendorHash = "sha256-yNgQLCLDCbA07v9tIwPRks/xPAzLVykNtIk+8C0twYM=";
meta = with lib; {

View File

@ -0,0 +1,549 @@
[
{
"name": "protoc_plugin",
"version": "21.1.0",
"kind": "root",
"source": "root",
"dependencies": [
"fixnum",
"path",
"protobuf",
"collection",
"dart_flutter_team_lints",
"matcher",
"test"
]
},
{
"name": "test",
"version": "1.24.6",
"kind": "dev",
"source": "hosted",
"dependencies": [
"analyzer",
"async",
"boolean_selector",
"collection",
"coverage",
"http_multi_server",
"io",
"js",
"matcher",
"node_preamble",
"package_config",
"path",
"pool",
"shelf",
"shelf_packages_handler",
"shelf_static",
"shelf_web_socket",
"source_span",
"stack_trace",
"stream_channel",
"test_api",
"test_core",
"typed_data",
"web_socket_channel",
"webkit_inspection_protocol",
"yaml"
]
},
{
"name": "yaml",
"version": "3.1.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"source_span",
"string_scanner"
]
},
{
"name": "string_scanner",
"version": "1.2.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"source_span"
]
},
{
"name": "source_span",
"version": "1.10.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"path",
"term_glyph"
]
},
{
"name": "term_glyph",
"version": "1.2.1",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "path",
"version": "1.8.3",
"kind": "direct",
"source": "hosted",
"dependencies": []
},
{
"name": "collection",
"version": "1.18.0",
"kind": "dev",
"source": "hosted",
"dependencies": []
},
{
"name": "webkit_inspection_protocol",
"version": "1.2.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"logging"
]
},
{
"name": "logging",
"version": "1.2.0",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "web_socket_channel",
"version": "2.4.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"crypto",
"stream_channel"
]
},
{
"name": "stream_channel",
"version": "2.1.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async"
]
},
{
"name": "async",
"version": "2.11.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"meta"
]
},
{
"name": "meta",
"version": "1.9.1",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "crypto",
"version": "3.0.3",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"typed_data"
]
},
{
"name": "typed_data",
"version": "1.3.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection"
]
},
{
"name": "test_core",
"version": "0.5.6",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"analyzer",
"args",
"async",
"boolean_selector",
"collection",
"coverage",
"frontend_server_client",
"glob",
"io",
"meta",
"package_config",
"path",
"pool",
"source_map_stack_trace",
"source_maps",
"source_span",
"stack_trace",
"stream_channel",
"test_api",
"vm_service",
"yaml"
]
},
{
"name": "vm_service",
"version": "11.10.0",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "test_api",
"version": "0.6.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"boolean_selector",
"collection",
"meta",
"source_span",
"stack_trace",
"stream_channel",
"string_scanner",
"term_glyph"
]
},
{
"name": "stack_trace",
"version": "1.11.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"path"
]
},
{
"name": "boolean_selector",
"version": "2.1.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"source_span",
"string_scanner"
]
},
{
"name": "source_maps",
"version": "0.10.12",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"source_span"
]
},
{
"name": "source_map_stack_trace",
"version": "2.1.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"path",
"source_maps",
"stack_trace"
]
},
{
"name": "pool",
"version": "1.5.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"stack_trace"
]
},
{
"name": "package_config",
"version": "2.1.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"path"
]
},
{
"name": "io",
"version": "1.0.4",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta",
"path",
"string_scanner"
]
},
{
"name": "glob",
"version": "2.1.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"collection",
"file",
"path",
"string_scanner"
]
},
{
"name": "file",
"version": "7.0.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta",
"path"
]
},
{
"name": "frontend_server_client",
"version": "3.2.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"path"
]
},
{
"name": "coverage",
"version": "1.6.3",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"args",
"logging",
"package_config",
"path",
"source_maps",
"stack_trace",
"vm_service"
]
},
{
"name": "args",
"version": "2.4.2",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "analyzer",
"version": "6.2.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"_fe_analyzer_shared",
"collection",
"convert",
"crypto",
"glob",
"meta",
"package_config",
"path",
"pub_semver",
"source_span",
"watcher",
"yaml"
]
},
{
"name": "watcher",
"version": "1.1.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"path"
]
},
{
"name": "pub_semver",
"version": "2.1.4",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"meta"
]
},
{
"name": "convert",
"version": "3.1.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"typed_data"
]
},
{
"name": "_fe_analyzer_shared",
"version": "64.0.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta"
]
},
{
"name": "shelf_web_socket",
"version": "1.0.4",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"shelf",
"stream_channel",
"web_socket_channel"
]
},
{
"name": "shelf",
"version": "1.4.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"collection",
"http_parser",
"path",
"stack_trace",
"stream_channel"
]
},
{
"name": "http_parser",
"version": "4.0.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"source_span",
"string_scanner",
"typed_data"
]
},
{
"name": "shelf_static",
"version": "1.1.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"convert",
"http_parser",
"mime",
"path",
"shelf"
]
},
{
"name": "mime",
"version": "1.0.4",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "shelf_packages_handler",
"version": "3.0.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"path",
"shelf",
"shelf_static"
]
},
{
"name": "node_preamble",
"version": "2.0.2",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "matcher",
"version": "0.12.16",
"kind": "dev",
"source": "hosted",
"dependencies": [
"async",
"meta",
"stack_trace",
"term_glyph",
"test_api"
]
},
{
"name": "js",
"version": "0.6.7",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta"
]
},
{
"name": "http_multi_server",
"version": "3.2.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async"
]
},
{
"name": "dart_flutter_team_lints",
"version": "1.0.0",
"kind": "dev",
"source": "hosted",
"dependencies": [
"lints"
]
},
{
"name": "lints",
"version": "2.1.1",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "protobuf",
"version": "3.1.0",
"kind": "direct",
"source": "path",
"dependencies": [
"collection",
"fixnum",
"meta"
]
},
{
"name": "fixnum",
"version": "1.1.0",
"kind": "direct",
"source": "hosted",
"dependencies": []
}
]

View File

@ -12,6 +12,6 @@ buildDartApplication rec {
};
pubspecLockFile = ./pubspec.lock;
depsListFile = ./deps.json;
vendorHash = "16z3paq1nxlnzs20qlljnwa2ff6xfhdqzcq8d8izkl7w1j4hyxgn";
}

190
pkgs/tools/misc/domine/deps.json generated Normal file
View File

@ -0,0 +1,190 @@
[
{
"name": "domine",
"version": "1.1.0+3",
"kind": "root",
"source": "root",
"dependencies": [
"args",
"dart_openai",
"dio",
"dio_smart_retry",
"tint",
"lints"
]
},
{
"name": "lints",
"version": "2.1.1",
"kind": "dev",
"source": "hosted",
"dependencies": []
},
{
"name": "tint",
"version": "2.0.1",
"kind": "direct",
"source": "hosted",
"dependencies": []
},
{
"name": "dio_smart_retry",
"version": "5.0.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"dio",
"http_parser",
"path"
]
},
{
"name": "path",
"version": "1.8.3",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "http_parser",
"version": "4.0.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"source_span",
"string_scanner",
"typed_data"
]
},
{
"name": "typed_data",
"version": "1.3.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection"
]
},
{
"name": "collection",
"version": "1.17.2",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "string_scanner",
"version": "1.2.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"source_span"
]
},
{
"name": "source_span",
"version": "1.10.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"path",
"term_glyph"
]
},
{
"name": "term_glyph",
"version": "1.2.1",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "dio",
"version": "5.3.2",
"kind": "direct",
"source": "hosted",
"dependencies": [
"async",
"http_parser",
"meta",
"path"
]
},
{
"name": "meta",
"version": "1.9.1",
"kind": "transitive",
"source": "hosted",
"dependencies": []
},
{
"name": "async",
"version": "2.11.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"collection",
"meta"
]
},
{
"name": "dart_openai",
"version": "4.0.0",
"kind": "direct",
"source": "hosted",
"dependencies": [
"http",
"meta",
"collection",
"fetch_client"
]
},
{
"name": "fetch_client",
"version": "1.0.2",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"fetch_api",
"http"
]
},
{
"name": "http",
"version": "1.1.0",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"async",
"http_parser",
"meta"
]
},
{
"name": "fetch_api",
"version": "1.0.1",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"js"
]
},
{
"name": "js",
"version": "0.6.7",
"kind": "transitive",
"source": "hosted",
"dependencies": [
"meta"
]
},
{
"name": "args",
"version": "2.4.2",
"kind": "direct",
"source": "hosted",
"dependencies": []
}
]