add: groundwork
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"tasks": {
|
||||||
|
"dev": "deno run --watch --allow-net main.ts"
|
||||||
|
},
|
||||||
|
"imports": {
|
||||||
|
"@std/assert": "jsr:@std/assert@1"
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+42
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-schemas": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1780327564,
|
||||||
|
"narHash": "sha256-HiRPtA0spK+Dkgbhz/1zW9glXxNVB+L4Rj2VYmdawb8=",
|
||||||
|
"rev": "6cc9bd98891b1fc6bb2b8cb3277df8bc72799ca6",
|
||||||
|
"revCount": 149,
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.5.0/019e83cf-9af3-78b1-ac5b-70e68ad1efe1/source.tar.gz"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%2A.tar.gz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1788404924,
|
||||||
|
"narHash": "sha256-lhEhY8X5EgkQ/eg6IFz4cc8jRuSYSvnxx1al7d1dvZ0=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "0968519e14f7aa7d3e9b389682bd74d2b51c8ce8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-schemas": "flake-schemas",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
{
|
||||||
|
description = "levin - storage conversion tool";
|
||||||
|
inputs = {
|
||||||
|
flake-schemas.url = "https://flakehub.com/f/DeterminateSystems/flake-schemas/*.tar.gz";
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{ self
|
||||||
|
, flake-schemas
|
||||||
|
, nixpkgs
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
supportedSystems = [ "x86_64-linux" "aarch64-darwin" "x86_64-darwin" "aarch64-linux" ];
|
||||||
|
forEachSupportedSystem = f:
|
||||||
|
nixpkgs.lib.genAttrs supportedSystems (system:
|
||||||
|
f {
|
||||||
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
});
|
||||||
|
in
|
||||||
|
{
|
||||||
|
schemas = flake-schemas.schemas;
|
||||||
|
devShells = forEachSupportedSystem ({ pkgs }: {
|
||||||
|
default = pkgs.mkShell {
|
||||||
|
packages = with pkgs; [
|
||||||
|
curl
|
||||||
|
git
|
||||||
|
jq
|
||||||
|
wget
|
||||||
|
nixpkgs-fmt
|
||||||
|
openssl
|
||||||
|
openssl.dev
|
||||||
|
patchelf
|
||||||
|
deno
|
||||||
|
pkg-config-unwrapped
|
||||||
|
ripgrep
|
||||||
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
PKG_CONFIG_PATH = "${pkgs.openssl.dev}/lib/pkgconfig";
|
||||||
|
# ZELLIJ_CONFIG_FILE = "config.kdl";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
packages = forEachSupportedSystem ({ pkgs }:
|
||||||
|
let
|
||||||
|
levinVersion = "0.0.1";
|
||||||
|
denoDeps = pkgs.stdenvNoCC.mkDerivation {
|
||||||
|
pname = "levin-deno-deps";
|
||||||
|
version = levinVersion;
|
||||||
|
src = ./.;
|
||||||
|
nativeBuildInputs = [ pkgs.deno pkgs.cacert ];
|
||||||
|
dontConfigure = true;
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
export HOME="$TMPDIR"
|
||||||
|
export DENO_DIR="$TMPDIR/deno-dir"
|
||||||
|
deno cache --vendor=false --frozen --lock=deno.lock main.ts
|
||||||
|
deno compile \
|
||||||
|
--vendor=false \
|
||||||
|
--frozen \
|
||||||
|
--lock=deno.lock \
|
||||||
|
--output "$TMPDIR/levin-cache-primer" \
|
||||||
|
main.ts
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p "$out"
|
||||||
|
cp -R "$DENO_DIR"/. "$out"
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
outputHashAlgo = "sha256";
|
||||||
|
outputHashMode = "recursive";
|
||||||
|
outputHash = "sha256-ndPlYrPgqHE4iE08JnKWPxAZfjWGd0Ez76aY4R1eITs=";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
levin = pkgs.stdenvNoCC.mkDerivation {
|
||||||
|
pname = "levin";
|
||||||
|
version = levinVersion;
|
||||||
|
src = ./.;
|
||||||
|
nativeBuildInputs = [ pkgs.deno ];
|
||||||
|
dontConfigure = true;
|
||||||
|
dontFixup = true;
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
export HOME="$TMPDIR"
|
||||||
|
export DENO_DIR="$TMPDIR/deno-dir"
|
||||||
|
cp -R ${denoDeps}/. "$DENO_DIR"
|
||||||
|
chmod -R u+w "$DENO_DIR"
|
||||||
|
deno compile \
|
||||||
|
--vendor=false \
|
||||||
|
--cached-only \
|
||||||
|
--frozen \
|
||||||
|
--lock=deno.lock \
|
||||||
|
--allow-all \
|
||||||
|
--output levin \
|
||||||
|
main.ts
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
install -Dm755 levin "$out/bin/levin"
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
const units = {
|
||||||
|
B: 1,
|
||||||
|
|
||||||
|
kB: 1000 ** 1,
|
||||||
|
KiB: 1024 ** 1,
|
||||||
|
|
||||||
|
MB: 1000 ** 2,
|
||||||
|
MiB: 1024 ** 2,
|
||||||
|
|
||||||
|
GB: 1000 ** 3,
|
||||||
|
GiB: 1024 ** 3,
|
||||||
|
|
||||||
|
TB: 1000 ** 4,
|
||||||
|
TiB: 1024 ** 4,
|
||||||
|
|
||||||
|
PB: 1000 ** 5,
|
||||||
|
PiB: 1024 ** 5,
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
type Unit = keyof typeof units;
|
||||||
|
|
||||||
|
function convert(value: number, from: Unit, to: Unit): number {
|
||||||
|
return value * units[from] / units[to];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (import.meta.main) {
|
||||||
|
console.log(convert(1, "MiB", "kB"));
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { assertEquals } from "@std/assert";
|
||||||
|
import { handler } from "./main.ts";
|
||||||
|
|
||||||
|
Deno.test("returns html on /", async () => {
|
||||||
|
const res = handler(new Request("http://localhost/"));
|
||||||
|
assertEquals(res.headers.get("content-type"), "text/html");
|
||||||
|
const body = await res.text();
|
||||||
|
assertEquals(body.includes("Welcome to Deno"), true);
|
||||||
|
});
|
||||||
|
|
||||||
|
Deno.test("returns json on /api", async () => {
|
||||||
|
const res = handler(new Request("http://localhost/api"));
|
||||||
|
const data = await res.json();
|
||||||
|
assertEquals(data.message, "Hello, world!");
|
||||||
|
assertEquals(typeof data.time, "string");
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user