-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdefault.nix
61 lines (53 loc) · 2.39 KB
/
default.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
{ stdenv, lib, pkgs }: {
buildElmAWSCloudFront = { src, lambdas, elmSrc, elmRegistryDat }@attrs:
stdenv.mkDerivation {
name = "elm-aws-cloudfront";
src = src;
buildInputs =
[ pkgs.elmPackages.elm pkgs.esbuild pkgs.nodePackages.uglify-js ];
buildPhase = pkgs.elmPackages.fetchElmDeps {
elmPackages = import elmSrc;
elmVersion = "0.19.1";
registryDat = elmRegistryDat;
};
installPhase = let
buildFlags = flags: "{flags: {${lib.concatStringsSep ", " flags}}}";
moduleName = module: lib.removeSuffix ".elm" (baseNameOf module);
jsHandler = lambda:
pkgs.writeText "${moduleName lambda.module}.js" ''
const {Elm} = require('./elm.tmp');
const app = Elm.${moduleName lambda.module}.init(${
if lambda ? "flags" then buildFlags lambda.flags else ""
});
exports.handler = (event, context, callback) => {
const caller = (output) => {
callback(null, output);
app.ports.outputEvent.unsubscribe(caller);
}
app.ports.outputEvent.subscribe(caller);
app.ports.inputEvent.send(event);
}
'';
in "${lib.concatStrings (map (lambda: ''
mkdir -p $out
echo "creating js handler for ${baseNameOf lambda.module}"
cp ${jsHandler lambda} $out/${moduleName lambda.module}.tmp.js
echo "compiling ${baseNameOf lambda.module}"
${pkgs.elmPackages.elm}/bin/elm make ${lambda.module} --optimize --output $out/elm.tmp.js
echo "bundle ${moduleName lambda.module}"
${pkgs.esbuild}/bin/esbuild --bundle --minify --platform=node --log-level=silent --outfile=$out/${
moduleName lambda.module
}.js $out/${moduleName lambda.module}.tmp.js
echo "minimize ${moduleName lambda.module}"
${pkgs.nodePackages.uglify-js}/bin/uglifyjs $out/${
moduleName lambda.module
}.js --compress 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe'\
| ${pkgs.nodePackages.uglify-js}/bin/uglifyjs --mangle --output $out/${
moduleName lambda.module
}.js
echo "cleanup temporary files"
rm $out/*.tmp.js
echo "module output ${moduleName lambda.module}.js"
'') lambdas)}";
};
}