default.nix (1321B)
1 { pkgs }: 2 let 3 lock = builtins.fromJSON (builtins.readFile ./sources.json); 4 sources = builtins.listToAttrs (map (row: { 5 name = row.slug; 6 value = pkgs.fetchzip { url = "https://api.github.com/repos/${row.repo}/tarball/${row.rev}"; hash = row.hash; extension = "tar.gz"; }; 7 }) lock); 8 aliases = pkgs.lib.concatMapStringsSep " " (row: "--alias:${row.name}=${sources.${row.slug}}/${row.entry}") lock; 9 dependencies = pkgs.lib.concatMapStringsSep "\n" (row: '' 10 cp -r ${sources.${row.slug}} "deps/${row.slug}" 11 '') lock; 12 licenses = pkgs.lib.concatMapStringsSep "\n" (row: '' 13 cp ${sources.${row.slug}}/LICENSE "$out/licenses/${row.slug}.txt" 14 '') lock; 15 in pkgs.runCommand "arboricx-codemirror" { nativeBuildInputs = [pkgs.esbuild pkgs.typescript pkgs.python3]; } '' 16 mkdir -p "$out/licenses" 17 cp ${./entry.ts} entry.ts 18 mkdir -p deps 19 ${dependencies} 20 cp ${./sources.json} sources.json 21 python3 ${./typecheck.py} 22 tsc -p tsconfig.upstream.json 23 esbuild entry.ts --bundle --format=esm --target=es2022 --tsconfig-raw='{"compilerOptions":{"useDefineForClassFields":false}}' --minify --legal-comments=linked ${aliases} --outfile="$out/codemirror.js" --metafile="$out/bundle-meta.json" 24 cp ${./sources.json} "$out/sources.json" 25 ${licenses} 26 cp -r types "$out/types" 27 cp -r deps "$out/deps" 28 ''