fix(nix): move the bun packages to bun2nix — no more hand-bumped deps hash
`nix build .#punktfunk-web` has been broken since1e9957d9re-resolved web/bun.lock: the console's node_modules came from a fixed-output derivation whose single aggregate `outputHash` was last refreshed in4094f620, so every lockfile change silently invalidated it and the fix required a round-trip on a Linux nix box (build, read the `got:` hash, paste it back). The runner (sdk/bun.lock) had the same latent trap. Replace both FODs with bun2nix (github:nix-community/bun2nix, pinned to 2.1.2). `fetchBunDeps` turns a generated, committed `bun.nix` into bun's global install cache — ONE `fetchurl` per package, keyed by the integrity hash already in the lockfile — and the setup hook then runs a fully offline `bun install` in `bunRoot`. There is no aggregate hash left to go stale. The `@unom` scope needs no special handling: bun.lock records those tarballs' full git.unom.io URLs and the registry is read-public. `bun.nix` keeps itself in step: `bun2nix` is now a devDependency of both packages and regenerates the file on every `bun install` — web via `postinstall`, the SDK via `prepare`, because sdk/ is the published @punktfunk/host package and a postinstall would fire on consumers' installs. Both the flake input and the npm devDependency are pinned to the same exact version; `bun.nix` has no schema stability guarantee across bun2nix releases, so they move together (README documents this). Dropped along the way: the manual `cp -R ${deps}/node_modules` + `chmod -R u+w` + `patchShebangs web/node_modules` dance, since bun2nix patches shebangs inside the cache. `dontUseBunPatch` keeps the hook from running `patchShebangs .` over the whole repo checkout (it would rewrite scripts/web-init.sh, which we ship verbatim); `dontRunLifecycleScripts` preserves the old `--ignore-scripts` behaviour, so playwright still never tries to download browsers. Verified on a Linux nix box (Determinate Nix 3.21.5): `.#punktfunk-web` and `.#punktfunk-scripting` both build green, offline; the i18n guard reports its 421 compiled messages, the `Bun.serve` bundle guard passes, and `nix run .#punktfunk-scripting -- --list` discovers an installed plugin. `nix flake show --all-systems` evaluates every output. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> (cherry picked from commit 4cfe7f05ee608868857be9e7eec079044448a965)
This commit is contained in:
Generated
+82
@@ -1,5 +1,29 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"bun2nix": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": "systems",
|
||||||
|
"treefmt-nix": "treefmt-nix"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1784665499,
|
||||||
|
"narHash": "sha256-9BMxlTxCCDAeoNLtb1a/st7udtTIJep+wpUzquA29VU=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "bun2nix",
|
||||||
|
"rev": "0f2a1f0b6f42cebe3b149bf62d38754c5e0e9729",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "2.1.2",
|
||||||
|
"repo": "bun2nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"crane": {
|
"crane": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784172867,
|
"lastModified": 1784172867,
|
||||||
@@ -15,6 +39,27 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-parts": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"bun2nix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1782949081,
|
||||||
|
"narHash": "sha256-vp6Y/Grm98ESt6ceOkWiHWyZRDV3J1RID4w+6NWK9yA=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "17c9d6cdfc60c64f4ee8d306f9bc0b4ccb51481e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1784120854,
|
"lastModified": 1784120854,
|
||||||
@@ -33,6 +78,7 @@
|
|||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"bun2nix": "bun2nix",
|
||||||
"crane": "crane",
|
"crane": "crane",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
"rust-overlay": "rust-overlay"
|
"rust-overlay": "rust-overlay"
|
||||||
@@ -57,6 +103,42 @@
|
|||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1776166891,
|
||||||
|
"narHash": "sha256-bI8yrEGjrohR5hkQox7UrxDH7XqrYMwI8SL/LrJ1+S8=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "triplet",
|
||||||
|
"rev": "6de7bc09397911ce03636afbcf6118745ab2cda0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "triplet",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"bun2nix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1784369104,
|
||||||
|
"narHash": "sha256-47cxbcZODibHv3rELFQ9vZly0vUNkND/atn/U7HLeb0=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "df3c0640565d04a0261253cdd89fce78ec50168a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|||||||
@@ -8,6 +8,15 @@
|
|||||||
url = "github:oxalica/rust-overlay";
|
url = "github:oxalica/rust-overlay";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
# The bun packages' node_modules (punktfunk-web, punktfunk-scripting): one fetchurl per package,
|
||||||
|
# straight out of `bun.lock`'s integrity hashes — no hand-maintained aggregate deps hash to bump.
|
||||||
|
# PIN THE TAG. `bun.nix` has no schema stability guarantee across bun2nix versions, so this ref
|
||||||
|
# must move together with the `bun2nix` devDependency in web/package.json + sdk/package.json
|
||||||
|
# (which regenerates the file on every `bun install`). See packaging/nix/README.md.
|
||||||
|
bun2nix = {
|
||||||
|
url = "github:nix-community/bun2nix?ref=2.1.2";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
@@ -16,6 +25,7 @@
|
|||||||
nixpkgs,
|
nixpkgs,
|
||||||
crane,
|
crane,
|
||||||
rust-overlay,
|
rust-overlay,
|
||||||
|
bun2nix,
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
# Linux/x86_64 only — the host encodes with desktop NVENC and CI publishes no aarch64 leg
|
# Linux/x86_64 only — the host encodes with desktop NVENC and CI publishes no aarch64 leg
|
||||||
@@ -49,6 +59,8 @@
|
|||||||
craneLib = craneLibFor pkgs;
|
craneLib = craneLibFor pkgs;
|
||||||
src = self;
|
src = self;
|
||||||
inherit version;
|
inherit version;
|
||||||
|
# `.hook` + `.fetchBunDeps` (bun2nix v2 API) — see packages.nix.
|
||||||
|
bun2nix = bun2nix.packages.${system}.default;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
@@ -99,8 +111,7 @@
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
# `nix flake check` builds every package (web included — needs its deps hash filled in, see
|
# `nix flake check` builds every package.
|
||||||
# packaging/nix/README.md).
|
|
||||||
checks = forAllSystems (
|
checks = forAllSystems (
|
||||||
system:
|
system:
|
||||||
let
|
let
|
||||||
|
|||||||
+23
-12
@@ -229,18 +229,29 @@ The shell exports `PF_FFVK_VULKAN_INCLUDE` (Vulkan headers for pf-ffvk bindgen)
|
|||||||
the poisoned artifact already existed — so this shipped as a real crash-at-launch on Debian/Ubuntu,
|
the poisoned artifact already existed — so this shipped as a real crash-at-launch on Debian/Ubuntu,
|
||||||
not a latent one. Fixed 2026-07-27: the workflow no longer co-builds it and `build-deb.sh` now
|
not a latent one. Fixed 2026-07-27: the workflow no longer co-builds it and `build-deb.sh` now
|
||||||
rebuilds it unconditionally.)
|
rebuilds it unconditionally.)
|
||||||
- **The bun packages (`punktfunk-web`, `punktfunk-scripting`) — their `bun install` deps hashes.**
|
- **The bun packages (`punktfunk-web`, `punktfunk-scripting`) use [bun2nix](https://github.com/nix-community/bun2nix).**
|
||||||
Both build their `node_modules` in a *fixed-output derivation* (`bun install` needs the network +
|
Their `node_modules` is fetched **one `fetchurl` per package**, straight from the integrity hashes
|
||||||
the read-public `@unom` npm registry). Each `outputHash` (in `packaging/nix/packages.nix`) is
|
already in the lockfile, via a generated-and-committed `bun.nix` (`web/bun.nix`, `sdk/bun.nix`).
|
||||||
pinned to a resolved dependency set and **must be refreshed when its lockfile changes** —
|
There is **no aggregate deps hash to bump** — the previous design put `bun install` in a
|
||||||
`web/bun.lock` for the console, `sdk/bun.lock` for the runner: set that `outputHash = lib.fakeHash`,
|
fixed-output derivation whose single `outputHash` silently went stale on every lockfile change and
|
||||||
run `nix build .#punktfunk-web` (or `.#punktfunk-scripting`), and copy the `got: sha256-…` value
|
broke the build. `bun.nix` regenerates itself: `bun2nix` is a devDependency of both packages and
|
||||||
Nix prints back into the field. Everything downstream is offline (the console's codegen + vite
|
runs on every `bun install` (web's `postinstall`; the SDK's `prepare`, since sdk/ is the
|
||||||
build; the runner's `bun build --target=bun` bundle), so only the deps FODs ever need network.
|
*published* `@punktfunk/host` package and a `postinstall` would then fire on consumers' installs).
|
||||||
Both launchers exec `pkgs.bun` from the store — unlike the deb/rpm, which vendor a bun binary
|
Regenerate by hand with `cd web && bunx bun2nix -o bun.nix` if a lockfile is ever edited directly.
|
||||||
because apt/dnf have none.
|
The `@unom` scope needs no special handling: `web/bun.lock` records those tarballs' full
|
||||||
- **Commit `flake.lock`:** it pins the input revisions (nixpkgs / crane / rust-overlay). It is
|
`https://git.unom.io/api/packages/unom/npm/…` URLs and the registry is read-public (the same
|
||||||
generated on first eval and checked in.
|
anonymous pull CI's rpm/deb builds do).
|
||||||
|
|
||||||
|
> ⚠ **`bun.nix` has no schema stability across bun2nix versions.** The flake input is pinned
|
||||||
|
> (`github:nix-community/bun2nix?ref=2.1.2`) and the npm devDependency is pinned to the *same*
|
||||||
|
> exact version in `web/package.json` + `sdk/package.json`. Move both together, then rerun
|
||||||
|
> `bun install` in `web/` and `sdk/` to regenerate.
|
||||||
|
|
||||||
|
Everything past the deps fetch is offline (the console's codegen + vite build; the runner's
|
||||||
|
`bun build --target=bun` bundle). Both launchers exec `pkgs.bun` from the store — unlike the
|
||||||
|
deb/rpm, which vendor a bun binary because apt/dnf have none.
|
||||||
|
- **Commit `flake.lock`:** it pins the input revisions (nixpkgs / crane / rust-overlay / bun2nix).
|
||||||
|
It is generated on first eval and checked in.
|
||||||
- **Session Skia OSD is off under Nix.** `punktfunk-session`'s default `ui` feature draws its
|
- **Session Skia OSD is off under Nix.** `punktfunk-session`'s default `ui` feature draws its
|
||||||
on-screen stats/console overlay with `skia-safe`, whose build *downloads* a prebuilt Skia from
|
on-screen stats/console overlay with `skia-safe`, whose build *downloads* a prebuilt Skia from
|
||||||
the rust-skia releases — which Nix's network-less build sandbox forbids, and a from-source Skia
|
the rust-skia releases — which Nix's network-less build sandbox forbids, and a from-source Skia
|
||||||
|
|||||||
+135
-176
@@ -60,8 +60,10 @@
|
|||||||
bun,
|
bun,
|
||||||
nodejs,
|
nodejs,
|
||||||
makeWrapper,
|
makeWrapper,
|
||||||
cacert,
|
|
||||||
stdenvNoCC,
|
stdenvNoCC,
|
||||||
|
# bun2nix (github:nix-community/bun2nix, pinned in flake.nix): `.fetchBunDeps` turns a generated
|
||||||
|
# `bun.nix` into bun's global install cache, and `.hook` runs an offline `bun install` off it.
|
||||||
|
bun2nix,
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
gbm = if libgbm != null then libgbm else mesa;
|
gbm = if libgbm != null then libgbm else mesa;
|
||||||
@@ -287,119 +289,97 @@ in
|
|||||||
# Unlike apt/dnf — which have no bun in their repos and so VENDOR a bun binary into the package —
|
# Unlike apt/dnf — which have no bun in their repos and so VENDOR a bun binary into the package —
|
||||||
# Nix has `pkgs.bun`, so the launcher just execs it from the store (no vendored runtime). The
|
# Nix has `pkgs.bun`, so the launcher just execs it from the store (no vendored runtime). The
|
||||||
# systemd `--user` units + firewall wiring live in the NixOS module, pointed at this store path.
|
# systemd `--user` units + firewall wiring live in the NixOS module, pointed at this store path.
|
||||||
punktfunk-web =
|
punktfunk-web = stdenvNoCC.mkDerivation {
|
||||||
let
|
pname = "punktfunk-web";
|
||||||
# Offline node_modules for the console. `bun install` needs the network AND the @unom npm
|
inherit src version;
|
||||||
# registry (web/.npmrc → https://git.unom.io/api/packages/unom/npm/, read-public: the same
|
# nodejs: `bun run codegen` ends in a literal `node tools/check-i18n.mjs`, so `node` must be on
|
||||||
# anonymous pull CI's rpm/deb builds do), so it lives in a fixed-output derivation — FODs get
|
# PATH. (The JS CLIs' own `#!/usr/bin/env node` shebangs are already rewritten inside the
|
||||||
# network, and `outputHash` pins the result. `--ignore-scripts` skips the install-time
|
# bun2nix cache.) bun is the RUNTIME — the launcher execs it; node is build-time only.
|
||||||
# `prepare` codegen (it wants ../api/openapi.json, outside this web-only src scope); the build
|
nativeBuildInputs = [
|
||||||
# derivation below runs codegen itself where the whole tree is present.
|
bun
|
||||||
#
|
nodejs
|
||||||
# ⚠ When web/bun.lock changes, this hash must be refreshed: set `outputHash = lib.fakeHash`,
|
makeWrapper
|
||||||
# rebuild, and copy the sha256 Nix reports back here (see packaging/nix/README.md).
|
bun2nix.hook
|
||||||
webDeps = stdenvNoCC.mkDerivation {
|
];
|
||||||
pname = "punktfunk-web-deps";
|
|
||||||
inherit version;
|
|
||||||
src = src + "/web";
|
|
||||||
nativeBuildInputs = [
|
|
||||||
bun
|
|
||||||
cacert
|
|
||||||
];
|
|
||||||
dontConfigure = true;
|
|
||||||
buildPhase = ''
|
|
||||||
runHook preBuild
|
|
||||||
export HOME=$TMPDIR
|
|
||||||
export BUN_INSTALL_CACHE_DIR=$TMPDIR/bun-cache
|
|
||||||
export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
|
|
||||||
export NODE_EXTRA_CA_CERTS=$SSL_CERT_FILE
|
|
||||||
# copyfile backend ⇒ node_modules is fully materialised (no links into the ephemeral
|
|
||||||
# cache), so the tree survives the copy into the content-addressed $out.
|
|
||||||
bun install --frozen-lockfile --ignore-scripts --no-progress --backend=copyfile
|
|
||||||
runHook postBuild
|
|
||||||
'';
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
mkdir -p $out
|
|
||||||
cp -R node_modules $out/node_modules
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
dontFixup = true;
|
|
||||||
outputHashMode = "recursive";
|
|
||||||
outputHashAlgo = "sha256";
|
|
||||||
outputHash = "sha256-5oVZv65SMvq9i2REzHE8Pyn6qUZaV2FnPQdaouwcwoU="; # web/bun.lock deps (refresh on lockfile change; see README).
|
|
||||||
};
|
|
||||||
in
|
|
||||||
stdenvNoCC.mkDerivation {
|
|
||||||
pname = "punktfunk-web";
|
|
||||||
inherit src version;
|
|
||||||
# nodejs: the JS build tools' `.bin` shims are `#!/usr/bin/env node`; patchShebangs (below)
|
|
||||||
# repoints them at this node so they run in the sandbox. bun is still the RUNTIME (the launcher
|
|
||||||
# execs it); node is build-time only, for orval/paraglide/vite.
|
|
||||||
nativeBuildInputs = [
|
|
||||||
bun
|
|
||||||
nodejs
|
|
||||||
makeWrapper
|
|
||||||
];
|
|
||||||
|
|
||||||
# No cross-derivation dep cache: codegen + the vite build are fully offline (every input is in
|
# node_modules, materialised offline. `bun.nix` (generated from web/bun.lock by the `bun2nix`
|
||||||
# the vendored node_modules, the checked-in api/openapi.json, and web/project.inlang).
|
# devDependency's postinstall hook, and committed) lists ONE `fetchurl` per package, keyed by
|
||||||
#
|
# the lockfile's own integrity hash — including the @unom scope, whose tarball URLs the
|
||||||
# ⚠ "Offline" is load-bearing and NOT self-enforcing. inlang resolves the plugins in
|
# lockfile records in full (web/.npmrc → https://git.unom.io/api/packages/unom/npm/, read-public,
|
||||||
# web/project.inlang/settings.json `modules`, and a failed import is only a WARNING there:
|
# the same anonymous pull CI's rpm/deb builds do). That replaces the old single fixed-output
|
||||||
# paraglide then prints "Successfully compiled", exits 0, and emits ZERO messages, so the
|
# `bun install` derivation whose aggregate `outputHash` had to be hand-bumped on every lockfile
|
||||||
# console builds fine and dies at SSR time with every `m.foo()` undefined. That is exactly
|
# change — the failure mode this design removes.
|
||||||
# what a CDN URL in `modules` did in this network-less sandbox. The plugin is now a normal
|
bunDeps = bun2nix.fetchBunDeps { bunNix = src + "/web/bun.nix"; };
|
||||||
# devDependency referenced by path, and `bun run codegen` ends in tools/check-i18n.mjs, which
|
# `src` is the whole repo; the console (and its lockfile) live in web/.
|
||||||
# fails the build on a remote module or a short message count. Keep both properties.
|
bunRoot = "web";
|
||||||
buildPhase = ''
|
# The install-time `prepare` codegen is run explicitly in buildPhase instead (below), matching
|
||||||
runHook preBuild
|
# the deb/rpm builders — and the dependency lifecycle scripts stay off, as they were under the
|
||||||
export HOME=$TMPDIR
|
# old `--ignore-scripts` FOD (playwright's would try to download browsers).
|
||||||
cp -R ${webDeps}/node_modules web/node_modules
|
dontRunLifecycleScripts = true;
|
||||||
chmod -R u+w web/node_modules
|
# We drive the build/install ourselves; don't let the hook default them to `bun build`/`bun test`.
|
||||||
# The JS CLIs (orval, paraglide-js, vite, …) ship a `#!/usr/bin/env node` shebang, and the
|
dontUseBunBuild = true;
|
||||||
# build sandbox has no /usr/bin/env — rewrite them to the store `node` before running any
|
dontUseBunCheck = true;
|
||||||
# script (else `bun run codegen` dies with "bad interpreter: /usr/bin/env"). Patch the WHOLE
|
dontUseBunInstall = true;
|
||||||
# node_modules, not just .bin: bun's .bin entries are symlinks (skipped by patchShebangs'
|
# The hook's own patch phase would `patchShebangs .` over the ENTIRE repo checkout, rewriting
|
||||||
# `-type f`); the real shebang lives in each package's `dist/bin/*.js` that they point to.
|
# shell scripts we ship verbatim (scripts/web-init.sh). node_modules needs no patching — bun2nix
|
||||||
patchShebangs web/node_modules
|
# already patched each package's shebangs inside the cache.
|
||||||
cd web
|
dontUseBunPatch = true;
|
||||||
# `codegen` = orval (a typed React-Query client from ../api/openapi.json) + paraglide-js i18n
|
# …which also means setting HOME ourselves; bun writes there during install.
|
||||||
# compile; both write into src/ and are prerequisites of the build (normally the install-time
|
preConfigure = ''
|
||||||
# `prepare` hook, which was skipped in the deps FOD).
|
export HOME=$TMPDIR
|
||||||
bun run codegen
|
'';
|
||||||
# `build` = vite build ⇒ the Nitro `bun`-preset SSR bundle in .output (our Bun.serve TLS entry).
|
|
||||||
bun run build
|
|
||||||
# Guard: assert we produced the bun bundle, not a node one (same check the deb/rpm builders do).
|
|
||||||
grep -q 'Bun\.serve' .output/server/index.mjs \
|
|
||||||
|| { echo "ERROR: web/.output is not a bun bundle (wrong nitro preset)" >&2; exit 1; }
|
|
||||||
cd ..
|
|
||||||
runHook postBuild
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
# Everything past the deps fetch is offline: codegen + the vite build take every input from the
|
||||||
runHook preInstall
|
# installed node_modules, the checked-in api/openapi.json, and web/project.inlang.
|
||||||
# The SSR bundle + its static assets, plus the first-run helper and env sample.
|
#
|
||||||
mkdir -p $out/share/punktfunk-web/.output
|
# ⚠ "Offline" is load-bearing and NOT self-enforcing. inlang resolves the plugins in
|
||||||
cp -R web/.output/server $out/share/punktfunk-web/.output/server
|
# web/project.inlang/settings.json `modules`, and a failed import is only a WARNING there:
|
||||||
cp -R web/.output/public $out/share/punktfunk-web/.output/public
|
# paraglide then prints "Successfully compiled", exits 0, and emits ZERO messages, so the
|
||||||
install -Dm0755 scripts/web-init.sh $out/share/punktfunk-web/web-init.sh
|
# console builds fine and dies at SSR time with every `m.foo()` undefined. That is exactly
|
||||||
install -Dm0644 web/web.env.example $out/share/punktfunk-web/web.env.example
|
# what a CDN URL in `modules` did in this network-less sandbox. The plugin is now a normal
|
||||||
|
# devDependency referenced by path, and `bun run codegen` ends in tools/check-i18n.mjs, which
|
||||||
|
# fails the build on a remote module or a short message count. Keep both properties.
|
||||||
|
buildPhase = ''
|
||||||
|
runHook preBuild
|
||||||
|
# node_modules is already in place: the bun2nix hook ran an offline `bun install` in web/
|
||||||
|
# (bunRoot) off the store-fetched cache, before this phase.
|
||||||
|
cd web
|
||||||
|
# `codegen` = orval (a typed React-Query client from ../api/openapi.json) + paraglide-js i18n
|
||||||
|
# compile; both write into src/ and are prerequisites of the build (normally the install-time
|
||||||
|
# `prepare` hook, which `dontRunLifecycleScripts` skips above).
|
||||||
|
bun run codegen
|
||||||
|
# `build` = vite build ⇒ the Nitro `bun`-preset SSR bundle in .output (our Bun.serve TLS entry).
|
||||||
|
bun run build
|
||||||
|
# Guard: assert we produced the bun bundle, not a node one (same check the deb/rpm builders do).
|
||||||
|
grep -q 'Bun\.serve' .output/server/index.mjs \
|
||||||
|
|| { echo "ERROR: web/.output is not a bun bundle (wrong nitro preset)" >&2; exit 1; }
|
||||||
|
cd ..
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
# PATH-stable launcher: run the SSR bundle on bun from the store (mirrors the deb/rpm
|
installPhase = ''
|
||||||
# /usr/bin/punktfunk-web-server, minus the vendored-bun indirection).
|
runHook preInstall
|
||||||
makeWrapper ${bun}/bin/bun $out/bin/punktfunk-web-server \
|
# The SSR bundle + its static assets, plus the first-run helper and env sample.
|
||||||
--add-flags "$out/share/punktfunk-web/.output/server/index.mjs"
|
mkdir -p $out/share/punktfunk-web/.output
|
||||||
runHook postInstall
|
cp -R web/.output/server $out/share/punktfunk-web/.output/server
|
||||||
'';
|
cp -R web/.output/public $out/share/punktfunk-web/.output/public
|
||||||
|
install -Dm0755 scripts/web-init.sh $out/share/punktfunk-web/web-init.sh
|
||||||
|
install -Dm0644 web/web.env.example $out/share/punktfunk-web/web.env.example
|
||||||
|
|
||||||
dontFixup = true;
|
# PATH-stable launcher: run the SSR bundle on bun from the store (mirrors the deb/rpm
|
||||||
|
# /usr/bin/punktfunk-web-server, minus the vendored-bun indirection).
|
||||||
|
makeWrapper ${bun}/bin/bun $out/bin/punktfunk-web-server \
|
||||||
|
--add-flags "$out/share/punktfunk-web/.output/server/index.mjs"
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
meta = meta // {
|
dontFixup = true;
|
||||||
description = "punktfunk management web console (Nitro SSR on bun + React)";
|
|
||||||
mainProgram = "punktfunk-web-server";
|
meta = meta // {
|
||||||
};
|
description = "punktfunk management web console (Nitro SSR on bun + React)";
|
||||||
|
mainProgram = "punktfunk-web-server";
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# --- plugin/script runner (punktfunk-scripting) --------------------------------------------------
|
# --- plugin/script runner (punktfunk-scripting) --------------------------------------------------
|
||||||
# The host's automation runner: the `@punktfunk/host` SDK's `punktfunk-scripting` CLI (built on
|
# The host's automation runner: the `@punktfunk/host` SDK's `punktfunk-scripting` CLI (built on
|
||||||
@@ -410,77 +390,56 @@ in
|
|||||||
#
|
#
|
||||||
# Unlike the deb/rpm we don't `bun build` into a bundle + vendor bun; we still bundle (one
|
# Unlike the deb/rpm we don't `bun build` into a bundle + vendor bun; we still bundle (one
|
||||||
# self-contained JS, effect inlined) but the launcher execs `pkgs.bun` from the store.
|
# self-contained JS, effect inlined) but the launcher execs `pkgs.bun` from the store.
|
||||||
punktfunk-scripting =
|
punktfunk-scripting = stdenvNoCC.mkDerivation {
|
||||||
let
|
pname = "punktfunk-scripting";
|
||||||
# Offline node_modules for the SDK build — same fixed-output pattern as punktfunk-web's webDeps
|
inherit src version;
|
||||||
# (`bun install` needs the network). ⚠ Refresh `outputHash` when sdk/bun.lock changes (set
|
nativeBuildInputs = [
|
||||||
# lib.fakeHash, rebuild, copy the printed sha256 — see packaging/nix/README.md).
|
bun
|
||||||
sdkDeps = stdenvNoCC.mkDerivation {
|
makeWrapper
|
||||||
pname = "punktfunk-scripting-deps";
|
bun2nix.hook
|
||||||
inherit version;
|
];
|
||||||
src = src + "/sdk";
|
|
||||||
nativeBuildInputs = [
|
|
||||||
bun
|
|
||||||
cacert
|
|
||||||
];
|
|
||||||
dontConfigure = true;
|
|
||||||
buildPhase = ''
|
|
||||||
runHook preBuild
|
|
||||||
export HOME=$TMPDIR
|
|
||||||
export BUN_INSTALL_CACHE_DIR=$TMPDIR/bun-cache
|
|
||||||
export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
|
|
||||||
export NODE_EXTRA_CA_CERTS=$SSL_CERT_FILE
|
|
||||||
bun install --frozen-lockfile --ignore-scripts --no-progress --backend=copyfile
|
|
||||||
runHook postBuild
|
|
||||||
'';
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
mkdir -p $out
|
|
||||||
cp -R node_modules $out/node_modules
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
dontFixup = true;
|
|
||||||
outputHashMode = "recursive";
|
|
||||||
outputHashAlgo = "sha256";
|
|
||||||
outputHash = "sha256-+KCKCA0q0bwTxr7bsA3X4DbT/8nUjJA/JIoJU6BfiZw="; # sdk/bun.lock deps (refresh on lockfile change; see README).
|
|
||||||
};
|
|
||||||
in
|
|
||||||
stdenvNoCC.mkDerivation {
|
|
||||||
pname = "punktfunk-scripting";
|
|
||||||
inherit src version;
|
|
||||||
nativeBuildInputs = [
|
|
||||||
bun
|
|
||||||
makeWrapper
|
|
||||||
];
|
|
||||||
|
|
||||||
# `bun build --target=bun` bundles the runner CLI to ONE self-contained JS: effect + the SDK
|
# Same bun2nix wiring as punktfunk-web, against sdk/bun.lock's generated sdk/bun.nix (kept in
|
||||||
# are inlined, and the runner's dynamic `import()` of the operator's plugin files is left as a
|
# step by the `bun2nix` devDependency's `prepare` script — `prepare`, not `postinstall`,
|
||||||
# runtime import (bun keeps unresolvable dynamic specifiers external). Fully offline.
|
# because sdk/ is the PUBLISHED @punktfunk/host package and a postinstall would then run on
|
||||||
buildPhase = ''
|
# every consumer's install). No aggregate deps hash to bump.
|
||||||
runHook preBuild
|
bunDeps = bun2nix.fetchBunDeps { bunNix = src + "/sdk/bun.nix"; };
|
||||||
export HOME=$TMPDIR
|
bunRoot = "sdk";
|
||||||
cp -R ${sdkDeps}/node_modules sdk/node_modules
|
dontRunLifecycleScripts = true; # matches the deb/rpm/windows SDK builds' `--ignore-scripts`
|
||||||
chmod -R u+w sdk/node_modules
|
dontUseBunBuild = true;
|
||||||
( cd sdk && bun build src/runner-cli.ts --target=bun --outfile=$TMPDIR/runner-cli.js )
|
dontUseBunCheck = true;
|
||||||
grep -q 'attempt=' $TMPDIR/runner-cli.js \
|
dontUseBunInstall = true;
|
||||||
|| { echo "ERROR: runner bundle missing the dynamic plugin import — wrong build" >&2; exit 1; }
|
dontUseBunPatch = true;
|
||||||
runHook postBuild
|
preConfigure = ''
|
||||||
'';
|
export HOME=$TMPDIR
|
||||||
|
'';
|
||||||
|
|
||||||
installPhase = ''
|
# `bun build --target=bun` bundles the runner CLI to ONE self-contained JS: effect + the SDK
|
||||||
runHook preInstall
|
# are inlined, and the runner's dynamic `import()` of the operator's plugin files is left as a
|
||||||
install -Dm0644 $TMPDIR/runner-cli.js $out/share/punktfunk-scripting/runner-cli.js
|
# runtime import (bun keeps unresolvable dynamic specifiers external). Fully offline.
|
||||||
# Launcher: run the bundle on bun from the store (mirrors the deb/rpm /usr/bin/punktfunk-scripting).
|
buildPhase = ''
|
||||||
makeWrapper ${bun}/bin/bun $out/bin/punktfunk-scripting \
|
runHook preBuild
|
||||||
--add-flags "$out/share/punktfunk-scripting/runner-cli.js"
|
# node_modules is already in place (bun2nix hook, offline `bun install` in sdk/).
|
||||||
runHook postInstall
|
( cd sdk && bun build src/runner-cli.ts --target=bun --outfile=$TMPDIR/runner-cli.js )
|
||||||
'';
|
grep -q 'attempt=' $TMPDIR/runner-cli.js \
|
||||||
|
|| { echo "ERROR: runner bundle missing the dynamic plugin import — wrong build" >&2; exit 1; }
|
||||||
|
runHook postBuild
|
||||||
|
'';
|
||||||
|
|
||||||
dontFixup = true;
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
install -Dm0644 $TMPDIR/runner-cli.js $out/share/punktfunk-scripting/runner-cli.js
|
||||||
|
# Launcher: run the bundle on bun from the store (mirrors the deb/rpm /usr/bin/punktfunk-scripting).
|
||||||
|
makeWrapper ${bun}/bin/bun $out/bin/punktfunk-scripting \
|
||||||
|
--add-flags "$out/share/punktfunk-scripting/runner-cli.js"
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
meta = meta // {
|
dontFixup = true;
|
||||||
description = "punktfunk plugin/script runner (Effect SDK on bun)";
|
|
||||||
mainProgram = "punktfunk-scripting";
|
meta = meta // {
|
||||||
};
|
description = "punktfunk plugin/script runner (Effect SDK on bun)";
|
||||||
|
mainProgram = "punktfunk-scripting";
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
"@effect/openapi-generator": "4.0.0-beta.98",
|
"@effect/openapi-generator": "4.0.0-beta.98",
|
||||||
"@effect/platform-node": "4.0.0-beta.98",
|
"@effect/platform-node": "4.0.0-beta.98",
|
||||||
"@types/bun": "^1.3.0",
|
"@types/bun": "^1.3.0",
|
||||||
|
"bun2nix": "2.1.2",
|
||||||
"effect": "^4.0.0-beta.98",
|
"effect": "^4.0.0-beta.98",
|
||||||
"typescript": "^5.9.3",
|
"typescript": "^5.9.3",
|
||||||
},
|
},
|
||||||
@@ -56,6 +57,8 @@
|
|||||||
|
|
||||||
"bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="],
|
"bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="],
|
||||||
|
|
||||||
|
"bun2nix": ["bun2nix@2.1.2", "", { "dependencies": { "sade": "^1.8.1" }, "bin": { "bun2nix": "index.ts" } }, "sha512-0wx6Ar5ccrz4aSD5prbShwymjDEXFh7Bucxs+YrpAMa67TnVB95Hv8FV3oaQEbtOx6QGgIAyOmap6Y3WCRqetg=="],
|
||||||
|
|
||||||
"call-me-maybe": ["call-me-maybe@1.0.2", "", {}, "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ=="],
|
"call-me-maybe": ["call-me-maybe@1.0.2", "", {}, "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ=="],
|
||||||
|
|
||||||
"cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
|
"cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
|
||||||
@@ -100,6 +103,8 @@
|
|||||||
|
|
||||||
"mime": ["mime@4.1.0", "", { "bin": { "mime": "bin/cli.js" } }, "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw=="],
|
"mime": ["mime@4.1.0", "", { "bin": { "mime": "bin/cli.js" } }, "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw=="],
|
||||||
|
|
||||||
|
"mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="],
|
||||||
|
|
||||||
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
||||||
|
|
||||||
"msgpackr": ["msgpackr@2.0.4", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-o1C5KRmuRt+apqMr1HuGSqWStZoRBUpEsCsl15uM9VdAF1qHLtvMOU2En747EnTyEl6c4pzPewRMFF31s1CNbA=="],
|
"msgpackr": ["msgpackr@2.0.4", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-o1C5KRmuRt+apqMr1HuGSqWStZoRBUpEsCsl15uM9VdAF1qHLtvMOU2En747EnTyEl6c4pzPewRMFF31s1CNbA=="],
|
||||||
@@ -136,6 +141,8 @@
|
|||||||
|
|
||||||
"require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
|
"require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
|
||||||
|
|
||||||
|
"sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="],
|
||||||
|
|
||||||
"should": ["should@13.2.3", "", { "dependencies": { "should-equal": "^2.0.0", "should-format": "^3.0.3", "should-type": "^1.4.0", "should-type-adaptors": "^1.0.1", "should-util": "^1.0.0" } }, "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ=="],
|
"should": ["should@13.2.3", "", { "dependencies": { "should-equal": "^2.0.0", "should-format": "^3.0.3", "should-type": "^1.4.0", "should-type-adaptors": "^1.0.1", "should-util": "^1.0.0" } }, "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ=="],
|
||||||
|
|
||||||
"should-equal": ["should-equal@2.0.0", "", { "dependencies": { "should-type": "^1.4.0" } }, "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA=="],
|
"should-equal": ["should-equal@2.0.0", "", { "dependencies": { "should-type": "^1.4.0" } }, "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA=="],
|
||||||
|
|||||||
+364
@@ -0,0 +1,364 @@
|
|||||||
|
# Autogenerated by `bun2nix`, editing manually is not recommended
|
||||||
|
#
|
||||||
|
# Set of Bun packages to install
|
||||||
|
#
|
||||||
|
# Consume this with `fetchBunDeps` (recommended)
|
||||||
|
# or `pkgs.callPackage` if you wish to handle
|
||||||
|
# it manually.
|
||||||
|
{
|
||||||
|
copyPathToStore,
|
||||||
|
fetchFromGitHub,
|
||||||
|
fetchgit,
|
||||||
|
fetchurl,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
"@effect/openapi-generator@4.0.0-beta.98" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@effect/openapi-generator/-/openapi-generator-4.0.0-beta.98.tgz";
|
||||||
|
hash = "sha512-7bqawr/HqJWqQ8H/bHyzBlLPA3LIIm3Y+cGYlIxnC/QVK795QpiEXb7uxTnP7V7w49V0sBtTerv4/9ZjsMffLQ==";
|
||||||
|
};
|
||||||
|
"@effect/platform-node-shared@4.0.0-beta.98" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@effect/platform-node-shared/-/platform-node-shared-4.0.0-beta.98.tgz";
|
||||||
|
hash = "sha512-iySXaffnCJX1sNAIp79ghhIeui9E5qwUQyqd1VLPkB9UNO4vdpd9B5fTEXwe7S/GusL4jsk9vSvX38XJgRFG1w==";
|
||||||
|
};
|
||||||
|
"@effect/platform-node@4.0.0-beta.98" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@effect/platform-node/-/platform-node-4.0.0-beta.98.tgz";
|
||||||
|
hash = "sha512-IQu1TiLXQEDSGkDBllyYjVadf+UqdjptryqX4mmktVTTbGDq7X4uVxe7cSgXuqZvyfG6kagTzwj2lfynxOaKQg==";
|
||||||
|
};
|
||||||
|
"@exodus/schemasafe@1.3.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz";
|
||||||
|
hash = "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==";
|
||||||
|
};
|
||||||
|
"@ioredis/commands@1.10.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@ioredis/commands/-/commands-1.10.0.tgz";
|
||||||
|
hash = "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q==";
|
||||||
|
};
|
||||||
|
"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz";
|
||||||
|
hash = "sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==";
|
||||||
|
};
|
||||||
|
"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz";
|
||||||
|
hash = "sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==";
|
||||||
|
};
|
||||||
|
"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz";
|
||||||
|
hash = "sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==";
|
||||||
|
};
|
||||||
|
"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz";
|
||||||
|
hash = "sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==";
|
||||||
|
};
|
||||||
|
"@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz";
|
||||||
|
hash = "sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==";
|
||||||
|
};
|
||||||
|
"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz";
|
||||||
|
hash = "sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==";
|
||||||
|
};
|
||||||
|
"@standard-schema/spec@1.1.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz";
|
||||||
|
hash = "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==";
|
||||||
|
};
|
||||||
|
"@types/bun@1.3.14" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@types/bun/-/bun-1.3.14.tgz";
|
||||||
|
hash = "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw==";
|
||||||
|
};
|
||||||
|
"@types/node@26.1.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz";
|
||||||
|
hash = "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==";
|
||||||
|
};
|
||||||
|
"@types/ws@8.18.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz";
|
||||||
|
hash = "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==";
|
||||||
|
};
|
||||||
|
"ansi-regex@5.0.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz";
|
||||||
|
hash = "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==";
|
||||||
|
};
|
||||||
|
"ansi-styles@4.3.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz";
|
||||||
|
hash = "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==";
|
||||||
|
};
|
||||||
|
"bun-types@1.3.14" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/bun-types/-/bun-types-1.3.14.tgz";
|
||||||
|
hash = "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ==";
|
||||||
|
};
|
||||||
|
"bun2nix@2.1.2" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/bun2nix/-/bun2nix-2.1.2.tgz";
|
||||||
|
hash = "sha512-0wx6Ar5ccrz4aSD5prbShwymjDEXFh7Bucxs+YrpAMa67TnVB95Hv8FV3oaQEbtOx6QGgIAyOmap6Y3WCRqetg==";
|
||||||
|
};
|
||||||
|
"call-me-maybe@1.0.2" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz";
|
||||||
|
hash = "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==";
|
||||||
|
};
|
||||||
|
"cliui@8.0.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz";
|
||||||
|
hash = "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==";
|
||||||
|
};
|
||||||
|
"cluster-key-slot@1.1.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz";
|
||||||
|
hash = "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==";
|
||||||
|
};
|
||||||
|
"color-convert@2.0.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz";
|
||||||
|
hash = "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==";
|
||||||
|
};
|
||||||
|
"color-name@1.1.4" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz";
|
||||||
|
hash = "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==";
|
||||||
|
};
|
||||||
|
"debug@4.4.3" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz";
|
||||||
|
hash = "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==";
|
||||||
|
};
|
||||||
|
"denque@2.1.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz";
|
||||||
|
hash = "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==";
|
||||||
|
};
|
||||||
|
"detect-libc@2.1.2" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz";
|
||||||
|
hash = "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==";
|
||||||
|
};
|
||||||
|
"effect@4.0.0-beta.98" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/effect/-/effect-4.0.0-beta.98.tgz";
|
||||||
|
hash = "sha512-oz+bsG5h+6RNrw4t5GMfQrk/xBS8ROoqkYsuvRhBr5O7mCOrpvH/hbw+QrDzvKIpX4HJClwm86F94c87W0sJxg==";
|
||||||
|
};
|
||||||
|
"emoji-regex@8.0.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz";
|
||||||
|
hash = "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==";
|
||||||
|
};
|
||||||
|
"es6-promise@3.3.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz";
|
||||||
|
hash = "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==";
|
||||||
|
};
|
||||||
|
"escalade@3.2.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz";
|
||||||
|
hash = "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==";
|
||||||
|
};
|
||||||
|
"fast-check@4.9.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/fast-check/-/fast-check-4.9.0.tgz";
|
||||||
|
hash = "sha512-7ms6T7SybUev/PQITciI0yLM2pOSFy5zpG8Ty7tQofcVaQUvrMXp6CBwqF6fThLCLOrfBtuHAtwq6Yu4XPCllg==";
|
||||||
|
};
|
||||||
|
"fast-safe-stringify@2.1.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz";
|
||||||
|
hash = "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==";
|
||||||
|
};
|
||||||
|
"find-my-way-ts@0.1.6" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/find-my-way-ts/-/find-my-way-ts-0.1.6.tgz";
|
||||||
|
hash = "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==";
|
||||||
|
};
|
||||||
|
"get-caller-file@2.0.5" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz";
|
||||||
|
hash = "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==";
|
||||||
|
};
|
||||||
|
"http2-client@1.3.5" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz";
|
||||||
|
hash = "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==";
|
||||||
|
};
|
||||||
|
"ini@7.0.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/ini/-/ini-7.0.0.tgz";
|
||||||
|
hash = "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w==";
|
||||||
|
};
|
||||||
|
"ioredis@5.11.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/ioredis/-/ioredis-5.11.1.tgz";
|
||||||
|
hash = "sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A==";
|
||||||
|
};
|
||||||
|
"is-fullwidth-code-point@3.0.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz";
|
||||||
|
hash = "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==";
|
||||||
|
};
|
||||||
|
"kubernetes-types@1.30.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/kubernetes-types/-/kubernetes-types-1.30.0.tgz";
|
||||||
|
hash = "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q==";
|
||||||
|
};
|
||||||
|
"mime@4.1.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz";
|
||||||
|
hash = "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==";
|
||||||
|
};
|
||||||
|
"mri@1.2.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz";
|
||||||
|
hash = "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==";
|
||||||
|
};
|
||||||
|
"ms@2.1.3" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz";
|
||||||
|
hash = "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==";
|
||||||
|
};
|
||||||
|
"msgpackr-extract@3.0.4" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz";
|
||||||
|
hash = "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==";
|
||||||
|
};
|
||||||
|
"msgpackr@2.0.4" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/msgpackr/-/msgpackr-2.0.4.tgz";
|
||||||
|
hash = "sha512-o1C5KRmuRt+apqMr1HuGSqWStZoRBUpEsCsl15uM9VdAF1qHLtvMOU2En747EnTyEl6c4pzPewRMFF31s1CNbA==";
|
||||||
|
};
|
||||||
|
"multipasta@0.2.8" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/multipasta/-/multipasta-0.2.8.tgz";
|
||||||
|
hash = "sha512-ZPWuMKyv0cSO29f7hozp+k6+crZbQijV8ipMvxNxRf2SwtYGTX1ZX89Kd20VV4H9Znonx+EQn+iy1wGQsJ+b+Q==";
|
||||||
|
};
|
||||||
|
"node-fetch-h2@2.3.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz";
|
||||||
|
hash = "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==";
|
||||||
|
};
|
||||||
|
"node-fetch@2.7.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz";
|
||||||
|
hash = "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==";
|
||||||
|
};
|
||||||
|
"node-gyp-build-optional-packages@5.2.2" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz";
|
||||||
|
hash = "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==";
|
||||||
|
};
|
||||||
|
"node-readfiles@0.2.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz";
|
||||||
|
hash = "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==";
|
||||||
|
};
|
||||||
|
"oas-kit-common@1.0.8" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz";
|
||||||
|
hash = "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==";
|
||||||
|
};
|
||||||
|
"oas-linter@3.2.2" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz";
|
||||||
|
hash = "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==";
|
||||||
|
};
|
||||||
|
"oas-resolver@2.5.6" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz";
|
||||||
|
hash = "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==";
|
||||||
|
};
|
||||||
|
"oas-schema-walker@1.1.5" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz";
|
||||||
|
hash = "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==";
|
||||||
|
};
|
||||||
|
"oas-validator@5.0.8" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz";
|
||||||
|
hash = "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==";
|
||||||
|
};
|
||||||
|
"pure-rand@8.4.2" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.2.tgz";
|
||||||
|
hash = "sha512-vvuOGgcuPJAirlHvuQw1TrOiw7ptaIXXmIbNuiNOY6lNGJJH49PQ1Kj4nd783nPdQhQdicgOjVI2yI/9BD6/Ng==";
|
||||||
|
};
|
||||||
|
"redis-errors@1.2.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz";
|
||||||
|
hash = "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==";
|
||||||
|
};
|
||||||
|
"redis-parser@3.0.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz";
|
||||||
|
hash = "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==";
|
||||||
|
};
|
||||||
|
"reftools@1.1.9" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz";
|
||||||
|
hash = "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==";
|
||||||
|
};
|
||||||
|
"require-directory@2.1.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz";
|
||||||
|
hash = "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==";
|
||||||
|
};
|
||||||
|
"sade@1.8.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz";
|
||||||
|
hash = "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==";
|
||||||
|
};
|
||||||
|
"should-equal@2.0.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz";
|
||||||
|
hash = "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==";
|
||||||
|
};
|
||||||
|
"should-format@3.0.3" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz";
|
||||||
|
hash = "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==";
|
||||||
|
};
|
||||||
|
"should-type-adaptors@1.1.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz";
|
||||||
|
hash = "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==";
|
||||||
|
};
|
||||||
|
"should-type@1.4.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz";
|
||||||
|
hash = "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==";
|
||||||
|
};
|
||||||
|
"should-util@1.0.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz";
|
||||||
|
hash = "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==";
|
||||||
|
};
|
||||||
|
"should@13.2.3" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/should/-/should-13.2.3.tgz";
|
||||||
|
hash = "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==";
|
||||||
|
};
|
||||||
|
"standard-as-callback@2.1.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz";
|
||||||
|
hash = "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==";
|
||||||
|
};
|
||||||
|
"string-width@4.2.3" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz";
|
||||||
|
hash = "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==";
|
||||||
|
};
|
||||||
|
"strip-ansi@6.0.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz";
|
||||||
|
hash = "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==";
|
||||||
|
};
|
||||||
|
"swagger2openapi@7.0.8" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz";
|
||||||
|
hash = "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==";
|
||||||
|
};
|
||||||
|
"toml@4.3.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/toml/-/toml-4.3.0.tgz";
|
||||||
|
hash = "sha512-lVb8X9BsPVuH0M4BKeS91tXAmJvCjQ5UIyAbQFaxkKGyUFK2RPkhwaFSQH8vbpl1d23eu/IBH+dwVMHWaq9A5A==";
|
||||||
|
};
|
||||||
|
"tr46@0.0.3" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz";
|
||||||
|
hash = "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==";
|
||||||
|
};
|
||||||
|
"typescript@5.9.3" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz";
|
||||||
|
hash = "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==";
|
||||||
|
};
|
||||||
|
"undici-types@8.3.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz";
|
||||||
|
hash = "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==";
|
||||||
|
};
|
||||||
|
"undici@7.28.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz";
|
||||||
|
hash = "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==";
|
||||||
|
};
|
||||||
|
"undici@8.7.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/undici/-/undici-8.7.0.tgz";
|
||||||
|
hash = "sha512-N7iQtfyLhIMOFgQubvmLV26svHpO0bqKnAiWotTQCVKCmWrcGbBotPuW1x+xwYZ2VHdSTVUfPQQnlEt1/LouTQ==";
|
||||||
|
};
|
||||||
|
"uuid@14.0.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz";
|
||||||
|
hash = "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==";
|
||||||
|
};
|
||||||
|
"webidl-conversions@3.0.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz";
|
||||||
|
hash = "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==";
|
||||||
|
};
|
||||||
|
"whatwg-url@5.0.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz";
|
||||||
|
hash = "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==";
|
||||||
|
};
|
||||||
|
"wrap-ansi@7.0.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz";
|
||||||
|
hash = "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==";
|
||||||
|
};
|
||||||
|
"ws@8.21.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz";
|
||||||
|
hash = "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==";
|
||||||
|
};
|
||||||
|
"y18n@5.0.8" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz";
|
||||||
|
hash = "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==";
|
||||||
|
};
|
||||||
|
"yaml@1.10.3" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz";
|
||||||
|
hash = "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==";
|
||||||
|
};
|
||||||
|
"yaml@2.9.0" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz";
|
||||||
|
hash = "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==";
|
||||||
|
};
|
||||||
|
"yargs-parser@21.1.1" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz";
|
||||||
|
hash = "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==";
|
||||||
|
};
|
||||||
|
"yargs@17.7.3" = fetchurl {
|
||||||
|
url = "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz";
|
||||||
|
hash = "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -34,6 +34,7 @@
|
|||||||
"registry": "https://git.unom.io/api/packages/unom/npm/"
|
"registry": "https://git.unom.io/api/packages/unom/npm/"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"prepare": "bun2nix -o bun.nix",
|
||||||
"gen": "openapigen --spec ../api/openapi.json --name Punktfunk --format httpclient > src/gen/punktfunk.ts",
|
"gen": "openapigen --spec ../api/openapi.json --name Punktfunk --format httpclient > src/gen/punktfunk.ts",
|
||||||
"typecheck": "tsc --noEmit",
|
"typecheck": "tsc --noEmit",
|
||||||
"build": "tsc -p tsconfig.build.json",
|
"build": "tsc -p tsconfig.build.json",
|
||||||
@@ -49,6 +50,7 @@
|
|||||||
"@effect/openapi-generator": "4.0.0-beta.98",
|
"@effect/openapi-generator": "4.0.0-beta.98",
|
||||||
"@effect/platform-node": "4.0.0-beta.98",
|
"@effect/platform-node": "4.0.0-beta.98",
|
||||||
"@types/bun": "^1.3.0",
|
"@types/bun": "^1.3.0",
|
||||||
|
"bun2nix": "2.1.2",
|
||||||
"typescript": "^5.9.3"
|
"typescript": "^5.9.3"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
"@types/react": "^19.2.17",
|
"@types/react": "^19.2.17",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"@vitejs/plugin-react": "^5.2.0",
|
"@vitejs/plugin-react": "^5.2.0",
|
||||||
|
"bun2nix": "2.1.2",
|
||||||
"orval": "^8.22.0",
|
"orval": "^8.22.0",
|
||||||
"playwright": "^1.61.1",
|
"playwright": "^1.61.1",
|
||||||
"storybook": "^10.5.3",
|
"storybook": "^10.5.3",
|
||||||
@@ -1133,6 +1134,8 @@
|
|||||||
|
|
||||||
"buffer-image-size": ["buffer-image-size@0.6.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ=="],
|
"buffer-image-size": ["buffer-image-size@0.6.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEh+kZOPY1w+gcCMobZ6ETUp9WfibndnosbpwB1iJk/8Gt5ZF2bhS6+B6bPYz424KtwsR6Rflc3tCz1/ghX2dQ=="],
|
||||||
|
|
||||||
|
"bun2nix": ["bun2nix@2.1.2", "", { "dependencies": { "sade": "^1.8.1" }, "bin": { "bun2nix": "index.ts" } }, "sha512-0wx6Ar5ccrz4aSD5prbShwymjDEXFh7Bucxs+YrpAMa67TnVB95Hv8FV3oaQEbtOx6QGgIAyOmap6Y3WCRqetg=="],
|
||||||
|
|
||||||
"bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="],
|
"bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="],
|
||||||
|
|
||||||
"busboy": ["busboy@1.6.0", "", { "dependencies": { "streamsearch": "^1.1.0" } }, "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA=="],
|
"busboy": ["busboy@1.6.0", "", { "dependencies": { "streamsearch": "^1.1.0" } }, "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA=="],
|
||||||
@@ -1767,6 +1770,8 @@
|
|||||||
|
|
||||||
"motion-utils": ["motion-utils@12.39.0", "", {}, "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ=="],
|
"motion-utils": ["motion-utils@12.39.0", "", {}, "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ=="],
|
||||||
|
|
||||||
|
"mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="],
|
||||||
|
|
||||||
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
||||||
|
|
||||||
"nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="],
|
"nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="],
|
||||||
@@ -1995,6 +2000,8 @@
|
|||||||
|
|
||||||
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
|
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
|
||||||
|
|
||||||
|
"sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="],
|
||||||
|
|
||||||
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
|
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
|
||||||
|
|
||||||
"safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="],
|
"safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="],
|
||||||
|
|||||||
+4894
File diff suppressed because it is too large
Load Diff
@@ -5,6 +5,7 @@
|
|||||||
"description": "punktfunk management console \u2014 TanStack Start + React Query (orval) + @unom/ui + Paraglide i18n",
|
"description": "punktfunk management console \u2014 TanStack Start + React Query (orval) + @unom/ui + Paraglide i18n",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prepare": "bun run codegen",
|
"prepare": "bun run codegen",
|
||||||
|
"postinstall": "bun2nix -o bun.nix",
|
||||||
"codegen": "orval --config orval.config.ts && paraglide-js compile --project ./project.inlang --outdir ./src/paraglide && node tools/check-i18n.mjs",
|
"codegen": "orval --config orval.config.ts && paraglide-js compile --project ./project.inlang --outdir ./src/paraglide && node tools/check-i18n.mjs",
|
||||||
"predev": "orval --config orval.config.ts",
|
"predev": "orval --config orval.config.ts",
|
||||||
"dev": "vite dev --port 47992",
|
"dev": "vite dev --port 47992",
|
||||||
@@ -47,6 +48,7 @@
|
|||||||
"@types/react": "^19.2.17",
|
"@types/react": "^19.2.17",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"@vitejs/plugin-react": "^5.2.0",
|
"@vitejs/plugin-react": "^5.2.0",
|
||||||
|
"bun2nix": "2.1.2",
|
||||||
"orval": "^8.22.0",
|
"orval": "^8.22.0",
|
||||||
"playwright": "^1.61.1",
|
"playwright": "^1.61.1",
|
||||||
"storybook": "^10.5.3",
|
"storybook": "^10.5.3",
|
||||||
|
|||||||
Reference in New Issue
Block a user