summary refs log tree commit diff
path: root/pkgs/applications/networking/instant-messengers/riot/yarn2nix.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/networking/instant-messengers/riot/yarn2nix.nix')
-rw-r--r--pkgs/applications/networking/instant-messengers/riot/yarn2nix.nix320
1 files changed, 0 insertions, 320 deletions
diff --git a/pkgs/applications/networking/instant-messengers/riot/yarn2nix.nix b/pkgs/applications/networking/instant-messengers/riot/yarn2nix.nix
deleted file mode 100644
index 5dd79fdf1d8..00000000000
--- a/pkgs/applications/networking/instant-messengers/riot/yarn2nix.nix
+++ /dev/null
@@ -1,320 +0,0 @@
-{ pkgs ? import <nixpkgs> {}
-, nodejs ? pkgs.nodejs
-, yarn ? pkgs.yarn
-}:
-
-let
-  inherit (pkgs) stdenv lib fetchurl linkFarm;
-in rec {
-  # Export yarn again to make it easier to find out which yarn was used.
-  inherit yarn;
-
-  # Re-export pkgs
-  inherit pkgs;
-
-  unlessNull = item: alt:
-    if item == null then alt else item;
-
-  reformatPackageName = pname:
-    let
-      # regex adapted from `validate-npm-package-name`
-      # will produce 3 parts e.g.
-      # "@someorg/somepackage" -> [ "@someorg/" "someorg" "somepackage" ]
-      # "somepackage" -> [ null null "somepackage" ]
-      parts = builtins.tail (builtins.match "^(@([^/]+)/)?([^/]+)$" pname);
-      # if there is no organisation we need to filter out null values.
-      non-null = builtins.filter (x: x != null) parts;
-    in builtins.concatStringsSep "-" non-null;
-
-  # https://docs.npmjs.com/files/package.json#license
-  # TODO: support expression syntax (OR, AND, etc)
-  spdxLicense = licstr:
-    if licstr == "UNLICENSED" then
-      lib.licenses.unfree
-    else
-      lib.findFirst
-        (l: l ? spdxId && l.spdxId == licstr)
-        { shortName = licstr; }
-        (builtins.attrValues lib.licenses);
-
-  # Generates the yarn.nix from the yarn.lock file
-  mkYarnNix = yarnLock:
-    pkgs.runCommand "yarn.nix" {}
-      "${yarn2nix}/bin/yarn2nix --lockfile ${yarnLock} --no-patch > $out";
-
-  # Loads the generated offline cache. This will be used by yarn as
-  # the package source.
-  importOfflineCache = yarnNix:
-    let
-      pkg = import yarnNix { inherit fetchurl linkFarm; };
-    in
-      pkg.offline_cache;
-
-  defaultYarnFlags = [
-    "--offline"
-    "--frozen-lockfile"
-    "--ignore-engines"
-    "--ignore-scripts"
-  ];
-
-  mkYarnModules = {
-    name,
-    pname,
-    packageJSON,
-    yarnLock,
-    yarnNix ? mkYarnNix yarnLock,
-    yarnFlags ? defaultYarnFlags,
-    pkgConfig ? {},
-    preBuild ? "",
-    workspaceDependencies ? [],
-  }:
-    let
-      offlineCache = importOfflineCache yarnNix;
-      extraBuildInputs = (lib.flatten (builtins.map (key:
-        pkgConfig.${key} . buildInputs or []
-      ) (builtins.attrNames pkgConfig)));
-      postInstall = (builtins.map (key:
-        if (pkgConfig.${key} ? postInstall) then
-          ''
-            for f in $(find -L -path '*/node_modules/${key}' -type d); do
-              (cd "$f" && (${pkgConfig.${key}.postInstall}))
-            done
-          ''
-        else
-          ""
-      ) (builtins.attrNames pkgConfig));
-      workspaceJSON = pkgs.writeText
-        "${name}-workspace-package.json"
-        (builtins.toJSON { private = true; workspaces = ["deps/**"]; }); # scoped packages need second splat
-      workspaceDependencyLinks = lib.concatMapStringsSep "\n"
-        (dep: ''
-          mkdir -p "deps/${dep.pname}"
-          ln -sf ${dep.packageJSON} "deps/${dep.pname}/package.json"
-        '')
-        workspaceDependencies;
-    in stdenv.mkDerivation {
-      inherit preBuild name;
-      phases = ["configurePhase" "buildPhase"];
-      buildInputs = [ yarn nodejs ] ++ extraBuildInputs;
-
-      configurePhase = ''
-        # Yarn writes cache directories etc to $HOME.
-        export HOME=$PWD/yarn_home
-      '';
-
-      buildPhase = ''
-        runHook preBuild
-
-        mkdir -p "deps/${pname}"
-        cp ${packageJSON} "deps/${pname}/package.json"
-        cp ${workspaceJSON} ./package.json
-        cp ${yarnLock} ./yarn.lock
-        chmod +w ./yarn.lock
-
-        yarn config --offline set yarn-offline-mirror ${offlineCache}
-
-        # Do not look up in the registry, but in the offline cache.
-        # TODO: Ask upstream to fix this mess.
-        sed -i -E '/resolved /{s|https://registry.yarnpkg.com/||;s|[@/:-]|_|g}' yarn.lock
-
-        ${workspaceDependencyLinks}
-        yarn install ${lib.escapeShellArgs yarnFlags}
-
-        ${lib.concatStringsSep "\n" postInstall}
-
-        mkdir $out
-        mv node_modules $out/
-        mv deps $out/
-        patchShebangs $out
-      '';
-    };
-
-  # This can be used as a shellHook in mkYarnPackage. It brings the built node_modules into
-  # the shell-hook environment.
-  linkNodeModulesHook = ''
-    if [[ -d node_modules || -L node_modules ]]; then
-      echo "./node_modules is present. Replacing."
-      rm -rf node_modules
-    fi
-
-    ln -s "$node_modules" node_modules
-  '';
-
-  mkYarnWorkspace = {
-    src,
-    packageJSON ? src+"/package.json",
-    yarnLock ? src+"/yarn.lock",
-    packageOverrides ? {},
-    ...
-  }@attrs:
-  let
-    package = lib.importJSON packageJSON;
-    packageGlobs = package.workspaces;
-    globElemToRegex = lib.replaceStrings ["*"] [".*"];
-    # PathGlob -> [PathGlobElem]
-    splitGlob = lib.splitString "/";
-    # Path -> [PathGlobElem] -> [Path]
-    # Note: Only directories are included, everything else is filtered out
-    expandGlobList = base: globElems:
-    let
-      elemRegex = globElemToRegex (lib.head globElems);
-      rest = lib.tail globElems;
-      children = lib.attrNames (lib.filterAttrs (name: type: type == "directory") (builtins.readDir base));
-      matchingChildren = lib.filter (child: builtins.match elemRegex child != null) children;
-    in if globElems == []
-      then [ base ]
-      else lib.concatMap (child: expandGlobList (base+("/"+child)) rest) matchingChildren;
-    # Path -> PathGlob -> [Path]
-    expandGlob = base: glob: expandGlobList base (splitGlob glob);
-    packagePaths = lib.concatMap (expandGlob src) packageGlobs;
-    packages = lib.listToAttrs (map (src:
-    let
-      packageJSON = src+"/package.json";
-      package = lib.importJSON packageJSON;
-      allDependencies = lib.foldl (a: b: a // b) {} (map (field: lib.attrByPath [field] {} package) ["dependencies" "devDependencies"]);
-    in rec {
-      name = reformatPackageName package.name;
-      value = mkYarnPackage (builtins.removeAttrs attrs ["packageOverrides"] // {
-        inherit src packageJSON yarnLock;
-        workspaceDependencies = lib.mapAttrsToList (name: version: packages.${name})
-          (lib.filterAttrs (name: version: packages ? ${name}) allDependencies);
-      } // lib.attrByPath [name] {} packageOverrides);
-    }) packagePaths);
-  in packages;
-
-  mkYarnPackage = {
-    name ? null,
-    src,
-    packageJSON ? src + "/package.json",
-    yarnLock ? src + "/yarn.lock",
-    yarnNix ? mkYarnNix yarnLock,
-    yarnFlags ? defaultYarnFlags,
-    yarnPreBuild ? "",
-    pkgConfig ? {},
-    extraBuildInputs ? [],
-    publishBinsFor ? null,
-    workspaceDependencies ? [],
-    ...
-  }@attrs:
-    let
-      package = lib.importJSON packageJSON;
-      pname = package.name;
-      safeName = reformatPackageName pname;
-      version = package.version;
-      baseName = unlessNull name "${safeName}-${version}";
-      deps = mkYarnModules {
-        name = "${safeName}-modules-${version}";
-        preBuild = yarnPreBuild;
-        workspaceDependencies = workspaceDependenciesTransitive;
-        inherit packageJSON pname yarnLock yarnNix yarnFlags pkgConfig;
-      };
-      publishBinsFor_ = unlessNull publishBinsFor [pname];
-      linkDirFunction = ''
-        linkDirToDirLinks() {
-          target=$1
-          if [ ! -f "$target" ]; then
-            mkdir -p "$target"
-          elif [ -L "$target" ]; then
-            local new=$(mktemp -d)
-            trueSource=$(realpath "$target")
-            if [ "$(ls $trueSource | wc -l)" -gt 0 ]; then
-              ln -s $trueSource/* $new/
-            fi
-            rm -r "$target"
-            mv "$new" "$target"
-          fi
-        }
-      '';
-      workspaceDependenciesTransitive = lib.unique ((lib.flatten (builtins.map (dep: dep.workspaceDependencies) workspaceDependencies)) ++ workspaceDependencies);
-      workspaceDependencyCopy = lib.concatMapStringsSep "\n"
-        (dep: ''
-          # ensure any existing scope directory is not a symlink
-          linkDirToDirLinks "$(dirname node_modules/${dep.pname})"
-          mkdir -p "deps/${dep.pname}"
-          tar -xf "${dep}/tarballs/${dep.name}.tgz" --directory "deps/${dep.pname}" --strip-components=1
-          if [ ! -e "deps/${dep.pname}/node_modules" ]; then
-            ln -s "${deps}/deps/${dep.pname}/node_modules" "deps/${dep.pname}/node_modules"
-          fi
-        '')
-        workspaceDependenciesTransitive;
-    in stdenv.mkDerivation (builtins.removeAttrs attrs ["pkgConfig" "workspaceDependencies"] // {
-      inherit src;
-
-      name = baseName;
-
-      buildInputs = [ yarn nodejs ] ++ extraBuildInputs;
-
-      node_modules = deps + "/node_modules";
-
-      configurePhase = attrs.configurePhase or ''
-        runHook preConfigure
-
-        for localDir in npm-packages-offline-cache node_modules; do
-          if [[ -d $localDir || -L $localDir ]]; then
-            echo "$localDir dir present. Removing."
-            rm -rf $localDir
-          fi
-        done
-
-        mkdir -p "deps/${pname}"
-        shopt -s extglob
-        cp -r !(deps) "deps/${pname}"
-        shopt -u extglob
-        ln -s ${deps}/deps/${pname}/node_modules "deps/${pname}/node_modules"
-
-        cp -r $node_modules node_modules
-        chmod -R +w node_modules
-
-        ${linkDirFunction}
-        linkDirToDirLinks "$(dirname node_modules/${pname})"
-        ln -s "deps/${pname}" "node_modules/${pname}"
-        ${workspaceDependencyCopy}
-
-        # Help yarn commands run in other phases find the package
-        echo "--cwd deps/${pname}" > .yarnrc
-        runHook postConfigure
-      '';
-
-      # Replace this phase on frontend packages where only the generated
-      # files are an interesting output.
-      installPhase = attrs.installPhase or ''
-        runHook preInstall
-
-        mkdir -p $out/{bin,libexec/${pname}}
-        mv node_modules $out/libexec/${pname}/node_modules
-        mv deps $out/libexec/${pname}/deps
-        node ${./nix/fixup_bin.js} $out/bin $out/libexec/${pname}/node_modules ${lib.concatStringsSep " " publishBinsFor_}
-
-        runHook postInstall
-      '';
-
-      doDist = true;
-      distPhase = attrs.distPhase or ''
-        # pack command ignores cwd option
-        rm -f .yarnrc
-        cd $out/libexec/${pname}/deps/${pname}
-        mkdir -p $out/tarballs/
-        yarn pack --ignore-scripts --filename $out/tarballs/${baseName}.tgz
-      '';
-
-      passthru = {
-        inherit pname package packageJSON deps;
-        workspaceDependencies = workspaceDependenciesTransitive;
-      } // (attrs.passthru or {});
-
-      meta = {
-        inherit (nodejs.meta) platforms;
-        description = packageJSON.description or "";
-        homepage = packageJSON.homepage or "";
-        version = packageJSON.version or "";
-        license = if packageJSON ? license then spdxLicense packageJSON.license else "";
-      } // (attrs.meta or {});
-    });
-
-  yarn2nix = mkYarnPackage {
-    src = ./.;
-    # yarn2nix is the only package that requires the yarnNix option.
-    # All the other projects can auto-generate that file.
-    yarnNix = ./yarn.nix;
-  };
-}