From b7fb0531201c848071658ba66110f7e9b00a4a3f Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 27 Mar 2026 15:58:30 +0000 Subject: [PATCH 01/48] feat: begin rewrite --- .devenv/load-exports | 1 + .devenv/profile | 1 + .devenv/root | 1 + .devenv/run | 1 + .devenv/state/files.json | 1 + .devenv/tasks.db | Bin 0 -> 4096 bytes .devenv/tasks.db-shm | Bin 0 -> 32768 bytes .devenv/tasks.db-wal | Bin 0 -> 284312 bytes .direnv/bin/nix-direnv-reload | 19 + .../12rd2bk68yfdn66pzcnwkgcyxf28y2fq-source | 1 + .../19n52d86cl95nj8jp5rgrh36sl762fba-source | 1 + .../2a9ylipb88x2sp2xn6cg58p5xm6qamai-source | 1 + .../59wm6wpldrgyplh2hjnmiba7zrq40slr-source | 1 + .../6sr5gjiqka9lw5pp65q65gsi4vwvykqd-source | 1 + .../8694kanhi1kzc34kg81l33pvn638qvnh-source | 1 + .../98mad1s6hrryyflb6qf6hd4xyb8r7cy4-source | 1 + .../9qa4c94rswp05pi33cw8djmr481xfmsb-source | 1 + .../a3lgxmqqn2hargk3zla9qwc7dk172pfd-source | 1 + .../a4vp2b9b5nypkhq15a2fjd436fhmcn1l-source | 1 + .../ah506d01i8mdjgwfzxisj0h6crv06h4d-source | 1 + .../ccsb5xyihjf7b377k5rzkqc16qc6pqd1-source | 1 + .../cp5dwcigb6sq67flr8z068sm272fqdwc-source | 1 + .../dn79d4hlja1h10w71g2dd9591bhb9gcm-source | 1 + .../g5v3sgqy6a0fsmas7mnapc196flrplix-source | 1 + .../gfsnfjvm197ha6c06n46shx5l56jr3v9-source | 1 + .../hh6i9rnxx1v6azzva6dc3ivglh9bxnzg-source | 1 + .../hs60rjkj4jf56x6ki09f3l3bjb3xmd4r-source | 1 + .../jzfmmjnq1cip816awnliw7ir69pcyg00-source | 1 + .../lscb3irg1bmxaywmpbcs1ix52519dwsv-source | 1 + .../n07s4r9cd44axqq4gzlvzckky2fiw3dv-source | 1 + .../s0bdxxy4gki016irflyqlxy5mzr96kin-source | 1 + .../sy3ism981f9xcbcmdc7gbk0yz28w6yjz-source | 1 + .../vfwqvh36nfahrhdx290ihhpgpnx68bv1-source | 1 + .../wygnldpfirbkskf6qpjbghvaqh3kkczb-source | 1 + .../xji4bckj16g6fvdwkzdlxivhwsjwk11m-source | 1 + .../yar8rblnwkp2mpk27capz695pgdbf74x-source | 1 + .../zmknnpbpzwg4s440xvwv6xww4fjgyyyb-source | 1 + ...e-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa | 1 + ...5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc | 2235 ++++++++++++ .dockerignore | 8 - .envrc | 18 +- .github/workflows/deploy.yml | 56 - .gitignore | 17 +- .vscode/settings.json | 3 + .yarn/install-state.gz | Bin 258358 -> 0 bytes .yarnrc.yml | 1 - Dockerfile | 20 - LICENSE | 21 - README.MD | 52 +- elm.json | 18 +- flake.lock | 25 - flake.nix | 72 +- main.css | 6 - nginx.conf | 31 - package.json | 26 - postcss.config.js | 15 - public/index.html | 11 + src/Main.elm | 114 - src/Page.elm | 68 - src/Pages/Home_.elm | 11 + src/Redirects.elm | 19 - src/Route.elm | 64 - src/Views/Blank.elm | 10 - src/Views/Home.elm | 59 - src/Views/Rules.elm | 68 - src/Views/ServicesRules.elm | 86 - static/custom.css | 19 - static/devden_text_only.png | Bin 33327 -> 0 bytes static/devden_text_only_wide.png | Bin 31957 -> 0 bytes static/favicon-16x16.png | Bin 533 -> 0 bytes static/favicon-32x32.png | Bin 1184 -> 0 bytes static/favicon.ico | Bin 15406 -> 0 bytes static/fonts/JetBrainsMono-Regular.woff2 | Bin 69440 -> 0 bytes static/fonts/horta.otf | Bin 499316 -> 0 bytes static/index.html | 36 - static/logo.gif | Bin 458643 -> 0 bytes tailwind.config.js | 14 - yarn.lock | 2992 ----------------- 78 files changed, 2424 insertions(+), 3824 deletions(-) create mode 100755 .devenv/load-exports create mode 120000 .devenv/profile create mode 100644 .devenv/root create mode 120000 .devenv/run create mode 100644 .devenv/state/files.json create mode 100644 .devenv/tasks.db create mode 100644 .devenv/tasks.db-shm create mode 100644 .devenv/tasks.db-wal create mode 100755 .direnv/bin/nix-direnv-reload create mode 120000 .direnv/flake-inputs/12rd2bk68yfdn66pzcnwkgcyxf28y2fq-source create mode 120000 .direnv/flake-inputs/19n52d86cl95nj8jp5rgrh36sl762fba-source create mode 120000 .direnv/flake-inputs/2a9ylipb88x2sp2xn6cg58p5xm6qamai-source create mode 120000 .direnv/flake-inputs/59wm6wpldrgyplh2hjnmiba7zrq40slr-source create mode 120000 .direnv/flake-inputs/6sr5gjiqka9lw5pp65q65gsi4vwvykqd-source create mode 120000 .direnv/flake-inputs/8694kanhi1kzc34kg81l33pvn638qvnh-source create mode 120000 .direnv/flake-inputs/98mad1s6hrryyflb6qf6hd4xyb8r7cy4-source create mode 120000 .direnv/flake-inputs/9qa4c94rswp05pi33cw8djmr481xfmsb-source create mode 120000 .direnv/flake-inputs/a3lgxmqqn2hargk3zla9qwc7dk172pfd-source create mode 120000 .direnv/flake-inputs/a4vp2b9b5nypkhq15a2fjd436fhmcn1l-source create mode 120000 .direnv/flake-inputs/ah506d01i8mdjgwfzxisj0h6crv06h4d-source create mode 120000 .direnv/flake-inputs/ccsb5xyihjf7b377k5rzkqc16qc6pqd1-source create mode 120000 .direnv/flake-inputs/cp5dwcigb6sq67flr8z068sm272fqdwc-source create mode 120000 .direnv/flake-inputs/dn79d4hlja1h10w71g2dd9591bhb9gcm-source create mode 120000 .direnv/flake-inputs/g5v3sgqy6a0fsmas7mnapc196flrplix-source create mode 120000 .direnv/flake-inputs/gfsnfjvm197ha6c06n46shx5l56jr3v9-source create mode 120000 .direnv/flake-inputs/hh6i9rnxx1v6azzva6dc3ivglh9bxnzg-source create mode 120000 .direnv/flake-inputs/hs60rjkj4jf56x6ki09f3l3bjb3xmd4r-source create mode 120000 .direnv/flake-inputs/jzfmmjnq1cip816awnliw7ir69pcyg00-source create mode 120000 .direnv/flake-inputs/lscb3irg1bmxaywmpbcs1ix52519dwsv-source create mode 120000 .direnv/flake-inputs/n07s4r9cd44axqq4gzlvzckky2fiw3dv-source create mode 120000 .direnv/flake-inputs/s0bdxxy4gki016irflyqlxy5mzr96kin-source create mode 120000 .direnv/flake-inputs/sy3ism981f9xcbcmdc7gbk0yz28w6yjz-source create mode 120000 .direnv/flake-inputs/vfwqvh36nfahrhdx290ihhpgpnx68bv1-source create mode 120000 .direnv/flake-inputs/wygnldpfirbkskf6qpjbghvaqh3kkczb-source create mode 120000 .direnv/flake-inputs/xji4bckj16g6fvdwkzdlxivhwsjwk11m-source create mode 120000 .direnv/flake-inputs/yar8rblnwkp2mpk27capz695pgdbf74x-source create mode 120000 .direnv/flake-inputs/zmknnpbpzwg4s440xvwv6xww4fjgyyyb-source create mode 120000 .direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa create mode 100644 .direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc delete mode 100644 .dockerignore delete mode 100644 .github/workflows/deploy.yml create mode 100644 .vscode/settings.json delete mode 100644 .yarn/install-state.gz delete mode 100644 .yarnrc.yml delete mode 100644 Dockerfile delete mode 100644 LICENSE delete mode 100644 flake.lock delete mode 100644 main.css delete mode 100644 nginx.conf delete mode 100644 package.json delete mode 100644 postcss.config.js create mode 100644 public/index.html delete mode 100644 src/Main.elm delete mode 100644 src/Page.elm create mode 100644 src/Pages/Home_.elm delete mode 100644 src/Redirects.elm delete mode 100644 src/Route.elm delete mode 100644 src/Views/Blank.elm delete mode 100644 src/Views/Home.elm delete mode 100644 src/Views/Rules.elm delete mode 100644 src/Views/ServicesRules.elm delete mode 100644 static/custom.css delete mode 100644 static/devden_text_only.png delete mode 100644 static/devden_text_only_wide.png delete mode 100644 static/favicon-16x16.png delete mode 100644 static/favicon-32x32.png delete mode 100644 static/favicon.ico delete mode 100644 static/fonts/JetBrainsMono-Regular.woff2 delete mode 100644 static/fonts/horta.otf delete mode 100644 static/index.html delete mode 100644 static/logo.gif delete mode 100644 tailwind.config.js delete mode 100644 yarn.lock diff --git a/.devenv/load-exports b/.devenv/load-exports new file mode 100755 index 0000000..8b13789 --- /dev/null +++ b/.devenv/load-exports @@ -0,0 +1 @@ + diff --git a/.devenv/profile b/.devenv/profile new file mode 120000 index 0000000..360ce2d --- /dev/null +++ b/.devenv/profile @@ -0,0 +1 @@ +/nix/store/24ccwhzzw2d1mq05cqyf9w0j2vzqrp8j-devenv-profile \ No newline at end of file diff --git a/.devenv/root b/.devenv/root new file mode 100644 index 0000000..7e364e1 --- /dev/null +++ b/.devenv/root @@ -0,0 +1 @@ +/Users/alex/workspace/website \ No newline at end of file diff --git a/.devenv/run b/.devenv/run new file mode 120000 index 0000000..8284d71 --- /dev/null +++ b/.devenv/run @@ -0,0 +1 @@ +/tmp/devenv-3226e91 \ No newline at end of file diff --git a/.devenv/state/files.json b/.devenv/state/files.json new file mode 100644 index 0000000..b4c7443 --- /dev/null +++ b/.devenv/state/files.json @@ -0,0 +1 @@ +{"managedFiles":[]} diff --git a/.devenv/tasks.db b/.devenv/tasks.db new file mode 100644 index 0000000000000000000000000000000000000000..7ee7c113a09428e4daafacb6e70a35d18573e608 GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYDWB;00+HAlr;ljiVtj n8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O6ovo*4{!$i literal 0 HcmV?d00001 diff --git a/.devenv/tasks.db-shm b/.devenv/tasks.db-shm new file mode 100644 index 0000000000000000000000000000000000000000..075b7290f098b9c40f30b68cff6c7ac8360adca2 GIT binary patch literal 32768 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 ${!varName}"; + args+=("--subst-var" "$varName"); + done < <(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }') +} +_assignFirst () +{ + + local varName="$1"; + local _var; + local REMOVE=REMOVE; + shift; + for _var in "$@"; + do + if [ -n "${!_var-}" ]; then + eval "${varName}"="${_var}"; + return; + fi; + done; + echo; + echo "error: _assignFirst: could not find a non-empty variable whose name to assign to ${varName}."; + echo " The following variables were all unset or empty:"; + echo " $*"; + if [ -z "${out:-}" ]; then + echo ' If you do not want an "out" output in your derivation, make sure to define'; + echo ' the other specific required outputs. This can be achieved by picking one'; + echo " of the above as an output."; + echo ' You do not have to remove "out" if you want to have a different default'; + echo ' output, because the first output is taken as a default.'; + echo; + fi; + return 1 +} +_callImplicitHook () +{ + + local def="$1"; + local hookName="$2"; + if declare -F "$hookName" > /dev/null; then + nixTalkativeLog "calling implicit '$hookName' function hook"; + "$hookName"; + else + if type -p "$hookName" > /dev/null; then + nixTalkativeLog "sourcing implicit '$hookName' script hook"; + source "$hookName"; + else + if [ -n "${!hookName:-}" ]; then + nixTalkativeLog "evaling implicit '$hookName' string hook"; + eval "${!hookName}"; + else + return "$def"; + fi; + fi; + fi +} +_defaultUnpack () +{ + + local fn="$1"; + local destination; + if [ -d "$fn" ]; then + destination="$(stripHash "$fn")"; + if [ -e "$destination" ]; then + echo "Cannot copy $fn to $destination: destination already exists!"; + echo "Did you specify two \"srcs\" with the same \"name\"?"; + return 1; + fi; + cp -r --preserve=timestamps --reflink=auto -- "$fn" "$destination"; + else + case "$fn" in + *.tar.xz | *.tar.lzma | *.txz) + ( XZ_OPT="--threads=$NIX_BUILD_CORES" xz -d < "$fn"; + true ) | tar xf - --mode=+w --warning=no-timestamp + ;; + *.tar | *.tar.* | *.tgz | *.tbz2 | *.tbz) + tar xf "$fn" --mode=+w --warning=no-timestamp + ;; + *) + return 1 + ;; + esac; + fi +} +_doStrip () +{ + + local -ra flags=(dontStripHost dontStripTarget); + local -ra debugDirs=(stripDebugList stripDebugListTarget); + local -ra allDirs=(stripAllList stripAllListTarget); + local -ra stripCmds=(STRIP STRIP_FOR_TARGET); + local -ra ranlibCmds=(RANLIB RANLIB_FOR_TARGET); + stripDebugList=${stripDebugList[*]:-lib lib32 lib64 libexec bin sbin Applications Library/Frameworks}; + stripDebugListTarget=${stripDebugListTarget[*]:-}; + stripAllList=${stripAllList[*]:-}; + stripAllListTarget=${stripAllListTarget[*]:-}; + local i; + for i in ${!stripCmds[@]}; + do + local -n flag="${flags[$i]}"; + local -n debugDirList="${debugDirs[$i]}"; + local -n allDirList="${allDirs[$i]}"; + local -n stripCmd="${stripCmds[$i]}"; + local -n ranlibCmd="${ranlibCmds[$i]}"; + if [[ -n "${dontStrip-}" || -n "${flag-}" ]] || ! type -f "${stripCmd-}" 2> /dev/null 1>&2; then + continue; + fi; + stripDirs "$stripCmd" "$ranlibCmd" "$debugDirList" "${stripDebugFlags[*]:--S -p}"; + stripDirs "$stripCmd" "$ranlibCmd" "$allDirList" "${stripAllFlags[*]:--s -p}"; + done +} +_eval () +{ + + if declare -F "$1" > /dev/null 2>&1; then + "$@"; + else + eval "$1"; + fi +} +_logHook () +{ + + if [[ -z ${NIX_LOG_FD-} ]]; then + return; + fi; + local hookKind="$1"; + local hookExpr="$2"; + shift 2; + if declare -F "$hookExpr" > /dev/null 2>&1; then + nixTalkativeLog "calling '$hookKind' function hook '$hookExpr'" "$@"; + else + if type -p "$hookExpr" > /dev/null; then + nixTalkativeLog "sourcing '$hookKind' script hook '$hookExpr'"; + else + if [[ "$hookExpr" != "_callImplicitHook"* ]]; then + local exprToOutput; + if [[ ${NIX_DEBUG:-0} -ge 5 ]]; then + exprToOutput="$hookExpr"; + else + local hookExprLine; + while IFS= read -r hookExprLine; do + hookExprLine="${hookExprLine#"${hookExprLine%%[![:space:]]*}"}"; + if [[ -n "$hookExprLine" ]]; then + exprToOutput+="$hookExprLine\\n "; + fi; + done <<< "$hookExpr"; + exprToOutput="${exprToOutput%%\\n }"; + fi; + nixTalkativeLog "evaling '$hookKind' string hook '$exprToOutput'"; + fi; + fi; + fi +} +_makeSymlinksRelative () +{ + + local prefixes; + prefixes=(); + for output in $(getAllOutputNames); + do + [ ! -e "${!output}" ] && continue; + prefixes+=("${!output}"); + done; + find "${prefixes[@]}" -type l -printf '%H\0%p\0' | xargs -0 -n2 -r -P "$NIX_BUILD_CORES" sh -c ' + output="$1" + link="$2" + + linkTarget=$(readlink "$link") + + # only touch links that point inside the same output tree + [[ $linkTarget == "$output"/* ]] || exit 0 + + if [ ! -e "$linkTarget" ]; then + echo "the symlink $link is broken, it points to $linkTarget (which is missing)" + fi + + echo "making symlink relative: $link" + ln -snrf "$linkTarget" "$link" + ' _ +} +_moveLib64 () +{ + + if [ "${dontMoveLib64-}" = 1 ]; then + return; + fi; + if [ ! -e "$prefix/lib64" -o -L "$prefix/lib64" ]; then + return; + fi; + echo "moving $prefix/lib64/* to $prefix/lib"; + mkdir -p $prefix/lib; + shopt -s dotglob; + for i in $prefix/lib64/*; + do + mv --no-clobber "$i" $prefix/lib; + done; + shopt -u dotglob; + rmdir $prefix/lib64; + ln -s lib $prefix/lib64 +} +_moveSbin () +{ + + if [ "${dontMoveSbin-}" = 1 ]; then + return; + fi; + if [ ! -e "$prefix/sbin" -o -L "$prefix/sbin" ]; then + return; + fi; + echo "moving $prefix/sbin/* to $prefix/bin"; + mkdir -p $prefix/bin; + shopt -s dotglob; + for i in $prefix/sbin/*; + do + mv "$i" $prefix/bin; + done; + shopt -u dotglob; + rmdir $prefix/sbin; + ln -s bin $prefix/sbin +} +_moveSystemdUserUnits () +{ + + if [ "${dontMoveSystemdUserUnits:-0}" = 1 ]; then + return; + fi; + if [ ! -e "${prefix:?}/lib/systemd/user" ]; then + return; + fi; + local source="$prefix/lib/systemd/user"; + local target="$prefix/share/systemd/user"; + echo "moving $source/* to $target"; + mkdir -p "$target"; + ( shopt -s dotglob; + for i in "$source"/*; + do + mv "$i" "$target"; + done ); + rmdir "$source"; + ln -s "$target" "$source" +} +_moveToShare () +{ + + if [ -n "$__structuredAttrs" ]; then + if [ -z "${forceShare-}" ]; then + forceShare=(man doc info); + fi; + else + forceShare=(${forceShare:-man doc info}); + fi; + if [[ -z "$out" ]]; then + return; + fi; + for d in "${forceShare[@]}"; + do + if [ -d "$out/$d" ]; then + if [ -d "$out/share/$d" ]; then + echo "both $d/ and share/$d/ exist!"; + else + echo "moving $out/$d to $out/share/$d"; + mkdir -p $out/share; + mv $out/$d $out/share/; + fi; + fi; + done +} +_multioutConfig () +{ + + if [ "$(getAllOutputNames)" = "out" ] || [ -z "${setOutputFlags-1}" ]; then + return; + fi; + if [ -z "${shareDocName:-}" ]; then + local confScript="${configureScript:-}"; + if [ -z "$confScript" ] && [ -x ./configure ]; then + confScript=./configure; + fi; + if [ -f "$confScript" ]; then + local shareDocName="$(sed -n "s/^PACKAGE_TARNAME='\(.*\)'$/\1/p" < "$confScript")"; + fi; + if [ -z "$shareDocName" ] || echo "$shareDocName" | grep -q '[^a-zA-Z0-9_-]'; then + shareDocName="$(echo "$name" | sed 's/-[^a-zA-Z].*//')"; + fi; + fi; + prependToVar configureFlags --bindir="${!outputBin}"/bin --sbindir="${!outputBin}"/sbin --includedir="${!outputInclude}"/include --mandir="${!outputMan}"/share/man --infodir="${!outputInfo}"/share/info --docdir="${!outputDoc}"/share/doc/"${shareDocName}" --libdir="${!outputLib}"/lib --libexecdir="${!outputLib}"/libexec --localedir="${!outputLib}"/share/locale; + prependToVar installFlags pkgconfigdir="${!outputDev}"/lib/pkgconfig m4datadir="${!outputDev}"/share/aclocal aclocaldir="${!outputDev}"/share/aclocal +} +_multioutDevs () +{ + + if [ "$(getAllOutputNames)" = "out" ] || [ -z "${moveToDev-1}" ]; then + return; + fi; + moveToOutput include "${!outputInclude}"; + moveToOutput lib/pkgconfig "${!outputDev}"; + moveToOutput share/pkgconfig "${!outputDev}"; + moveToOutput lib/cmake "${!outputDev}"; + moveToOutput share/aclocal "${!outputDev}"; + for f in "${!outputDev}"/{lib,share}/pkgconfig/*.pc; + do + echo "Patching '$f' includedir to output ${!outputInclude}"; + sed -i "/^includedir=/s,=\${prefix},=${!outputInclude}," "$f"; + done +} +_multioutDocs () +{ + + local REMOVE=REMOVE; + moveToOutput share/info "${!outputInfo}"; + moveToOutput share/doc "${!outputDoc}"; + moveToOutput share/gtk-doc "${!outputDevdoc}"; + moveToOutput share/devhelp/books "${!outputDevdoc}"; + moveToOutput share/man "${!outputMan}"; + moveToOutput share/man/man3 "${!outputDevman}" +} +_multioutPropagateDev () +{ + + if [ "$(getAllOutputNames)" = "out" ]; then + return; + fi; + local outputFirst; + for outputFirst in $(getAllOutputNames); + do + break; + done; + local propagaterOutput="$outputDev"; + if [ -z "$propagaterOutput" ]; then + propagaterOutput="$outputFirst"; + fi; + if [ -z "${propagatedBuildOutputs+1}" ]; then + local po_dirty="$outputBin $outputInclude $outputLib"; + set +o pipefail; + propagatedBuildOutputs=`echo "$po_dirty" | tr -s ' ' '\n' | grep -v -F "$propagaterOutput" | sort -u | tr '\n' ' ' `; + set -o pipefail; + fi; + if [ -z "$propagatedBuildOutputs" ]; then + return; + fi; + mkdir -p "${!propagaterOutput}"/nix-support; + for output in $propagatedBuildOutputs; + do + echo -n " ${!output}" >> "${!propagaterOutput}"/nix-support/propagated-build-inputs; + done +} +_nixLogWithLevel () +{ + + [[ -z ${NIX_LOG_FD-} || ${NIX_DEBUG:-0} -lt ${1:?} ]] && return 0; + local logLevel; + case "${1:?}" in + 0) + logLevel=ERROR + ;; + 1) + logLevel=WARN + ;; + 2) + logLevel=NOTICE + ;; + 3) + logLevel=INFO + ;; + 4) + logLevel=TALKATIVE + ;; + 5) + logLevel=CHATTY + ;; + 6) + logLevel=DEBUG + ;; + 7) + logLevel=VOMIT + ;; + *) + echo "_nixLogWithLevel: called with invalid log level: ${1:?}" >&"$NIX_LOG_FD"; + return 1 + ;; + esac; + local callerName="${FUNCNAME[2]}"; + if [[ $callerName == "_callImplicitHook" ]]; then + callerName="${hookName:?}"; + fi; + printf "%s: %s: %s\n" "$logLevel" "$callerName" "${2:?}" >&"$NIX_LOG_FD" +} +_overrideFirst () +{ + + if [ -z "${!1-}" ]; then + _assignFirst "$@"; + fi +} +_pruneLibtoolFiles () +{ + + if [ "${dontPruneLibtoolFiles-}" ] || [ ! -e "$prefix" ]; then + return; + fi; + find "$prefix" -type f -name '*.la' -exec grep -q '^# Generated by .*libtool' {} \; -exec grep -q "^old_library=''" {} \; -exec sed -i {} -e "/^dependency_libs='[^']/ c dependency_libs='' #pruned" \; +} +_updateSourceDateEpochFromSourceRoot () +{ + + if [ -n "$sourceRoot" ]; then + updateSourceDateEpoch "$sourceRoot"; + fi +} +activatePackage () +{ + + local pkg="$1"; + local -r hostOffset="$2"; + local -r targetOffset="$3"; + (( hostOffset <= targetOffset )) || exit 1; + if [ -f "$pkg" ]; then + nixTalkativeLog "sourcing setup hook '$pkg'"; + source "$pkg"; + fi; + if [[ -z "${strictDeps-}" || "$hostOffset" -le -1 ]]; then + addToSearchPath _PATH "$pkg/bin"; + fi; + if (( hostOffset <= -1 )); then + addToSearchPath _XDG_DATA_DIRS "$pkg/share"; + fi; + if [[ "$hostOffset" -eq 0 && -d "$pkg/bin" ]]; then + addToSearchPath _HOST_PATH "$pkg/bin"; + fi; + if [[ -f "$pkg/nix-support/setup-hook" ]]; then + nixTalkativeLog "sourcing setup hook '$pkg/nix-support/setup-hook'"; + source "$pkg/nix-support/setup-hook"; + fi +} +addEnvHooks () +{ + + local depHostOffset="$1"; + shift; + local pkgHookVarsSlice="${pkgHookVarVars[$depHostOffset + 1]}[@]"; + local pkgHookVar; + for pkgHookVar in "${!pkgHookVarsSlice}"; + do + eval "${pkgHookVar}s"'+=("$@")'; + done +} +addToSearchPath () +{ + + addToSearchPathWithCustomDelimiter ":" "$@" +} +addToSearchPathWithCustomDelimiter () +{ + + local delimiter="$1"; + local varName="$2"; + local dir="$3"; + if [[ -d "$dir" && "${!varName:+${delimiter}${!varName}${delimiter}}" != *"${delimiter}${dir}${delimiter}"* ]]; then + export "${varName}=${!varName:+${!varName}${delimiter}}${dir}"; + fi +} +appendToVar () +{ + + local -n nameref="$1"; + local useArray type; + if [ -n "$__structuredAttrs" ]; then + useArray=true; + else + useArray=false; + fi; + if type=$(declare -p "$1" 2> /dev/null); then + case "${type#* }" in + -A*) + echo "appendToVar(): ERROR: trying to use appendToVar on an associative array, use variable+=([\"X\"]=\"Y\") instead." 1>&2; + return 1 + ;; + -a*) + useArray=true + ;; + *) + useArray=false + ;; + esac; + fi; + shift; + if $useArray; then + nameref=(${nameref+"${nameref[@]}"} "$@"); + else + nameref="${nameref-} $*"; + fi +} +auditTmpdir () +{ + + local dir="$1"; + [ -e "$dir" ] || return 0; + echo "checking for references to $TMPDIR/ in $dir..."; + local tmpdir elf_fifo script_fifo; + tmpdir="$(mktemp -d)"; + elf_fifo="$tmpdir/elf"; + script_fifo="$tmpdir/script"; + mkfifo "$elf_fifo" "$script_fifo"; + ( find "$dir" -type f -not -path '*/.build-id/*' -print0 | while IFS= read -r -d '' file; do + if isELF "$file"; then + printf '%s\0' "$file" 1>&3; + else + if isScript "$file"; then + filename=${file##*/}; + dir=${file%/*}; + if [ -e "$dir/.$filename-wrapped" ]; then + printf '%s\0' "$file" 1>&4; + fi; + fi; + fi; + done; + exec 3>&- 4>&- ) 3> "$elf_fifo" 4> "$script_fifo" & ( xargs -0 -r -P "$NIX_BUILD_CORES" -n 1 sh -c ' + if { printf :; patchelf --print-rpath "$1"; } | grep -q -F ":$TMPDIR/"; then + echo "RPATH of binary $1 contains a forbidden reference to $TMPDIR/" + exit 1 + fi + ' _ < "$elf_fifo" ) & local pid_elf=$!; + local pid_script; + ( xargs -0 -r -P "$NIX_BUILD_CORES" -n 1 sh -c ' + if grep -q -F "$TMPDIR/" "$1"; then + echo "wrapper script $1 contains a forbidden reference to $TMPDIR/" + exit 1 + fi + ' _ < "$script_fifo" ) & local pid_script=$!; + wait "$pid_elf" || { + echo "Some binaries contain forbidden references to $TMPDIR/. Check the error above!"; + exit 1 + }; + wait "$pid_script" || { + echo "Some scripts contain forbidden references to $TMPDIR/. Check the error above!"; + exit 1 + }; + rm -r "$tmpdir" +} +bintoolsWrapper_addLDVars () +{ + + local role_post; + getHostRoleEnvHook; + if [[ -d "$1/lib64" && ! -L "$1/lib64" ]]; then + export NIX_LDFLAGS${role_post}+=" -L$1/lib64"; + fi; + if [[ -d "$1/lib" ]]; then + local -a glob=($1/lib/lib*); + if [ "${#glob[*]}" -gt 0 ]; then + export NIX_LDFLAGS${role_post}+=" -L$1/lib"; + fi; + fi +} +buildPhase () +{ + + runHook preBuild; + if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then + echo "no Makefile or custom buildPhase, doing nothing"; + else + foundMakefile=1; + local flagsArray=(${enableParallelBuilding:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); + concatTo flagsArray makeFlags makeFlagsArray buildFlags buildFlagsArray; + echoCmd 'build flags' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + unset flagsArray; + fi; + runHook postBuild +} +ccWrapper_addCVars () +{ + + local role_post; + getHostRoleEnvHook; + local found=; + if [ -d "$1/include" ]; then + export NIX_CFLAGS_COMPILE${role_post}+=" -isystem $1/include"; + found=1; + fi; + if [ -d "$1/Library/Frameworks" ]; then + export NIX_CFLAGS_COMPILE${role_post}+=" -iframework $1/Library/Frameworks"; + found=1; + fi; + if [[ -n "1" && -n ${NIX_STORE:-} && -n $found ]]; then + local scrubbed="$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${1#"$NIX_STORE"/*-}"; + export NIX_CFLAGS_COMPILE${role_post}+=" -fmacro-prefix-map=$1=$scrubbed"; + fi +} +checkPhase () +{ + + runHook preCheck; + if [[ -z "${foundMakefile:-}" ]]; then + echo "no Makefile or custom checkPhase, doing nothing"; + runHook postCheck; + return; + fi; + if [[ -z "${checkTarget:-}" ]]; then + if make -n ${makefile:+-f $makefile} check > /dev/null 2>&1; then + checkTarget="check"; + else + if make -n ${makefile:+-f $makefile} test > /dev/null 2>&1; then + checkTarget="test"; + fi; + fi; + fi; + if [[ -z "${checkTarget:-}" ]]; then + echo "no check/test target in ${makefile:-Makefile}, doing nothing"; + else + local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); + concatTo flagsArray makeFlags makeFlagsArray checkFlags=VERBOSE=y checkFlagsArray checkTarget; + echoCmd 'check flags' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + unset flagsArray; + fi; + runHook postCheck +} +compressManPages () +{ + + local dir="$1"; + if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]; then + return; + fi; + echo "gzipping man pages under $dir/share/man/"; + find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | xargs -0 -n1 -P "$NIX_BUILD_CORES" gzip -n -f; + find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | sort -z | while IFS= read -r -d '' f; do + local target; + target="$(readlink -f "$f")"; + if [ -f "$target".gz ]; then + ln -sf "$target".gz "$f".gz && rm "$f"; + fi; + done +} +concatStringsSep () +{ + + local sep="$1"; + local name="$2"; + local type oldifs; + if type=$(declare -p "$name" 2> /dev/null); then + local -n nameref="$name"; + case "${type#* }" in + -A*) + echo "concatStringsSep(): ERROR: trying to use concatStringsSep on an associative array." 1>&2; + return 1 + ;; + -a*) + local IFS="$(printf '\036')" + ;; + *) + local IFS=" " + ;; + esac; + local ifs_separated="${nameref[*]}"; + echo -n "${ifs_separated//"$IFS"/"$sep"}"; + fi +} +concatTo () +{ + + local -; + set -o noglob; + local -n targetref="$1"; + shift; + local arg default name type; + for arg in "$@"; + do + IFS="=" read -r name default <<< "$arg"; + local -n nameref="$name"; + if [[ -z "${nameref[*]}" && -n "$default" ]]; then + targetref+=("$default"); + else + if type=$(declare -p "$name" 2> /dev/null); then + case "${type#* }" in + -A*) + echo "concatTo(): ERROR: trying to use concatTo on an associative array." 1>&2; + return 1 + ;; + -a*) + targetref+=("${nameref[@]}") + ;; + *) + if [[ "$name" = *"Array" ]]; then + nixErrorLog "concatTo(): $name is not declared as array, treating as a singleton. This will become an error in future"; + targetref+=(${nameref+"${nameref[@]}"}); + else + targetref+=(${nameref-}); + fi + ;; + esac; + fi; + fi; + done +} +configurePhase () +{ + + runHook preConfigure; + : "${configureScript=}"; + if [[ -z "$configureScript" && -x ./configure ]]; then + configureScript=./configure; + fi; + if [ -z "${dontFixLibtool:-}" ]; then + export lt_cv_deplibs_check_method="${lt_cv_deplibs_check_method-pass_all}"; + local i; + find . -iname "ltmain.sh" -print0 | while IFS='' read -r -d '' i; do + echo "fixing libtool script $i"; + fixLibtool "$i"; + done; + CONFIGURE_MTIME_REFERENCE=$(mktemp configure.mtime.reference.XXXXXX); + find . -executable -type f -name configure -exec grep -l 'GNU Libtool is free software; you can redistribute it and/or modify' {} \; -exec touch -r {} "$CONFIGURE_MTIME_REFERENCE" \; -exec sed -i s_/usr/bin/file_file_g {} \; -exec touch -r "$CONFIGURE_MTIME_REFERENCE" {} \;; + rm -f "$CONFIGURE_MTIME_REFERENCE"; + fi; + if [[ -z "${dontAddPrefix:-}" && -n "$prefix" ]]; then + local -r prefixKeyOrDefault="${prefixKey:---prefix=}"; + if [ "${prefixKeyOrDefault: -1}" = " " ]; then + prependToVar configureFlags "$prefix"; + prependToVar configureFlags "${prefixKeyOrDefault::-1}"; + else + prependToVar configureFlags "$prefixKeyOrDefault$prefix"; + fi; + fi; + if [[ -f "$configureScript" ]]; then + if [ -z "${dontAddDisableDepTrack:-}" ]; then + if grep -q dependency-tracking "$configureScript"; then + prependToVar configureFlags --disable-dependency-tracking; + fi; + fi; + if [ -z "${dontDisableStatic:-}" ]; then + if grep -q enable-static "$configureScript"; then + prependToVar configureFlags --disable-static; + fi; + fi; + if [ -z "${dontPatchShebangsInConfigure:-}" ]; then + patchShebangs --build "$configureScript"; + fi; + fi; + if [ -n "$configureScript" ]; then + local -a flagsArray; + concatTo flagsArray configureFlags configureFlagsArray; + echoCmd 'configure flags' "${flagsArray[@]}"; + $configureScript "${flagsArray[@]}"; + unset flagsArray; + else + echo "no configure script, doing nothing"; + fi; + runHook postConfigure +} +consumeEntire () +{ + + if IFS='' read -r -d '' "$1"; then + echo "consumeEntire(): ERROR: Input null bytes, won't process" 1>&2; + return 1; + fi +} +definePhases () +{ + + if [ -z "${phases[*]:-}" ]; then + phases="${prePhases[*]:-} unpackPhase patchPhase ${preConfigurePhases[*]:-} configurePhase ${preBuildPhases[*]:-} buildPhase checkPhase ${preInstallPhases[*]:-} installPhase ${preFixupPhases[*]:-} fixupPhase installCheckPhase ${preDistPhases[*]:-} distPhase ${postPhases[*]:-}"; + fi +} +distPhase () +{ + + runHook preDist; + local flagsArray=(); + concatTo flagsArray distFlags distFlagsArray distTarget=dist; + echo 'dist flags: %q' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + if [ "${dontCopyDist:-0}" != 1 ]; then + mkdir -p "$out/tarballs"; + cp -pvd ${tarballs[*]:-*.tar.gz} "$out/tarballs"; + fi; + runHook postDist +} +dumpVars () +{ + + if [[ "${noDumpEnvVars:-0}" != 1 && -d "$NIX_BUILD_TOP" ]]; then + local old_umask; + old_umask=$(umask); + umask 0077; + export 2> /dev/null > "$NIX_BUILD_TOP/env-vars"; + umask "$old_umask"; + fi +} +echoCmd () +{ + + printf "%s:" "$1"; + shift; + printf ' %q' "$@"; + echo +} +exitHandler () +{ + + exitCode="$?"; + set +e; + if [ -n "${showBuildStats:-}" ]; then + read -r -d '' -a buildTimes < <(times); + echo "build times:"; + echo "user time for the shell ${buildTimes[0]}"; + echo "system time for the shell ${buildTimes[1]}"; + echo "user time for all child processes ${buildTimes[2]}"; + echo "system time for all child processes ${buildTimes[3]}"; + fi; + if (( "$exitCode" != 0 )); then + runHook failureHook; + if [ -n "${succeedOnFailure:-}" ]; then + echo "build failed with exit code $exitCode (ignored)"; + mkdir -p "$out/nix-support"; + printf "%s" "$exitCode" > "$out/nix-support/failed"; + exit 0; + fi; + else + runHook exitHook; + fi; + return "$exitCode" +} +findInputs () +{ + + local -r pkg="$1"; + local -r hostOffset="$2"; + local -r targetOffset="$3"; + (( hostOffset <= targetOffset )) || exit 1; + local varVar="${pkgAccumVarVars[hostOffset + 1]}"; + local varRef="$varVar[$((targetOffset - hostOffset))]"; + local var="${!varRef}"; + unset -v varVar varRef; + local varSlice="$var[*]"; + case " ${!varSlice-} " in + *" $pkg "*) + return 0 + ;; + esac; + unset -v varSlice; + eval "$var"'+=("$pkg")'; + if ! [ -e "$pkg" ]; then + echo "build input $pkg does not exist" 1>&2; + exit 1; + fi; + function mapOffset () + { + local -r inputOffset="$1"; + local -n outputOffset="$2"; + if (( inputOffset <= 0 )); then + outputOffset=$((inputOffset + hostOffset)); + else + outputOffset=$((inputOffset - 1 + targetOffset)); + fi + }; + local relHostOffset; + for relHostOffset in "${allPlatOffsets[@]}"; + do + local files="${propagatedDepFilesVars[relHostOffset + 1]}"; + local hostOffsetNext; + mapOffset "$relHostOffset" hostOffsetNext; + (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; + local relTargetOffset; + for relTargetOffset in "${allPlatOffsets[@]}"; + do + (( "$relHostOffset" <= "$relTargetOffset" )) || continue; + local fileRef="${files}[$relTargetOffset - $relHostOffset]"; + local file="${!fileRef}"; + unset -v fileRef; + local targetOffsetNext; + mapOffset "$relTargetOffset" targetOffsetNext; + (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; + [[ -f "$pkg/nix-support/$file" ]] || continue; + local pkgNext; + read -r -d '' pkgNext < "$pkg/nix-support/$file" || true; + for pkgNext in $pkgNext; + do + findInputs "$pkgNext" "$hostOffsetNext" "$targetOffsetNext"; + done; + done; + done +} +fixLibtool () +{ + + local search_path; + for flag in $NIX_LDFLAGS; + do + case $flag in + -L*) + search_path+=" ${flag#-L}" + ;; + esac; + done; + sed -i "$1" -e "s^eval \(sys_lib_search_path=\).*^\1'${search_path:-}'^" -e 's^eval sys_lib_.+search_path=.*^^' +} +fixupPhase () +{ + + local output; + for output in $(getAllOutputNames); + do + if [ -e "${!output}" ]; then + chmod -R u+w,u-s,g-s "${!output}"; + fi; + done; + runHook preFixup; + local output; + for output in $(getAllOutputNames); + do + prefix="${!output}" runHook fixupOutput; + done; + recordPropagatedDependencies; + if [ -n "${setupHook:-}" ]; then + mkdir -p "${!outputDev}/nix-support"; + substituteAll "$setupHook" "${!outputDev}/nix-support/setup-hook"; + fi; + if [ -n "${setupHooks:-}" ]; then + mkdir -p "${!outputDev}/nix-support"; + local hook; + for hook in ${setupHooks[@]}; + do + local content; + consumeEntire content < "$hook"; + substituteAllStream content "file '$hook'" >> "${!outputDev}/nix-support/setup-hook"; + unset -v content; + done; + unset -v hook; + fi; + if [ -n "${propagatedUserEnvPkgs[*]:-}" ]; then + mkdir -p "${!outputBin}/nix-support"; + printWords "${propagatedUserEnvPkgs[@]}" > "${!outputBin}/nix-support/propagated-user-env-packages"; + fi; + runHook postFixup +} +genericBuild () +{ + + export GZIP_NO_TIMESTAMPS=1; + if [ -f "${buildCommandPath:-}" ]; then + source "$buildCommandPath"; + return; + fi; + if [ -n "${buildCommand:-}" ]; then + eval "$buildCommand"; + return; + fi; + definePhases; + for curPhase in ${phases[*]}; + do + runPhase "$curPhase"; + done +} +getAllOutputNames () +{ + + if [ -n "$__structuredAttrs" ]; then + echo "${!outputs[*]}"; + else + echo "$outputs"; + fi +} +getHostRole () +{ + + getRole "$hostOffset" +} +getHostRoleEnvHook () +{ + + getRole "$depHostOffset" +} +getRole () +{ + + case $1 in + -1) + role_post='_FOR_BUILD' + ;; + 0) + role_post='' + ;; + 1) + role_post='_FOR_TARGET' + ;; + *) + echo "apple-sdk-14.4: used as improper sort of dependency" 1>&2; + return 1 + ;; + esac +} +getTargetRole () +{ + + getRole "$targetOffset" +} +getTargetRoleEnvHook () +{ + + getRole "$depTargetOffset" +} +getTargetRoleWrapper () +{ + + case $targetOffset in + -1) + export NIX_@wrapperName@_TARGET_BUILD_@suffixSalt@=1 + ;; + 0) + export NIX_@wrapperName@_TARGET_HOST_@suffixSalt@=1 + ;; + 1) + export NIX_@wrapperName@_TARGET_TARGET_@suffixSalt@=1 + ;; + *) + echo "apple-sdk-14.4: used as improper sort of dependency" 1>&2; + return 1 + ;; + esac +} +installCheckPhase () +{ + + runHook preInstallCheck; + if [[ -z "${foundMakefile:-}" ]]; then + echo "no Makefile or custom installCheckPhase, doing nothing"; + else + if [[ -z "${installCheckTarget:-}" ]] && ! make -n ${makefile:+-f $makefile} "${installCheckTarget:-installcheck}" > /dev/null 2>&1; then + echo "no installcheck target in ${makefile:-Makefile}, doing nothing"; + else + local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); + concatTo flagsArray makeFlags makeFlagsArray installCheckFlags installCheckFlagsArray installCheckTarget=installcheck; + echoCmd 'installcheck flags' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + unset flagsArray; + fi; + fi; + runHook postInstallCheck +} +installPhase () +{ + + runHook preInstall; + if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then + echo "no Makefile or custom installPhase, doing nothing"; + runHook postInstall; + return; + else + foundMakefile=1; + fi; + if [ -n "$prefix" ]; then + mkdir -p "$prefix"; + fi; + local flagsArray=(${enableParallelInstalling:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); + concatTo flagsArray makeFlags makeFlagsArray installFlags installFlagsArray installTargets=install; + echoCmd 'install flags' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + unset flagsArray; + runHook postInstall +} +isELF () +{ + + local fn="$1"; + local fd; + local magic; + exec {fd}< "$fn"; + LANG=C read -r -n 4 -u "$fd" magic; + exec {fd}>&-; + if [ "$magic" = 'ELF' ]; then + return 0; + else + return 1; + fi +} +isMachO () +{ + + local fn="$1"; + local fd; + local magic; + exec {fd}< "$fn"; + LANG=C read -r -n 4 -u "$fd" magic; + exec {fd}>&-; + if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xcf") || "$magic" = $(echo -ne "\xcf\xfa\xed\xfe") ]]; then + return 0; + else + if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xce") || "$magic" = $(echo -ne "\xce\xfa\xed\xfe") ]]; then + return 0; + else + if [[ "$magic" = $(echo -ne "\xca\xfe\xba\xbe") || "$magic" = $(echo -ne "\xbe\xba\xfe\xca") ]]; then + return 0; + else + return 1; + fi; + fi; + fi +} +isScript () +{ + + local fn="$1"; + local fd; + local magic; + exec {fd}< "$fn"; + LANG=C read -r -n 2 -u "$fd" magic; + exec {fd}>&-; + if [[ "$magic" =~ \#! ]]; then + return 0; + else + return 1; + fi +} +mapOffset () +{ + + local -r inputOffset="$1"; + local -n outputOffset="$2"; + if (( inputOffset <= 0 )); then + outputOffset=$((inputOffset + hostOffset)); + else + outputOffset=$((inputOffset - 1 + targetOffset)); + fi +} +moveToOutput () +{ + + local patt="$1"; + local dstOut="$2"; + local output; + for output in $(getAllOutputNames); + do + if [ "${!output}" = "$dstOut" ]; then + continue; + fi; + local srcPath; + for srcPath in "${!output}"/$patt; + do + if [ ! -e "$srcPath" ] && [ ! -L "$srcPath" ]; then + continue; + fi; + if [ "$dstOut" = REMOVE ]; then + echo "Removing $srcPath"; + rm -r "$srcPath"; + else + local dstPath="$dstOut${srcPath#${!output}}"; + echo "Moving $srcPath to $dstPath"; + if [ -d "$dstPath" ] && [ -d "$srcPath" ]; then + rmdir "$srcPath" --ignore-fail-on-non-empty; + if [ -d "$srcPath" ]; then + mv -t "$dstPath" "$srcPath"/*; + rmdir "$srcPath"; + fi; + else + mkdir -p "$(readlink -m "$dstPath/..")"; + mv "$srcPath" "$dstPath"; + fi; + fi; + local srcParent="$(readlink -m "$srcPath/..")"; + if [ -n "$(find "$srcParent" -maxdepth 0 -type d -empty 2> /dev/null)" ]; then + echo "Removing empty $srcParent/ and (possibly) its parents"; + rmdir -p --ignore-fail-on-non-empty "$srcParent" 2> /dev/null || true; + fi; + done; + done +} +nixChattyLog () +{ + + _nixLogWithLevel 5 "$*" +} +nixDebugLog () +{ + + _nixLogWithLevel 6 "$*" +} +nixErrorLog () +{ + + _nixLogWithLevel 0 "$*" +} +nixInfoLog () +{ + + _nixLogWithLevel 3 "$*" +} +nixLog () +{ + + [[ -z ${NIX_LOG_FD-} ]] && return 0; + local callerName="${FUNCNAME[1]}"; + if [[ $callerName == "_callImplicitHook" ]]; then + callerName="${hookName:?}"; + fi; + printf "%s: %s\n" "$callerName" "$*" >&"$NIX_LOG_FD" +} +nixNoticeLog () +{ + + _nixLogWithLevel 2 "$*" +} +nixTalkativeLog () +{ + + _nixLogWithLevel 4 "$*" +} +nixVomitLog () +{ + + _nixLogWithLevel 7 "$*" +} +nixWarnLog () +{ + + _nixLogWithLevel 1 "$*" +} +noBrokenSymlinks () +{ + + local -r output="${1:?}"; + local path; + local pathParent; + local symlinkTarget; + local -i numDanglingSymlinks=0; + local -i numReflexiveSymlinks=0; + local -i numUnreadableSymlinks=0; + if [[ ! -e $output ]]; then + nixWarnLog "skipping non-existent output $output"; + return 0; + fi; + nixInfoLog "running on $output"; + while IFS= read -r -d '' path; do + pathParent="$(dirname "$path")"; + if ! symlinkTarget="$(readlink "$path")"; then + nixErrorLog "the symlink $path is unreadable"; + numUnreadableSymlinks+=1; + continue; + fi; + if [[ $symlinkTarget == /* ]]; then + nixInfoLog "symlink $path points to absolute target $symlinkTarget"; + else + nixInfoLog "symlink $path points to relative target $symlinkTarget"; + symlinkTarget="$(realpath --no-symlinks --canonicalize-missing "$pathParent/$symlinkTarget")"; + fi; + if [[ $symlinkTarget = "$TMPDIR"/* ]]; then + nixErrorLog "the symlink $path points to $TMPDIR directory: $symlinkTarget"; + numDanglingSymlinks+=1; + continue; + fi; + if [[ $symlinkTarget != "$NIX_STORE"/* ]]; then + nixInfoLog "symlink $path points outside the Nix store; ignoring"; + continue; + fi; + if [[ $path == "$symlinkTarget" ]]; then + nixErrorLog "the symlink $path is reflexive"; + numReflexiveSymlinks+=1; + else + if [[ ! -e $symlinkTarget ]]; then + nixErrorLog "the symlink $path points to a missing target: $symlinkTarget"; + numDanglingSymlinks+=1; + else + nixDebugLog "the symlink $path is irreflexive and points to a target which exists"; + fi; + fi; + done < <(find "$output" -type l -print0); + if ((numDanglingSymlinks > 0 || numReflexiveSymlinks > 0 || numUnreadableSymlinks > 0)); then + nixErrorLog "found $numDanglingSymlinks dangling symlinks, $numReflexiveSymlinks reflexive symlinks and $numUnreadableSymlinks unreadable symlinks"; + exit 1; + fi; + return 0 +} +noBrokenSymlinksInAllOutputs () +{ + + if [[ -z ${dontCheckForBrokenSymlinks-} ]]; then + for output in $(getAllOutputNames); + do + noBrokenSymlinks "${!output}"; + done; + fi +} +patchPhase () +{ + + runHook prePatch; + local -a patchesArray; + concatTo patchesArray patches; + local -a flagsArray; + concatTo flagsArray patchFlags=-p1; + for i in "${patchesArray[@]}"; + do + echo "applying patch $i"; + local uncompress=cat; + case "$i" in + *.gz) + uncompress="gzip -d" + ;; + *.bz2) + uncompress="bzip2 -d" + ;; + *.xz) + uncompress="xz -d" + ;; + *.lzma) + uncompress="lzma -d" + ;; + esac; + $uncompress < "$i" 2>&1 | patch "${flagsArray[@]}"; + done; + runHook postPatch +} +patchShebangs () +{ + + local pathName; + local update=false; + while [[ $# -gt 0 ]]; do + case "$1" in + --host) + pathName=HOST_PATH; + shift + ;; + --build) + pathName=PATH; + shift + ;; + --update) + update=true; + shift + ;; + --) + shift; + break + ;; + -* | --*) + echo "Unknown option $1 supplied to patchShebangs" 1>&2; + return 1 + ;; + *) + break + ;; + esac; + done; + echo "patching script interpreter paths in $@"; + local f; + local oldPath; + local newPath; + local arg0; + local args; + local oldInterpreterLine; + local newInterpreterLine; + if [[ $# -eq 0 ]]; then + echo "No arguments supplied to patchShebangs" 1>&2; + return 0; + fi; + local f; + while IFS= read -r -d '' f; do + isScript "$f" || continue; + read -r oldInterpreterLine < "$f" || [ "$oldInterpreterLine" ]; + read -r oldPath arg0 args <<< "${oldInterpreterLine:2}"; + if [[ -z "${pathName:-}" ]]; then + if [[ -n $strictDeps && $f == "$NIX_STORE"* ]]; then + pathName=HOST_PATH; + else + pathName=PATH; + fi; + fi; + if [[ "$oldPath" == *"/bin/env" ]]; then + if [[ $arg0 == "-S" ]]; then + arg0=${args%% *}; + [[ "$args" == *" "* ]] && args=${args#* } || args=; + newPath="$(PATH="${!pathName}" type -P "env" || true)"; + args="-S $(PATH="${!pathName}" type -P "$arg0" || true) $args"; + else + if [[ $arg0 == "-"* || $arg0 == *"="* ]]; then + echo "$f: unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)" 1>&2; + exit 1; + else + newPath="$(PATH="${!pathName}" type -P "$arg0" || true)"; + fi; + fi; + else + if [[ -z $oldPath ]]; then + oldPath="/bin/sh"; + fi; + newPath="$(PATH="${!pathName}" type -P "$(basename "$oldPath")" || true)"; + args="$arg0 $args"; + fi; + newInterpreterLine="$newPath $args"; + newInterpreterLine=${newInterpreterLine%${newInterpreterLine##*[![:space:]]}}; + if [[ -n "$oldPath" && ( "$update" == true || "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ) ]]; then + if [[ -n "$newPath" && "$newPath" != "$oldPath" ]]; then + echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\""; + escapedInterpreterLine=${newInterpreterLine//\\/\\\\}; + timestamp=$(stat --printf "%y" "$f"); + tmpFile=$(mktemp -t patchShebangs.XXXXXXXXXX); + sed -e "1 s|.*|#\!$escapedInterpreterLine|" "$f" > "$tmpFile"; + local restoreReadOnly; + if [[ ! -w "$f" ]]; then + chmod +w "$f"; + restoreReadOnly=true; + fi; + cat "$tmpFile" > "$f"; + rm "$tmpFile"; + if [[ -n "${restoreReadOnly:-}" ]]; then + chmod -w "$f"; + fi; + touch --date "$timestamp" "$f"; + fi; + fi; + done < <(find "$@" -type f -perm -0100 -print0) +} +patchShebangsAuto () +{ + + if [[ -z "${dontPatchShebangs-}" && -e "$prefix" ]]; then + if [[ "$output" != out && "$output" = "$outputDev" ]]; then + patchShebangs --build "$prefix"; + else + patchShebangs --host "$prefix"; + fi; + fi +} +pkgConfigWrapper_addPkgConfigPath () +{ + + local role_post; + getHostRoleEnvHook; + addToSearchPath "PKG_CONFIG_PATH${role_post}" "$1/lib/pkgconfig"; + addToSearchPath "PKG_CONFIG_PATH${role_post}" "$1/share/pkgconfig" +} +prependToVar () +{ + + local -n nameref="$1"; + local useArray type; + if [ -n "$__structuredAttrs" ]; then + useArray=true; + else + useArray=false; + fi; + if type=$(declare -p "$1" 2> /dev/null); then + case "${type#* }" in + -A*) + echo "prependToVar(): ERROR: trying to use prependToVar on an associative array." 1>&2; + return 1 + ;; + -a*) + useArray=true + ;; + *) + useArray=false + ;; + esac; + fi; + shift; + if $useArray; then + nameref=("$@" ${nameref+"${nameref[@]}"}); + else + nameref="$* ${nameref-}"; + fi +} +printLines () +{ + + (( "$#" > 0 )) || return 0; + printf '%s\n' "$@" +} +printPhases () +{ + + definePhases; + local phase; + for phase in ${phases[*]}; + do + printf '%s\n' "$phase"; + done +} +printWords () +{ + + (( "$#" > 0 )) || return 0; + printf '%s ' "$@" +} +recordPropagatedDependencies () +{ + + declare -ra flatVars=(depsBuildBuildPropagated propagatedNativeBuildInputs depsBuildTargetPropagated depsHostHostPropagated propagatedBuildInputs depsTargetTargetPropagated); + declare -ra flatFiles=("${propagatedBuildDepFiles[@]}" "${propagatedHostDepFiles[@]}" "${propagatedTargetDepFiles[@]}"); + local propagatedInputsIndex; + for propagatedInputsIndex in "${!flatVars[@]}"; + do + local propagatedInputsSlice="${flatVars[$propagatedInputsIndex]}[@]"; + local propagatedInputsFile="${flatFiles[$propagatedInputsIndex]}"; + [[ -n "${!propagatedInputsSlice}" ]] || continue; + mkdir -p "${!outputDev}/nix-support"; + printWords ${!propagatedInputsSlice} > "${!outputDev}/nix-support/$propagatedInputsFile"; + done +} +runHook () +{ + + local hookName="$1"; + shift; + local hooksSlice="${hookName%Hook}Hooks[@]"; + local hook; + for hook in "_callImplicitHook 0 $hookName" ${!hooksSlice+"${!hooksSlice}"}; + do + _logHook "$hookName" "$hook" "$@"; + _eval "$hook" "$@"; + done; + return 0 +} +runOneHook () +{ + + local hookName="$1"; + shift; + local hooksSlice="${hookName%Hook}Hooks[@]"; + local hook ret=1; + for hook in "_callImplicitHook 1 $hookName" ${!hooksSlice+"${!hooksSlice}"}; + do + _logHook "$hookName" "$hook" "$@"; + if _eval "$hook" "$@"; then + ret=0; + break; + fi; + done; + return "$ret" +} +runPhase () +{ + + local curPhase="$*"; + if [[ "$curPhase" = unpackPhase && -n "${dontUnpack:-}" ]]; then + return; + fi; + if [[ "$curPhase" = patchPhase && -n "${dontPatch:-}" ]]; then + return; + fi; + if [[ "$curPhase" = configurePhase && -n "${dontConfigure:-}" ]]; then + return; + fi; + if [[ "$curPhase" = buildPhase && -n "${dontBuild:-}" ]]; then + return; + fi; + if [[ "$curPhase" = checkPhase && -z "${doCheck:-}" ]]; then + return; + fi; + if [[ "$curPhase" = installPhase && -n "${dontInstall:-}" ]]; then + return; + fi; + if [[ "$curPhase" = fixupPhase && -n "${dontFixup:-}" ]]; then + return; + fi; + if [[ "$curPhase" = installCheckPhase && -z "${doInstallCheck:-}" ]]; then + return; + fi; + if [[ "$curPhase" = distPhase && -z "${doDist:-}" ]]; then + return; + fi; + showPhaseHeader "$curPhase"; + dumpVars; + local startTime endTime; + startTime=$(date +"%s"); + eval "${!curPhase:-$curPhase}"; + endTime=$(date +"%s"); + showPhaseFooter "$curPhase" "$startTime" "$endTime"; + if [ "$curPhase" = unpackPhase ]; then + [ -n "${sourceRoot:-}" ] && chmod +x -- "${sourceRoot}"; + cd -- "${sourceRoot:-.}"; + fi +} +showPhaseFooter () +{ + + local phase="$1"; + local startTime="$2"; + local endTime="$3"; + local delta=$(( endTime - startTime )); + (( delta < 30 )) && return; + local H=$((delta/3600)); + local M=$((delta%3600/60)); + local S=$((delta%60)); + echo -n "$phase completed in "; + (( H > 0 )) && echo -n "$H hours "; + (( M > 0 )) && echo -n "$M minutes "; + echo "$S seconds" +} +showPhaseHeader () +{ + + local phase="$1"; + echo "Running phase: $phase"; + if [[ -z ${NIX_LOG_FD-} ]]; then + return; + fi; + printf "@nix { \"action\": \"setPhase\", \"phase\": \"%s\" }\n" "$phase" >&"$NIX_LOG_FD" +} +stripDirs () +{ + + local cmd="$1"; + local ranlibCmd="$2"; + local paths="$3"; + local stripFlags="$4"; + local excludeFlags=(); + local pathsNew=; + [ -z "$cmd" ] && echo "stripDirs: Strip command is empty" 1>&2 && exit 1; + [ -z "$ranlibCmd" ] && echo "stripDirs: Ranlib command is empty" 1>&2 && exit 1; + local pattern; + if [ -n "${stripExclude:-}" ]; then + for pattern in "${stripExclude[@]}"; + do + excludeFlags+=(-a '!' '(' -name "$pattern" -o -wholename "$prefix/$pattern" ')'); + done; + fi; + local p; + for p in ${paths}; + do + if [ -e "$prefix/$p" ]; then + pathsNew="${pathsNew} $prefix/$p"; + fi; + done; + paths=${pathsNew}; + if [ -n "${paths}" ]; then + echo "stripping (with command $cmd and flags $stripFlags) in $paths"; + local striperr; + striperr="$(mktemp --tmpdir="$TMPDIR" 'striperr.XXXXXX')"; + find $paths -type f "${excludeFlags[@]}" -a '!' -path "$prefix/lib/debug/*" -printf '%D-%i,%p\0' | sort -t, -k1,1 -u -z | cut -d, -f2- -z | xargs -r -0 -n1 -P "$NIX_BUILD_CORES" -- $cmd $stripFlags 2> "$striperr" || exit_code=$?; + [[ "$exit_code" = 123 || -z "$exit_code" ]] || ( cat "$striperr" 1>&2 && exit 1 ); + rm "$striperr"; + find $paths -name '*.a' -type f -exec $ranlibCmd '{}' \; 2> /dev/null; + fi +} +stripHash () +{ + + local strippedName casematchOpt=0; + strippedName="$(basename -- "$1")"; + shopt -q nocasematch && casematchOpt=1; + shopt -u nocasematch; + if [[ "$strippedName" =~ ^[a-z0-9]{32}- ]]; then + echo "${strippedName:33}"; + else + echo "$strippedName"; + fi; + if (( casematchOpt )); then + shopt -s nocasematch; + fi +} +substitute () +{ + + local input="$1"; + local output="$2"; + shift 2; + if [ ! -f "$input" ]; then + echo "substitute(): ERROR: file '$input' does not exist" 1>&2; + return 1; + fi; + local content; + consumeEntire content < "$input"; + if [ -e "$output" ]; then + chmod +w "$output"; + fi; + substituteStream content "file '$input'" "$@" > "$output" +} +substituteAll () +{ + + local input="$1"; + local output="$2"; + local -a args=(); + _allFlags; + substitute "$input" "$output" "${args[@]}" +} +substituteAllInPlace () +{ + + local fileName="$1"; + shift; + substituteAll "$fileName" "$fileName" "$@" +} +substituteAllStream () +{ + + local -a args=(); + _allFlags; + substituteStream "$1" "$2" "${args[@]}" +} +substituteInPlace () +{ + + local -a fileNames=(); + for arg in "$@"; + do + if [[ "$arg" = "--"* ]]; then + break; + fi; + fileNames+=("$arg"); + shift; + done; + if ! [[ "${#fileNames[@]}" -gt 0 ]]; then + echo "substituteInPlace called without any files to operate on (files must come before options!)" 1>&2; + return 1; + fi; + for file in "${fileNames[@]}"; + do + substitute "$file" "$file" "$@"; + done +} +substituteStream () +{ + + local var=$1; + local description=$2; + shift 2; + while (( "$#" )); do + local replace_mode="$1"; + case "$1" in + --replace) + if ! "$_substituteStream_has_warned_replace_deprecation"; then + echo "substituteStream() in derivation $name: WARNING: '--replace' is deprecated, use --replace-{fail,warn,quiet}. ($description)" 1>&2; + _substituteStream_has_warned_replace_deprecation=true; + fi; + replace_mode='--replace-warn' + ;& + --replace-quiet | --replace-warn | --replace-fail) + pattern="$2"; + replacement="$3"; + shift 3; + if ! [[ "${!var}" == *"$pattern"* ]]; then + if [ "$replace_mode" == --replace-warn ]; then + printf "substituteStream() in derivation $name: WARNING: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2; + else + if [ "$replace_mode" == --replace-fail ]; then + printf "substituteStream() in derivation $name: ERROR: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2; + return 1; + fi; + fi; + fi; + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}' + ;; + --subst-var) + local varName="$2"; + shift 2; + if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then + echo "substituteStream() in derivation $name: ERROR: substitution variables must be valid Bash names, \"$varName\" isn't." 1>&2; + return 1; + fi; + if [ -z ${!varName+x} ]; then + echo "substituteStream() in derivation $name: ERROR: variable \$$varName is unset" 1>&2; + return 1; + fi; + pattern="@$varName@"; + replacement="${!varName}"; + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}' + ;; + --subst-var-by) + pattern="@$2@"; + replacement="$3"; + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; + shift 3 + ;; + *) + echo "substituteStream() in derivation $name: ERROR: Invalid command line argument: $1" 1>&2; + return 1 + ;; + esac; + done; + printf "%s" "${!var}" +} +unpackFile () +{ + + curSrc="$1"; + echo "unpacking source archive $curSrc"; + if ! runOneHook unpackCmd "$curSrc"; then + echo "do not know how to unpack source archive $curSrc"; + exit 1; + fi +} +unpackPhase () +{ + + runHook preUnpack; + if [ -z "${srcs:-}" ]; then + if [ -z "${src:-}" ]; then + echo 'variable $src or $srcs should point to the source'; + exit 1; + fi; + srcs="$src"; + fi; + local -a srcsArray; + concatTo srcsArray srcs; + local dirsBefore=""; + for i in *; + do + if [ -d "$i" ]; then + dirsBefore="$dirsBefore $i "; + fi; + done; + for i in "${srcsArray[@]}"; + do + unpackFile "$i"; + done; + : "${sourceRoot=}"; + if [ -n "${setSourceRoot:-}" ]; then + runOneHook setSourceRoot; + else + if [ -z "$sourceRoot" ]; then + for i in *; + do + if [ -d "$i" ]; then + case $dirsBefore in + *\ $i\ *) + + ;; + *) + if [ -n "$sourceRoot" ]; then + echo "unpacker produced multiple directories"; + exit 1; + fi; + sourceRoot="$i" + ;; + esac; + fi; + done; + fi; + fi; + if [ -z "$sourceRoot" ]; then + echo "unpacker appears to have produced no directories"; + exit 1; + fi; + echo "source root is $sourceRoot"; + if [ "${dontMakeSourcesWritable:-0}" != 1 ]; then + chmod -R u+w -- "$sourceRoot"; + fi; + runHook postUnpack +} +updateAutotoolsGnuConfigScriptsPhase () +{ + + if [ -n "${dontUpdateAutotoolsGnuConfigScripts-}" ]; then + return; + fi; + for script in config.sub config.guess; + do + for f in $(find . -type f -name "$script"); + do + echo "Updating Autotools / GNU config script to a newer upstream version: $f"; + cp -f "/nix/store/xb4f90wzr6nca7a1wy9ry9p2hvlhhsxx-gnu-config-2024-01-01/$script" "$f"; + done; + done +} +updateSourceDateEpoch () +{ + + local path="$1"; + [[ $path == -* ]] && path="./$path"; + local -a res=($(find "$path" -type f -not -newer "$NIX_BUILD_TOP/.." -printf '%T@ "%p"\0' | sort -n --zero-terminated | tail -n1 --zero-terminated | head -c -1)); + local time="${res[0]//\.[0-9]*/}"; + local newestFile="${res[1]}"; + if [ "${time:-0}" -gt "$SOURCE_DATE_EPOCH" ]; then + echo "setting SOURCE_DATE_EPOCH to timestamp $time of file $newestFile"; + export SOURCE_DATE_EPOCH="$time"; + local now="$(date +%s)"; + if [ "$time" -gt $((now - 60)) ]; then + echo "warning: file $newestFile may be generated; SOURCE_DATE_EPOCH may be non-deterministic"; + fi; + fi +} +PATH="$PATH${nix_saved_PATH:+:$nix_saved_PATH}" +XDG_DATA_DIRS="$XDG_DATA_DIRS${nix_saved_XDG_DATA_DIRS:+:$nix_saved_XDG_DATA_DIRS}" +export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)" +export TMP="$NIX_BUILD_TOP" +export TMPDIR="$NIX_BUILD_TOP" +export TEMP="$NIX_BUILD_TOP" +export TEMPDIR="$NIX_BUILD_TOP" +eval "${shellHook:-}" diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index c18493b..0000000 --- a/.dockerignore +++ /dev/null @@ -1,8 +0,0 @@ -/dist/ -package-lock.json - -# -src/Tailwind.elm -src/Tailwind -/node_modules/ -*.iml diff --git a/.envrc b/.envrc index 3550a30..117c726 100644 --- a/.envrc +++ b/.envrc @@ -1 +1,17 @@ -use flake +#!/usr/bin/env bash + +if ! has nix_direnv_version || ! nix_direnv_version 3.1.0; then + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.1.0/direnvrc" "sha256-yMJ2OVMzrFaDPn7q8nCBZFRYpL/f0RcHzhmw/i6btJM=" +fi + +export DEVENV_IN_DIRENV_SHELL=true + +watch_file flake.nix +watch_file flake.lock + +mkdir -p "$PWD/.devenv" +DEVENV_ROOT_FILE="$PWD/.devenv/root" +printf %s "$PWD" >"$DEVENV_ROOT_FILE" +if ! use flake . --override-input devenv-root "file+file://$DEVENV_ROOT_FILE"; then + echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2 +fi diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 1584754..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: CI - -on: - push: - branches: - - master - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} - name: devden-web-frontend - -jobs: - push_to_registry: - name: Push Docker image to GitHub Packages - runs-on: ubuntu-latest - permissions: - packages: write - contents: read - steps: - - - name: Check out the repo - uses: actions/checkout@v2 - - - name: Cache Docker layers - uses: actions/cache@v2 - with: - path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx- - - name: Log in to the Container registry - uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=pr - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - - name: Build and push Docker image - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc - with: - context: . - platforms: linux/amd64 - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.gitignore b/.gitignore index d386d01..ce6402f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,5 @@ -/dist/ -package-lock.json -yarn.lock - -# -src/Tailwind.elm -src/Tailwind -/node_modules/ - -.idea +.DS_Store +.elm-spa elm-stuff - -# Macs are stupid sometimes :) -.DS_Store \ No newline at end of file +node_modules +dist \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..69b361b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "nixEnvSelector.nixFile": "${workspaceFolder}/flake.nix" +} \ No newline at end of file diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz deleted file mode 100644 index af8ffa5bfdee405b75de5446692d00cd7d674d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258358 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¥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 Dp&^7! diff --git a/.yarnrc.yml b/.yarnrc.yml deleted file mode 100644 index 3186f3f..0000000 --- a/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index faea967..0000000 --- a/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM node:alpine as build - -RUN apk add curl - -WORKDIR /app -COPY . /app -RUN yarn - -RUN curl -L -o elm.gz https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz \ - && gunzip elm.gz \ - && chmod +x elm \ - && mv elm /usr/local/bin/ - -RUN yarn build-prod - -FROM nginx:stable-alpine -COPY --from=build /app/dist /usr/share/nginx/html -COPY nginx.conf /etc/nginx/conf.d/default.conf -EXPOSE 80 -CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 3c9a27e..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 TheDeveloperDen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.MD b/README.MD index ca423fc..23d4401 100644 --- a/README.MD +++ b/README.MD @@ -1,24 +1,28 @@ -# devden-web-frontend - -## Building - -* To automatically recompile Elm files when changes are detected use `yarn watch-elm` -* To build for development run `yarn build` -* To build for production run `yarn build-prod` - -The site is built to `./dist/` - -## TODO - -- [ ] Main page (index), shows information about the organisation with links to the discord server -- [ ] `/xp/leaderboard` - show the top N users in terms of XP and level (can query the API for this). - See https://lb.helpch.at/ for inspiration. Maybe allow parameters like `?size=10` to show the top 10 users. -- [ ] `/stats/` - Shows various graphs with stats about the servers. We can decide on exactly the data we show later, - but we have logs of all user joins, leaves and messages (with user IDs, timestamps, content, etc). -- [ ] `/projects/` - Show information about a various project we have. - Should follow a standard format and show github link, contributors (fetch from github?), and other information. -- [ ] `/faqs` - Show all the FAQs that you'd see in `ddfaq` -- [X] `/rules` - ~~pretty obvious, rules of the server. we can provide these in a json format if it helps~~ -- [ ] `/team` or `/staff` - Show a nice list of admins, mods, contributors to projects, etc -- [ ] `/moderation/` Once the bot gets moderation features it would be very very cool to have a panel - like Dyno or yagpdb have. This probably won't happen for a while. +# my new project +> 🌳 built with [elm-spa](https://elm-spa.dev) + +## dependencies + +This project requires the latest LTS version of [Node.js](https://nodejs.org/) + +```bash +npm install -g elm elm-spa +``` + +## running locally + +```bash +elm-spa server # starts this app at http:/localhost:1234 +``` + +### other commands + +```bash +elm-spa add # add a new page to the application +elm-spa build # production build +elm-spa watch # runs build as you code (without the server) +``` + +## learn more + +You can learn more at [elm-spa.dev](https://elm-spa.dev) \ No newline at end of file diff --git a/elm.json b/elm.json index fbf8402..2edf09c 100644 --- a/elm.json +++ b/elm.json @@ -1,33 +1,27 @@ { "type": "application", "source-directories": [ - "src" + "src", + ".elm-spa/defaults", + ".elm-spa/generated" ], "elm-version": "0.19.1", "dependencies": { "direct": { - "NoRedInk/elm-json-decode-pipeline": "1.0.0", "elm/browser": "1.0.2", "elm/core": "1.0.5", "elm/html": "1.0.0", - "elm/http": "2.0.0", "elm/json": "1.1.3", "elm/url": "1.0.0", - "erlandsona/assoc-set": "1.1.0", - "fapian/elm-html-aria": "1.4.0", - "pablohirafuji/elm-markdown": "2.0.5" + "ryan-haskell/elm-spa": "1.0.0" }, "indirect": { - "elm/bytes": "1.0.8", - "elm/file": "1.0.5", - "elm/regex": "1.0.0", "elm/time": "1.0.0", - "elm/virtual-dom": "1.0.2", - "pzp1997/assoc-list": "1.0.0" + "elm/virtual-dom": "1.0.2" } }, "test-dependencies": { "direct": {}, "indirect": {} } -} +} \ No newline at end of file diff --git a/flake.lock b/flake.lock deleted file mode 100644 index 91a254e..0000000 --- a/flake.lock +++ /dev/null @@ -1,25 +0,0 @@ -{ - "nodes": { - "nixpkgs": { - "locked": { - "lastModified": 1728018373, - "narHash": "sha256-NOiTvBbRLIOe5F6RbHaAh6++BNjsb149fGZd1T4+KBg=", - "rev": "bc947f541ae55e999ffdb4013441347d83b00feb", - "revCount": 688563, - "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/NixOS/nixpkgs/0.1.688563%2Brev-bc947f541ae55e999ffdb4013441347d83b00feb/01925b66-3b70-71bd-b277-924a6c208ba7/source.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://flakehub.com/f/NixOS/nixpkgs/0.1.%2A.tar.gz" - } - }, - "root": { - "inputs": { - "nixpkgs": "nixpkgs" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/flake.nix b/flake.nix index 16c46b8..3d320f8 100644 --- a/flake.nix +++ b/flake.nix @@ -1,20 +1,60 @@ { - description = "A Nix-flake-based Elm development environment"; - - inputs.nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.1.*.tar.gz"; - - outputs = { self, nixpkgs }: - let - supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; - forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f { - pkgs = import nixpkgs { inherit system; }; - }); - in - { - devShells = forEachSupportedSystem ({ pkgs }: { - default = pkgs.mkShell { - packages = (with pkgs.elmPackages; [ elm ]) ++ (with pkgs; [ elm2nix yarn-berry ]); + description = "Description for the project"; + + inputs = { + devenv-root = { + url = "file+file:///dev/null"; + flake = false; + }; + nixpkgs.url = "github:cachix/devenv-nixpkgs/rolling"; + flake-parts.url = "github:hercules-ci/flake-parts"; + flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs"; + devenv.url = "github:cachix/devenv"; + nix2container.url = "github:nlewo/nix2container"; + nix2container.inputs.nixpkgs.follows = "nixpkgs"; + mk-shell-bin.url = "github:rrbutani/nix-mk-shell-bin"; + }; + + nixConfig = { + extra-trusted-public-keys = "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="; + extra-substituters = "https://devenv.cachix.org"; + }; + + outputs = inputs@{ flake-parts, devenv-root, ... }: + flake-parts.lib.mkFlake { inherit inputs; } { + imports = [ + inputs.devenv.flakeModule + ]; + systems = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; + + perSystem = { config, self', inputs', pkgs, system, ... }: { + # Per-system attributes can be defined here. The self' and inputs' + # module parameters provide easy access to attributes of the same + # system. + + # Equivalent to inputs'.nixpkgs.legacyPackages.hello; + packages.default = pkgs.hello; + + devenv.shells.default = { + name = "devden-website"; + + imports = [ + ]; + + # https://devenv.sh/reference/options/ + packages = [ config.packages.default ]; + + languages.elm.enable = true; + languages.elm.lsp.enable = true; + }; - }); + + }; + flake = { + # The usual flake attributes can be defined here, including system- + # agnostic ones like nixosModule and system-enumerating ones, although + # those are more easily expressed in perSystem. + + }; }; } diff --git a/main.css b/main.css deleted file mode 100644 index 135056d..0000000 --- a/main.css +++ /dev/null @@ -1,6 +0,0 @@ -@tailwind base; - -@tailwind components; - -@tailwind utilities; - diff --git a/nginx.conf b/nginx.conf deleted file mode 100644 index 89bea37..0000000 --- a/nginx.conf +++ /dev/null @@ -1,31 +0,0 @@ -server -{ - listen 80; - - location /discord - { - return 302 https://discord.gg/MXSDuqrdmc; - } - - location /static - { - root /nginx-shared; - autoindex on; - sendfile on; - sendfile_max_chunk 1m; - tcp_nodelay on; - keepalive_timeout 65; - } - - location /learning-resources/ - { - proxy_pass https://learningresources.developerden.org/; - } - - location / - { - root /usr/share/nginx/html; - index index.html; - try_files $uri $uri/ /index.html; - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 61c8078..0000000 --- a/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "license": "MIT", - "devDependencies": { - "autoprefixer": "^10.3.6", - "postcss": "^8.3.8", - "postcss-cli": "^9.0.1", - "postcss-elm-tailwind": "^0.11.0", - "tailwindcss": "^2.2.16" - }, - "scripts": { - "copy-resources": "cp -r static/. dist/;", - "build-elm": "elm make src/Main.elm --output=dist/elm.js", - "build-elm-prod": "elm make src/Main.elm --output=dist/elm.js --optimize", - "build-tw": "postcss main.css -o dist/main.css", - "build": "yarn build-tw && yarn build-elm && yarn copy-resources", - "build-prod": "yarn build-tw && yarn build-elm-prod && NODE_ENV=production yarn build-tw && yarn copy-resources", - "check-format": "elm-format src/**/*.elm --validate", - "watch-elm": "watch 'yarn build-elm' src" - }, - "dependencies": { - "postcss-loader": "^6.1.1", - "serve": "^12.0.1", - "watch": "^1.0.2", - "yarn": "^1.22.15" - } -} diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 35718dd..0000000 --- a/postcss.config.js +++ /dev/null @@ -1,15 +0,0 @@ -const postcssElmTailwind = require("postcss-elm-tailwind")({ - tailwindConfig: "./tailwind.config.js", // tell us where your tailwind.config.js lives - // only the tailwindConfig key is required, the rest are optional: - elmFile: "src/Tailwind.elm", // change where the generated Elm module is saved - elmModuleName: "Tailwind", // this must match the file name or Elm will complain - nameStyle: "snake", // "snake" for snake case, "camel" for camel case - splitByScreens: true // generate an Elm module for each screen -}) - -module.exports = { - plugins: [ - require("tailwindcss"), - ...(process.env.NODE_ENV === "production" ? [] : [postcssElmTailwind]), - ] -}; \ No newline at end of file diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..a113e35 --- /dev/null +++ b/public/index.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/Main.elm b/src/Main.elm deleted file mode 100644 index 57d38a8..0000000 --- a/src/Main.elm +++ /dev/null @@ -1,114 +0,0 @@ -module Main exposing (main) - -import Browser exposing (Document) -import Browser.Navigation as Nav -import Html exposing (Html) -import Page exposing (view) -import Route exposing (Route(..)) -import Url exposing (Url) -import Views.Home as Home -import Views.Rules as Rules -import Views.ServicesRules as ServicesRules - - -main : Program () Model Msg -main = - Browser.application - { init = init - , view = view - , update = update - , subscriptions = subscriptions - , onUrlChange = ChangedUrl - , onUrlRequest = ClickedLink - } - - -init : () -> Url -> Nav.Key -> ( Model, Cmd Msg ) -init _ url key = - ( { route = Route.fromUrl url - , key = key - } - , Cmd.none - ) - - -type alias Model = - { route : Route - , key : Nav.Key - } - - -type Msg - = ChangedUrl Url - | ClickedLink Browser.UrlRequest - | NewPage - - -update : Msg -> Model -> ( Model, Cmd Msg ) -update msg model = - case msg of - ChangedUrl url -> - let - route = - Route.maybeFromUrl url - in - case route of - Nothing -> - ( { route = Route.Home, key = model.key }, Cmd.none ) - - Just Discord -> - ( model, Nav.load (Route.routeToString Route.Discord) ) - - Just other -> - ( { route = other, key = model.key }, Cmd.none ) - - ClickedLink request -> - case request of - Browser.Internal url -> - ( model - , Nav.pushUrl model.key (Url.toString url) - ) - - Browser.External href -> - ( model - , Nav.load href - ) - - _ -> - ( model - , Cmd.none - ) - - - --- SUBSCRIPTIONS - - -subscriptions : Model -> Sub Msg -subscriptions _ = - Sub.none - - - --- VIEW - - -view : Model -> Document Msg -view model = - let - page = - case model.route of - Home -> - Page.view Page.Home (Home.view { key = model.key }) - - Rules -> - Page.view Page.Rules (Rules.view { key = model.key }) - - ServicesRules -> - Page.view Page.ServicesRules (ServicesRules.view { key = model.key }) - - Discord -> - -- default to home, this should never happen - Page.view Page.Home (Home.view { key = model.key }) - in - { title = page.title, body = List.map (Html.map (\_ -> NewPage)) page.body } diff --git a/src/Page.elm b/src/Page.elm deleted file mode 100644 index 99b837b..0000000 --- a/src/Page.elm +++ /dev/null @@ -1,68 +0,0 @@ -module Page exposing (Page(..), view) - -import Browser exposing (Document) -import Html exposing (Attribute, Html, a, div, nav, text) -import Route exposing (Route) -import Tailwind as Tw - - -type Page - = Home - | Rules - | ServicesRules - - -view : Page -> { title : String, content : Html msg } -> Document msg -view page { title, content } = - { title = title ++ " - Developer Den" - , body = [ background [ navbar page, content ] ] - } - - -background : List (Html msg) -> Html msg -background = - div [ Tw.bg_gradient_to_r, Tw.from_blue_700, Tw.to_pink_700, Tw.min_h_screen, Tw.h_full, Tw.bg_fixed, Tw.flex, Tw.flex_col ] - - -navbar : Page -> Html msg -navbar page = - nav [ Tw.font_titillium, Tw.absolute, Tw.left_5, Tw.top_5, Tw.bg_gray_200, Tw.space_x_5, Tw.p_3, Tw.rounded_2xl, Tw.shadow_md, Tw.px_5 ] - [ navbarLink page Route.Home "home" - , navbarLink page Route.Rules "rules" - , navbarLink page Route.ServicesRules "services rules" - ] - - -navbarLink : Page -> Route -> String -> Html msg -navbarLink page route name = - if isActive page route then - a (Route.href route :: selected) [ text name ] - - else - a (Route.href route :: deselected) [ text name ] - - -selected : List (Attribute msg) -selected = - [ Tw.font_bold, Tw.rounded_2xl, Tw.px_3, Tw.py_1, Tw.bg_gradient_to_r, Tw.from_blue_700, Tw.to_pink_700, Tw.text_gray_50 ] - - -deselected : List (Attribute msg) -deselected = - [ Tw.hover__bg_gray_300, Tw.rounded_2xl, Tw.px_3, Tw.py_1, Tw.ease_in_out, Tw.duration_300 ] - - -isActive : Page -> Route -> Bool -isActive page route = - case ( page, route ) of - ( Home, Route.Home ) -> - True - - ( Rules, Route.Rules ) -> - True - - ( ServicesRules, Route.ServicesRules ) -> - True - - _ -> - False diff --git a/src/Pages/Home_.elm b/src/Pages/Home_.elm new file mode 100644 index 0000000..7bf9761 --- /dev/null +++ b/src/Pages/Home_.elm @@ -0,0 +1,11 @@ +module Pages.Home_ exposing (view) + +import Html +import View exposing (View) + + +view : View msg +view = + { title = "Homepage" + , body = [ Html.text "Hello, world!" ] + } diff --git a/src/Redirects.elm b/src/Redirects.elm deleted file mode 100644 index c0c8dbb..0000000 --- a/src/Redirects.elm +++ /dev/null @@ -1,19 +0,0 @@ -module Redirects exposing (..) - --- There has to be a better way of doing this... - - -discordURL = - "https://developerden.org/discord" - - -githubURL = - "https://github.com/TheDeveloperDen" - - -paidServicesURL = - "https://discord.com/channels/821743100203368458/1024625154107654234" - - -freeServicesURL = - "https://discord.com/channels/821743100203368458/1037763084485406760" diff --git a/src/Route.elm b/src/Route.elm deleted file mode 100644 index 8fa217e..0000000 --- a/src/Route.elm +++ /dev/null @@ -1,64 +0,0 @@ -module Route exposing (Route(..), fromUrl, href, maybeFromUrl, routeToString) - -import Html exposing (Attribute) -import Html.Attributes as Attr -import Url exposing (Url) -import Url.Parser as Parser exposing ((), Parser, oneOf) - - -type Route - = Home - | Rules - | ServicesRules - | Discord - - -parser : Parser (Route -> a) a -parser = - oneOf - [ Parser.map Home Parser.top - , Parser.map Rules (Parser.s "rules") - , Parser.map ServicesRules (Parser.s "services-rules") - , Parser.map Discord (Parser.s "discord") - ] - - -href : Route -> Attribute msg -href target = - Attr.href (routeToString target) - - -maybeFromUrl : Url -> Maybe Route -maybeFromUrl url = - Parser.parse parser url - - -fromUrl : Url -> Route -fromUrl url = - case Parser.parse parser url of - Just route -> - route - - Nothing -> - Home - - -routeToString : Route -> String -routeToString route = - "/" ++ String.join "/" (routeToPieces route) - - -routeToPieces : Route -> List String -routeToPieces route = - case route of - Home -> - [] - - Rules -> - [ "rules" ] - - ServicesRules -> - [ "services-rules" ] - - Discord -> - [ "discord" ] diff --git a/src/Views/Blank.elm b/src/Views/Blank.elm deleted file mode 100644 index 9478efa..0000000 --- a/src/Views/Blank.elm +++ /dev/null @@ -1,10 +0,0 @@ -module Views.Blank exposing (..) - -import Html exposing (Html) - - -view : { title : String, content : Html msg } -view = - { title = "" - , content = Html.text "" - } diff --git a/src/Views/Home.elm b/src/Views/Home.elm deleted file mode 100644 index 31b8dc6..0000000 --- a/src/Views/Home.elm +++ /dev/null @@ -1,59 +0,0 @@ -module Views.Home exposing (Model, Msg, view) - -import Browser.Navigation as Nav -import Html exposing (Attribute, Html, a, button, div, fieldset, h1, h2, i, legend, p, text) -import Html.Attributes exposing (class, href) -import Redirects exposing (discordURL, githubURL) -import Tailwind as Tw - - -type alias Model = - { key : Nav.Key - } - - -type alias Msg = - () - - -view : Model -> { title : String, content : Html Msg } -view _ = - { title = "Home" - , content = - div [ Tw.flex, Tw.flex_col, Tw.my_auto, Tw.h_auto, Tw.items_center, Tw.justify_center, Tw.text_white ] - [ h1 [ Tw.text_center, Tw.text_9xl, class "horta" ] [ text "Developer Den" ] - , h2 [ Tw.text_center, Tw.font_titillium, Tw.text_2xl, Tw.py_4 ] [ text "A closely-knit community anchored in a common passion for programming." ] - , div [ Tw.py_7 ] - [ a [ href discordURL, Tw.bg_indigo_500, Tw.text_2xl, Tw.p_5, Tw.rounded_2xl, Tw.shadow_md, Tw.hover__bg_indigo_600, Tw.ease_in_out, Tw.duration_300 ] - [ button [ Tw.font_titillium, Tw.font_bold ] - [ i [ Tw.px_1, Tw.pr_3, class "fab fa-discord" ] [] - , text "Interested? Join our Discord!" - ] - ] - ] - , div [ Tw.inline_flex, Tw.flex_row, Tw.ml_5, Tw.mt_5 ] - [ projectOf [] "web frontend" "the frontend website that you're viewing now that is written in elm and tailwind css" "https://github.com/TheDeveloperDen/devden-web-frontend" - , projectOf [] "discord bot" "the discord bot that manages many aspects of our discord server (ex. xp, leaderboards)" "https://github.com/TheDeveloperDen/DevDenBot" - , projectOf [] "learning resources" "a repository containing crowd-sourced information on how to learn different languages" "https://github.com/TheDeveloperDen/LearningResources" - ] - , div [ Tw.absolute, Tw.bottom_5, Tw.right_5, Tw.flex, Tw.flex_row, Tw.space_x_1, Tw.rounded_xl, Tw.py_2, Tw.px_2, Tw.bg_gray_200, Tw.shadow_md ] - [ a [ href discordURL ] [ button (class "hover:bg-indigo-500 hover:text-white" :: buttonStyles) [ i [ Tw.px_1, class "fab fa-discord" ] [] ] ] - , a [ href githubURL ] [ button (class "hover:bg-gray-900 hover:text-white" :: buttonStyles) [ i [ Tw.px_1, class "fab fa-github" ] [] ] ] - ] - ] - } - - -projectOf : List (Attribute Msg) -> String -> String -> String -> Html Msg -projectOf attr name desc url = - div attr - [ fieldset [ Tw.p_3, Tw.border_gray_300, Tw.border_2, Tw.border_opacity_50, Tw.m_5, Tw.rounded_2xl, Tw.shadow_md, Tw.w_auto ] - [ legend [ Tw.px_1_dot_5, Tw.py_0, Tw.hover__bg_gray_200, Tw.rounded_2xl, Tw.duration_300, Tw.ease_in_out ] - [ a [ href url, Tw.font_poppins, Tw.font_bold, Tw.hover__text_black, Tw.p_0_dot_5, Tw.duration_300, Tw.ease_in_out ] [ text name ] ] - , p [ Tw.font_titillium, Tw.break_words ] [ text desc ] - ] - ] - - -buttonStyles = - [ Tw.font_titillium, Tw.rounded_full, Tw.text_black, Tw.font_semibold, Tw.py_2, Tw.px_2, Tw.transform, Tw.transition, Tw.duration_300, Tw.ease_in_out ] diff --git a/src/Views/Rules.elm b/src/Views/Rules.elm deleted file mode 100644 index cd91ce6..0000000 --- a/src/Views/Rules.elm +++ /dev/null @@ -1,68 +0,0 @@ -module Views.Rules exposing (Model, Msg, view) - -import Browser.Navigation as Nav -import Html exposing (Html, a, div, h1, h2, h3, h4, text) -import Html.Attributes exposing (class, href) -import Redirects exposing (freeServicesURL, paidServicesURL) -import Route -import Tailwind as Tw - - -type alias Model = - { key : Nav.Key - } - - -type alias Msg = - () - - -view : Model -> { title : String, content : Html Msg } -view _ = - { title = "Rules" - , content = - div [ Tw.bg_opacity_80, Tw.bg_gray_700, Tw.w_full, Tw.flex_1, Tw.text_white, Tw.flex, Tw.flex_col ] - [ div [ Tw.ml_16, Tw.mr_16, Tw.mb_20 ] - [ h1 [ Tw.text_6xl, class "montserrat", Tw.mt_2, Tw.py_2, Tw.text_center ] [ text "Server Rules" ] - , h2 [ Tw.text_2xl, Tw.py_2, Tw.font_titillium, Tw.text_center ] [ text "You are welcome in our community as long as you follow the rules." ] - , ruleHeader "1. Be nice" - , ruleLine [ text "a. Don't be rude or disrespectful to anyone in the server." ] - , ruleLine [ text "b. Criticism should be constructive. Nitpicking, flaming a certain programming language, etc doesn't help anyone." ] - , ruleHeader "2. Help us to help you" - , ruleLine [ text "a. Just ask your question, ", inlineLink "don't ask to ask, just ask" "https://dontasktoask.com", text "." ] - , ruleLine [ text "b. Give as much information as possible when asking for help." ] - , ruleLine [ text "c. Don't DM or ping random people / staff for help, just ask your question and be patient." ] - , ruleLine [ text "d. If you need to send large blocks of code, please use a ", inlineLink "paste service" "http://paste.developerden.net/", text "." ] - , ruleHeader "3. Don't be evil" - , ruleLine [ text "a. NSFW content is not allowed. Swearing is fine, but keep it PG13." ] - , ruleLine [ text "b. Follow Discord's Terms of Service." ] - , ruleLine [ text "c. Don't spam, self-promote or send harmful links or programs in public channels or DMs." ] - , ruleLine [ text "d. Asking for help with illegal or malicious programs is strictly forbidden." ] - , ruleLine [ text "e. Other unethical questions such as asking people to do your schoolwork are not allowed." ] - , ruleHeader "4. Stay on topic & use the right channels" - , ruleLine [ text "a. If on-topic conversations are being interrupted by off-topic ones, move to a more relevant channel or make a thread." ] - , ruleLine [ text "b. Mental health talk (suicidal thoughts, anxiety, depression, etc) is not allowed. None of us are qualified to help you, please seek professional help if you need it." ] - , ruleLine [ text "c. Keep conversations about political topics to a minimum. If it gets heated, or there is any discussion in bad faith, staff will step in." ] - , ruleLine [ text "d. Keep shitposts to ", inlineLink "#🌞-random" "https://discord.com/channels/821743100203368458/932661343520194640", text " as much as possible." ] - , ruleLine [ text "e. You can share things you've made in ", inlineLink "#💫-showcase" "https://discord.com/channels/821743100203368458/847936633964724254", text " (read the pinned message before posting)." ] - , ruleHeader "5. Other stuff" - , ruleLine [ text "a. Hiring freelancers & offering services must be done in ", inlineLink "#💰-paid-services" paidServicesURL, text " and ", inlineLink "🆓-free-services" freeServicesURL, text ". Before posting, make sure you've read the ", inlineLink "rules" (Route.routeToString Route.ServicesRules), text " for those channels." ] - , ruleLine [ text "b. Don't minimod." ] - , ruleLine [ text "c. Don't try and find loopholes in rules." ] - , ruleLine [ text "d. Staff reserve the right to punish anyone even if they haven't explicitly broken any rules." ] - ] - ] - } - - -ruleHeader body = - h3 [ class "montserrat", Tw.text_2xl, Tw.py_2, Tw.mt_2 ] [ text body ] - - -ruleLine text = - h4 [ Tw.pl_8, Tw.font_titillium, Tw.text_lg ] text - - -inlineLink : String -> String -> Html Msg -inlineLink val link = - a [ Tw.text_indigo_300, Tw.underline, Tw.hover__text_blue_500, Tw.duration_300, Tw.ease_in_out, href link ] [ text val ] diff --git a/src/Views/ServicesRules.elm b/src/Views/ServicesRules.elm deleted file mode 100644 index e964585..0000000 --- a/src/Views/ServicesRules.elm +++ /dev/null @@ -1,86 +0,0 @@ -module Views.ServicesRules exposing (Model, Msg, view) - -import Browser.Navigation as Nav -import Html exposing (Html, a, b, div, h1, h2, h3, i, li, p, text, ul) -import Html.Attributes exposing (class, href) -import Redirects exposing (freeServicesURL, paidServicesURL) -import Tailwind as Tw - - -type alias Model = - { key : Nav.Key - } - - -type alias Msg = - () - - -view : Model -> { title : String, content : Html Msg } -view _ = - { title = "Services Rules" - , content = - div [ Tw.bg_opacity_80, Tw.bg_gray_700, Tw.w_full, Tw.flex_1, Tw.text_white, Tw.flex, Tw.flex_col ] - [ div [ Tw.ml_16, Tw.mr_16, Tw.mb_20 ] - [ h1 [ Tw.text_6xl, class "montserrat", Tw.mt_2, Tw.py_2, Tw.text_center ] [ text "Services Rules" ] - , h2 [ Tw.text_2xl, Tw.py_2, Tw.font_titillium, Tw.text_center ] [ text "Rules for posting in ", inlineLink "#💰-paid-services" paidServicesURL, text " and ", inlineLink "🆓-free-services" freeServicesURL ] - , ruleHeader "Global Rules" - , rulesList - [ i [] [ text "In all rules, the term 'host' refers to someone offering their services and the term 'client' refers to anyone seeking the services of a host." ] - , text "Only active members (Tier 3+) may create posts in these channels to reduce spam and abuse." - , text "All service offers (free and paid) may only be posted by individuals representing themselves. Organizations such as service teams are not allowed to offer services, but may respond to requests privately." - , text "Posts should be appropriately tagged to describe the service(s)." - , text "Posts should include a title concisely describing the host (if applicable) and/or the service(s)." - , text "Only 1 post per service may be made per month." - , text "Anyone may respond to a post (there are no activity requirements). This should be done in Direct Messages (or any other contact method described in the post), not as replies to a thread." - , text "Hosts have no obligation to accept work offered by a client, and vice versa." - , text "It is the host's responsibility to ensure that their clients are trustworthy." - , text "Similarly, it is the client's responsibility to ensure the host is the right choice for their needs." - , text "The Developer Den has no obligation to investigate or take action in the case of scams or disputes. We will attempt to do so if possible, but no action is guaranteed." - , text "To request an investigation please send a message to @Developer Den#4726 in the Discord Server" - ] - , ruleHeader "Paid Services" - , rulesList - [ i [] [ text "These rules only apply to ", inlineLink "#💰-paid-services" paidServicesURL, text "." ] - , div [] - [ text "This channel is for offering or requesting " - , b [] [ text "paid" ] - , text " services." - ] - , text "Posts must include a price / maximum budget, which should be in $USD. Hosts may choose to offer quote-by-quote prices available after conferring with the client." - , text "Budgets / payments must be a concrete amount, not something like \"10% of profits\"." - , text "The Developer Den's only role is as a platform for finding clients / hosts. We do not act as a middleman for any funds except in exceptional circumstances." - ] - , ruleHeader "Free Services" - , rulesList - [ i [] [ text "These rules only apply to ", inlineLink "🆓-free-services" freeServicesURL, text "." ] - , div [] - [ text "This channel is only for " - , b [] [ text "offering" ] - , text " free services. To reduce spam, free requests are not allowed" - ] - , text "Hosts or clients from this channel must not request any money for work. Optional donations are permitted, but they must be optional." - , text "As work in this channel is free, scams are far less likely. However, to request an investigation please DM @ModMail#5460 in the Discord Server" - ] - ] - ] - } - - -ruleHeader body = - h3 [ class "montserrat", Tw.text_2xl, Tw.py_2, Tw.mt_2 ] [ text body ] - - -rulesList : List (Html Msg) -> Html Msg -rulesList rules = - ul [ Tw.space_y_1, Tw.list_disc ] (List.map (ruleLine << List.singleton) rules) - - -ruleLine : List (Html Msg) -> Html Msg -ruleLine text = - li [ Tw.ml_8 ] [ p [ Tw.font_titillium, Tw.text_lg ] text ] - - -inlineLink : String -> String -> Html Msg -inlineLink val link = - a [ Tw.text_indigo_300, Tw.underline, Tw.hover__text_blue_500, Tw.duration_300, Tw.ease_in_out, href link ] [ text val ] diff --git a/static/custom.css b/static/custom.css deleted file mode 100644 index 605a4b8..0000000 --- a/static/custom.css +++ /dev/null @@ -1,19 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@700&display=swap'); - -@font-face { - font-family: Horta; - src: url(fonts/horta.otf); -} - -@font-face { - font-family: "JetBrains Mono"; - src: url(fonts/JetBrainsMono-Regular.woff2); -} - -.horta { - font-family: 'Horta', sans-serif; -} - -.montserrat { - font-family: 'Montserrat', sans-serif; -} \ No newline at end of file diff --git a/static/devden_text_only.png b/static/devden_text_only.png deleted file mode 100644 index 782ce7dcfb80410128f6cf0b7f00971345d3b58a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33327 zcmeFZcUV)+_9(m)dJzy5l&*-Vbm?701*IuS@4XXxLJuM$q97u@>5G6!7wIHK5fSOV zlhAu_2?Y2y`kwck-~H|%-}Bu+@5!Uvnb|XI)~q&b)~s#RLoL-a)U4D10Gzq6c1H&Q zD3Aa^DosfOwqVbQdV>FuIw)%@13+0U4bh4WtV6tYRBr>t9qfx>dF7$TdCnv#Yb#*oP1b=^q z%*@REsrvi-g9Q+5L`1}&mcRb`>rVlEE-WmxwY7nTqobprKYxN__xAQiM@Rnv`O^&? z`=_wIy}h-y)z#JY?b|ndd;33)b8~ZEUS5C7|2#qBgJm=t4L)DJdi78H9}2j-x_
    $F6&1lo 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 diff --git a/static/devden_text_only_wide.png b/static/devden_text_only_wide.png deleted file mode 100644 index 391a280f1a569d0a61fa33cb8def55a18f4c340b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31957 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%0AK&WH-U4~b&Q=Pqk(!!X4e>=-#+&dT_ie$w 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 RmrnFET57uZ!n4+Y|1TqSlaT-b diff --git a/static/favicon-16x16.png b/static/favicon-16x16.png deleted file mode 100644 index 0e855ae02a0d96fbfbaca6fed12ce414a8fe15a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 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 ONP3X1*mj`UJMbTvL7PJW diff --git a/static/fonts/JetBrainsMono-Regular.woff2 b/static/fonts/JetBrainsMono-Regular.woff2 deleted file mode 100644 index 8c862e334da78ca6f92bf0f1939cce3a60b8c859..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69440 zcmV)PK()VjPew8T0RR910S`a`5dZ)H100wD0S?*#0zLEq00000000000000000000 z0000QgKQhQbR2=V76xDd^n3_`C<&Yl5eN#0?|6poTLCr#Bm=5E3zZ-M1Rw>8W(V?G z41rc#w9k^LHEx@JmGtg_L$@J-^=4|-^uLEIkq+5?+A*;xHjmc1h(Mlw{Thqi?h^ss z1_-E9(fZR%_W%F?|NsBC$hvKZU;tKmABMDyu!gCfP;eusDhMs zC;{MEbua>GG`~fqiOd07J38hFp;uD2ll8u>HT%`aI^AdP8;!*t^kgqWt_bXI0lKl& zQ}?A+RPr&4fVe;eM1@?7FJ{uAZ<@&6-TlSBBQvhblr58;%mphNPfe^B)}^ig0Xew{ zh$BQGfTpg6XONAsuT3i)gPV=j13gUy3h%DcZB=O^h);Z&_8a}4MVI#i8q6QLl07_? zr*OaiK1lgDdx0AV2M5>>oJ_9Dxi8hm)n4Kd@J^$I60ct`k+hsgK!d!^lBx#s5*UNa1BPg)Ws4&!u6W`L z&lA7jI_JI__=MFgw)jb46XM;*fWFco_HoxesY(3TumSC@Wn| zOY;Y{PiY4KGktjx>xpN@ORRgf&Jzhi#ChT*1aa2AIh)#?bDk#;5#vOHb55KKA`)^g zlSdE<@3P>m%~`RMdDdC$ToxpABB={D3&A;;A0ZP7ImtwVlT17c*m++iDMmVxjn)AF z1OtCw&;R?NqzqI>Xd0=_DIY$pQN#SVp{B;v?tsWrVf^ zFEDgxIFn?ufaFL4Dy9OkLRr_UJ+*+YXLXM+)YpDFz1#1Og;8e{mM-PlxUWN0K8jFN zt9fkClVl&nNwf_#4bbE7{-z483Q=t~G-gAvsdw)eGy~@ZgNN8n79FoF`|bO+UAnxb z!ZNgrXyuhaCX-#Ki{_sa`BzNxL+n6qb>;OGpk*0hym|d^>5_WP@0ilb5HTV~glQmT zsBjU65P7GqC#f4(Wrm7fs&W;-RMfA3qB76^LW~KlaL7wUa%A1=3HmsSZ`o-RTr65!>2ro($B+mQ)|LOeNC*NB^LWnFGjGwXd z3(+hOevLaCYZ}7@Eqw_=zbVRJHWRW}b@zzB?+MA5ssFEz07-zs*uJH`R{cv_8?)NO znlbsy_NLrV=TG;yQS9v%Voquk_5-nNgxb7L`x1OTF87>I= zMJeapFlU&xO-~MQj)gG%{{b7hOSqBHbV>pHSwCBRUuv0dXbN_QVT_e8Dydy`FEhE!6Rv;M@8n`CpxR#i>?7B}j4#kkhB910r7m zr~D&wVJuI0#7+q}AWtQ!tOC0PTW3QBYs*BH-8mjnPm$c9P$sOs{uUq*kHr|M()--3 zFxRwD-;Zs$J=8ky4<(aL5+O%P;-NW$jP1aP)WLb7^w&4B4;Pdq1U^|pFfiF>)si4q zlN0+c;!i1@>7NOZilx}@9$0gR0V3+g{ZVTNrdjh=7Bv$nW(jJ4 zU#3>q|1$xwKyq3IvJI$lWJj=vl*Ulwt_y$=r+chDuCvFV@BgfynLo2Cs}cp40Z5=g z14Bwc0i<9^suYi zj&t0@agTf7JsNwy?ESj_>LMs;KLd~T# zwblXu->*z*xAczJ{fa>Hh!C*0*Qt?@em28w=Z+$4FtCFv9?r3fqdW z1cn9v-Kc8b4{heSYDGi}Hyhm0e%tqb=2XExl1yGQNYjXj6jDebg^@;jhhe$d&*UpS zbp>x;H#Mh!C}Tv#idgvniOT!W6{sujdL2uMU`#OLVT2Gy1Y_L%(a`<1m;Y`;Li~U& zqE#y>DAYIeU+m`WXOL_Ee=yeR)>%~}&iBHBYQ9Og&;kJ177U9+Fd2fW5+GP#1q6Fp2Ejh+AUM)X2;MXV z!8gW%;5RZsq=d9UNJlmZIS7J~uN@#%VK)dZvloOa?GHk$sS85&tPesPX$nFuv;?6& z>xMqIk3o2_4F-`uNeLoDk{LuMB|nHvOKl*sEcJlMDyxFX8ta3| z4Q>n~hYCSODN|es$|0*EKnQ?lfT0jHk&{k2?Mx|CoLrP~8J~%n1cr(n@@F8kaskS1 z%bbs(5!O-$`z{d@14?-tN(w-g6QB*jd>|`+0`Zw-wZMj$sRd1Q2Q}M1IYz1L(+4-T z*pObFeG+$EcS=90{g2d)yZB?B2B7@ODj@JNP+vgP`8ROi543TGNi@xv#2$3WniXrK zwgff_c%p`I3}C(Gn5k3<|3#bh0gNaY3zuD#OcVuzpbTRUlMiu~jWo<=k(iwegC z^#w64ABuj#s1$4}Y4tl~4PtH7mO{h;V@oxlM@UdNhy*IZJ+ zt@(8}V#E87^meHej!Ei4hs5L^Evq5I989Y*ph~1wG24rP!JzS)=FYNpr0$kZxXoTu zu3)hZz$3;4I^bDc6+4%-jl7Ypta$zyAQ#Y5{!J*hA|HYciBDmYU!$>*r9p(OS+P#) z^dN^3Zi03SQ{_km{BfON;1dvx9(zT5hpI5v6?FiGeWmErS`ctd9ln6A`H=gCy;8Vn z;Q8hCLl$Qeh4WZmAz0OnMs(F!K4fhi zk^9>8l!%6#+3S)ri5*jiFPN~>Q1lCXrEt-}bLHfKIvMemlh9R@tYVddB zuACeJ(}xFxtN22<^v$44`tuC{1gy%==D<ZdeE*#eF*1|ozl0aJ)j6~l12@(}%`3UB@;<$V3TuIO2zcH}& zS5oYh@|QR&H<&Ws@wo4v_b&$TQS9T7GN@@tP%mbW8)VX1*z!VwP$fTW4OXhpo;1o(Qz#yD{szE)UW*kA zowePiJ2oC7CT%IIPyULb-*F!jPYGf_lUiHJFkTqDPw+nd#tkLQWIW5yFtcUjTWYet zk&o9)c$uc&!Wd6f;X%cNvRBxlE>a9Yg&GQaGMttQmAav*!uM0gs>#spip+XLk5|`Q zgkUw6)cQo*%ErrZAT4z*BNdbNl9Y@w4UlMr%Hn8eYBU(_%O!9D`2Wx%4(SmBS*LR>_waTH-EXX{tifM%t_@5rX+*ig)n-_ z1C&yQT&S!}?F{B(sxCx8&b2k-4dw#QsX@~xnGNUp3{Z`_t;DR0^Z4{E==6t}M$Hze z0Pm$zfiE8xWF5}3bb^*SclgPcJiSz0MjKh46lH^F1jr0KW|8@{(K9H>U6z(O6Z2$@ zG1ntN)mgGkqY58hzqpM1F?J}IPF(9Onco1a+sBpw3>|7y$TKI_Bh_S+Wgg9?d9e8$ zX$`CK)#INPo07#;u&;u?Kr`9TW(^WmBntncuzjS+TO9!Bi(5(F-qV6M|A;EQ4m3a0 zVCha9fi*Nk^IwNb{s`$m1%S4Iv6r`P(d+XxB$A z(~V~D#r20iYWCD6-^+tIE#cGTe8TI}sYD7$E_9hHbvA0T-8Fk1azdNVKlP5#b;n(g zTe8bX4em3GFGlfm#;J+U1SF4GfO^!7&zcjf$Zzsj<*Do|F{?FLb7g0-Us?HRv1n_S zJLC?zL++8=aclbAoo$Rnhmx3vSoTB*+GW12MZ7})2tY{c$ebea%<>05r5|^GIw-xW zu|&d0mlaeC738ZyN9aU_>Ib26n4BZm$p_>ca+maDDoRtTpP*RDxSD9)=f>7Iw$|8& z#x^##sj@`ar%Qe=L74 z&&YS=doTW{&5P*;=<)8A1)1pYf7@UHqmbB0{IQQK@FIYJu#`Rl_N=A>n*VEAgBBgS z^vz|6%ZvppJa!y7bLGjKpM^q%ixMNwVoM}SkwGL!9HIu+hEjY zTWz<~7=WlbK!ujt>nebB(9dbnCYGz@wQ{vwBiG4mE#N6JVRWl_9lFXlgbodC|rf;kbo?NG7AodhIZM3!P2D&r|WrN4(} zHXHeySS=^da*72@xnKcao>%j;LRHv`VW7I&OLDoQM}w7vK9#Xlq1B*H)Wq6%My^B6 zG;@|&-`kq2y2`i)V&4?wrt!x3^=NjqZ8XTJ*#}uBXRP^;&Ch>cX3S5Dxni+scBGvN*uKuhWo=kr`PRl&WUZQIZD055#1-z!J%WL&{;F$=bfq`8 zA#9)@tl4AQdI%S)mBFH4p8bI#_THlO-UhI#Ps_U;IN^w#fr zsqdz}vq&H1JI!};r{vZu(?v~^$2R44TZP{Bry%5S`P zFMjo#!;U!WnBz|P!~gy1FDIRL#@WIYL6HBiJUn0-93JS?Q+H-!_GLML|N*TE?ZIG3dUq7ay)$F4ZR~iyjbyc!F7yd&+nm9$Sf<=m! zu2R26^CgSgI`Lzb_%e69iNLD=`T6w%3p+2Lu!5?ZW}?(-GiJ)1C1<`u)oV6r`@EVz zqZE{E9HQz;Ql&|kK0{E}Y}s??FHpF6*@~5`)v8^$N%K~1o>%itMNJRl%u%9Loq7$u z`N*0^jhnW1S`JwwNcbcBi=37&d9iZkE7W*i%?^0@1cXGyB&1~I5FS;0{DNxKYtX7) zr!K3}?C!$lUjAVYpCxN{vI^p2)6omkTrvxYH5e*&d911w-mcEMRH{4CXWB^G+sNqwvnL4Nd{g-YYH1U!n zgZmp`@=%4vbrZBeVFmHIn<~%$tPWlY^!&~TFQ{4{gU=Dc6L}3ipUHyz_ta8ogvMVB zLEt*eOoO*GO&Yx3nd=27!uVu4-k1i@if472?lX8GEUw-)4cQAMw9R6XyQ3P-Ux*kP z`&kn~PstPaMG5GzVbEtX~i1$7-NKt zrg*alkfWr!V;r;udFnQCU>9+fZhZ1P=iVQ;o3JT%C1dq; z+a{~<+6)#eG=jwWHVX% z&mGti*Z~&63um~(9iDKO3cSCz^}B}N@4kt2=c`Gfx@`9X*jYAs3t@X%<>7|#vgC(< z0Cb1<o~}S&mpFkpbq(HB{8LjE z_-sx*RlDSD8IMjHO{KGgoAtksnXM5x->$u(q_rDUd!uUL zpVkm@e{9okVTZA+`@LKVZ^(25oMJxXDAuljn;pvOa{oUq3Dbc!y0>OkIPHw@wP-Je zL{1`)b8I@j=f`}W$7$K$L-Z1(Y`z$hk#;{!A~EaShCw8KuP?^OJ8 z{DnIzKJe=J3ghYeS@^dB@R!WEiz2eh=DxGL*zJVddG?AZAIDtJ^1#Vq)Es3m9Mg{v zZbzisE|DJnX|wW}1AT;j4VG=fW4K!Y+5KcU11z@@)_Om;Ho$i8j9K=_K<8h8a4U9y z(RZG=nIp|m4bnOKH$_n4q*&ecYa5(zFotV8Kj?fO@pjHAdG}KgVYgni0=gf7&U<8b z?R*8S4mu0nP>Jb@M4g!oUyRbbzQ6ZIX(CSN+Ao|^AE2d001zs?+C7%yL}H7)}Kisv%F&OVQb>- zPMNrTQv?%_#^jrX`N@!~DqNac9Rm8v}j z*JpKoaQw|SeE2817CL_7`3In* zxp3@9%f^>GbnlX8ZP8?yOCEDSv5xnCt5T?gfhl(_ti3ccD)}W&dEypjQ;UMZYE6o# zVJ#!MOU2?!y9QNl&SRm ztFy+{6I&R$Msdw#_jkkf9cpqNBZBApKfyI^28k|&SnZssw@_gY{uP9 zGx4*V;aFAzpYTclnrFm4tSiyR5ma5S(7C9O`lG3l8X_v9Tuf!u!7K`SE>_81?TO61 zbzCG@UG*NGHQqvHw#{+O#8qK6Utt8rILRRb15v(DJbAQElOZa=L_wnNO~ z@DAn6xS*(H$ecJgk9>M(%QYValn&3YtH5SM@Fp)qsml0%r>xTav*-!8^=XiFYx;gK zt3rt%`!ovQa1r4nQ3W=%-~%S%OA%|{yH+nT3VF16yyKT>3oJlwd%z82s{Jg8e&YRf zlzg2;gr`NzvBnS$nFslDL?zweZkbHJSwnK+wDbvB( znjaK3?_5=Lsa}TS&@7Bs!fE)bk%-`Anemxr_IGmo)ZtB+McXG7lR|sBUHPDKdP4{{ zSQ*^zhrUvqwFQ(YTd%K^hgMzIleIb=2|Lyg-e!UvpOwvK&+pU@%K55#(H5km_V%suG_|Km@S>r(c|7w z58JM^ztceP@<#Ub(DUd6)DFn)4~G=CcM8Rw`(fCEOLB)y+4BOR>zj*VsaUP{UpjJd z19F>Yt#&`E%=k+)+3_Ac&386HmNzUIT<=V@3riN$#4(BhE+InWKceda$s3>@%{7%yMf-3N+?GpVNZY72vZ+YPqs7SaBditSHG`WijqNHX154rJCR)B=uKX%gNF(%YHUOP=QwCg9PmJs_1-0854f zr%RB!$8NnOKI4ggSqy3}-`%*{t zpmR)vpM*S#QlGK1+>6raU!F@@9A-mOP{Z#VLFyx#^E z88Ho^7%@4`gr;FUfx_gdWg+PtJC%s6P-bEiQJv>Ha~;>*mKkCGk3Pt z+3@)Z51*7qJlZYycZ<|P+6e+y1Y+Tgkiy^ zB?e3S(qFwk14Zdd&X=pvnPTguc6{nU;XrS56;qlkdJv1~n9cld3bScn1gkgCRwso| z$!{e-I$La2a{3+WPw9c_LP&QB#iWqhNijxYh8Hx#F9wPRN$1ibqz;&?>lCI)gD@m# zI0R%#0srwU0lq=fxq2w!B_|#N0^B12*L)ycMPyX+Ooj+J!(J~6JbQ>q@f!#obF8Ct z^HjpN>`9i&{gH#&Pk4c1t$~3QBhU`CC_K#|g2DN70~wS{C+6Q5xi|~ zRbE?N1i-TCi=~~iJ$M5h@KmjaGu0jGwW%*gyYoitkQ$|-h-ixV=%>+$PD1ZI3o-#W2#3TI2;o{ z!qH9&9wJ6zT(R^$Nq;zIR1Y;_#0?`+$FJ_SWP1*3%TFx$7wF&dey2bcgMjb&VC9byPzcw%5*cP1i^`&m-r{_*9P| zb;jh{;Wugq0pRQ4))`O=Y5jMNQS!qXB3f0{#-WOml(jRwjmdy+7;)(7Ag+5s9zAPU zNkw(j1(UpQE~~)7B$^}Fn=P^E_F~IvmA|4q?_9Cx$|@u}WA^D;OtD4|4^5R;x9Vpd zM5F~6^t%`nMwP~MEg+muNJGaPHUPr2$_H_5%)Z~qs!;6F&`kOj6^n@I9r2iHQG~M| z;bRo5bVIM8XObepr?ZAgCFWJjIw+)GR%%k7YN@7!61Ncj1FJ>05 z;v=g&42(;+b^fZ8Lbh;Kiy1^`<_nBNRj1C{;Gd-mH2aFFj@4#LF&UvKVJ#cS0+~5r zoxx(=rCrTYyzo_sMv`>ar!s0`|K!yTtT`*aVw%S82}S#4EFo^(HrQs6bat})PS|7HeJ@s+Sm{SN}Htm)E^}4zpNhZV((mxs)MvwArGdh%p+|qGp8L zNNG<68xe6QJ~MKNnD(U5GLBX1AIhLu*o3T&%2DgJ<^jN~pg|5*6d9N@F$KpObh zom-WF)s-16y1vrXq;R<{ukylrOH@MsjK$uhVoiJLvb=oy@4YmYpWt9`x!G$va_F^b zHGjL^2369kf>>1^S0Hf3f4{gohb$->=zTE_L_yf#(?KSS)w*)h@6RwvNsf ze>FjdbW;4qJ4V*ZW?(r&(Zzt2#2pWIJxHyqI+ghnj!M3ZMOM9R2wBM*C7h#lqddvs z2$_;9EzBZbjL=c?xxb{Fp^Knbx#P)HW$s)*G%&po&4&!fH?Gd&FX892x*>=O+hA_n zwNQX7+=CXB0++ezCO%!oMjF$`7 zyWIoJK&z;`to>6Z_+eLp%tf8VUUJoJ&#Nw5Ln)yfs7bacxiB`Q?z0CvA_`b$5}=<> zr~2=Z;M2kl!0W-tej%PqjY18CcOxTVtb{SY_*X+} z{o2%;=xzkPi4Le&3B{zav$In=9++L|+k7|Zn?cgqJCwR_tk{g;vUM-htq&uhOIe|7 zAEE_48sQ_naF?P3411{aGuO-y&}r=I(8ITR%gfxiX}*Z@p&FHDvC6?1IsP5Ai63qN zUUPw($UEjLFhqo-;YX-ZD@T^Kj*SlpMuK`_BRQ|DLbW!w?|)MGpo<9mIy%ANEZB9E z@KaPVZoQw1`e^aZV(OHYDTw^xZL&nDg~&kDZ5WRUFrof1LA=p6k7az{qj z{2VQGmm_2Kd@nMNal6Q>y$IZwUj+-cyX9%d*16HKlN%9)*UQG1{W0cBk2m&{F&nTn z@vcbp@qz)VhmT>tK(n>$_8?#eQLU>$v(6u|ge|$i%_fLVTH$Ub0+Ddk3)Dc@>@UI+ zJr}y3%Dj?>eYERZ9vsqoH0s&Yjj&F%f#Ab z&9*&LsncAOBkpt65Ktit<*oDUcGL(P~oI*v1oPh0d;^KEFY7O{g^)7RmX7 zV6;Vnvc{s;7D!vf>v5F4qeg^Yitf;nAbB!9&F_#b=aA){@cjMO**)@&2qrs>BnJ1d z2!?E%>N-|Z0j4Y7QJ}rw)x}+ShVl(RRC30l?I4xBKR~a-mzltAwze1umz@V~>{+~k z!AT%HB!gB6d_8e>G5%KI>e(mq_ks3vVFo_R4+t396O=)ZC@3Y2USBe-uj1RKQTpYT zd>_VE�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�I2`;RltI!`q!2)h)sND4Z8MZO78y*3 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%0Ak2+A*ccrf=An7%zd~T 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

    O4?fXCi=q!i(Dsra}5hJ0GIbB(a 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 XOYhdCS;Od?kL_fyp@%=NNg4A$$IqLJ diff --git a/static/index.html b/static/index.html deleted file mode 100644 index a334e31..0000000 --- a/static/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - Developer Den - - - - - - - - - - - - - - - - - - - - diff --git a/static/logo.gif b/static/logo.gif deleted file mode 100644 index dae9b82ab4c42b1a7470120fdd4b2e6f6ed0861f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458643 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

    Fboe=#1S? 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

    0f#Qa`%`BS<+D%!hLv=01zl8@ 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

    vVLFHe%!@-S*aw)YM56)+y3^l+_|&F zgpq1?OlArk7Y;YkxRo11d5FtBEDhiHq4v<|PbxDmSj`w|H0N)=1Th4G%>i(&p}@)%MExkJ{iS|{j?pkcXJJnvu@;rY#YyDT?f7!lm@rxDY|5<%cdc#Of$pNU@hx2{ zyerueuy##{FAzemnrR42-PijKMyMG-?RS=WlYy4+shu09^EjOi6r#PT;=sG*q}%2W%5S#kO|2SJ(dT@EAa`utqI3)A8bQ ztB*1NV|<;Nu9u#F!T|d}NHM0Gg^4So90oRM8MwP8$OA$ir5U|>cHPG>XdC~&$%vNg zx`Q8h8dB%J%3)C7t9AM3QIy=)qf{3pOyQx@H;--WeckM!aYPkxob54L6=JAXuM!C3 z-`N_gA9BP#_rMa^kqAW__>uoEmF!@RpO3c&Fmx_DCAW+Exg5>({FL!#(e&!W+$az6 zh0*81J)uPEssiGg5_w_sXJK>0W%Smlq^`Mo@ys-2sK(K+A8t6EG8IjJmK%_+YdGwR z)f8A;?Q?G~W|uNM8sJkAIe4JW$Vc4T7%S9rAT8;#;Ddeizr32^T+@afj^+n{#*vHQ&VUf^n zQAJ1IGWt_u8;=%c64%aY;67x!>CnLXdKN%8Q^(-30XUi*qA@tB#%Vr{20Cmhl3flT z-4ki1->qyf-AqplBG0=y?+;%=FIEhgFMkPnmMyoyw<3|J<3g(2b;yU!49|c?C6Ajk z`}?bH&!cV6T1KzdZLbRoZ~P>$6M!dfl5#nh_xtBQq)gt&#@ro0H3>V zw5N}Ki6K4&@y_H)zGPC~w>ZAJ#=fT8J_mIk9F)GVG=1MODLn!CvU2-8)AWM?{CJ!d z=_tLAocxapyz01o<)nN?nN*m1`~;l+g-!evaRcas{Ix;;7r*`Vo&7XG%6!}bfVXeN}%lP=JnR!1tcOCu9M?oB_X+0LDpy?m>ZakU)D}1xH+fKLlVf0|4L# z`2@)`fdCOm&7h-gKunKU2qb7I&N(V6_)}1jzf+K%N${h9;7INe8zw*;ZU`?ZIM*aF zZ6{b?GZLfgBs6v=6lH8KRt>L4g!Uu_&CLWBgF@1i!tRVCR%McvBjR=3+8ym0@`w=frcsAy>R-DAFq*P(t*WNf$t$2m&I5*N* zZsvFu>3Cw7cui?Z<-!;YW>f(8k+Dm{cd7*2+<4vkc$?k$-lPQc-UORZ2}Z%Oyuk_X z$qCe^iM1OET-OO-m=isv6TN4{T<{WIrQ-p;i4Mt0zfm%0o+O_7#7LJ%(agz4{)tyT zN!-jaYS-b(vx#24$@3=3!gwh!dod$SQ-Xq1io}vjs8YhU;`6SPQkhe=#8Qi;F>9qU zkCRf%>r#@6A|q z$v`A$UNdLX^=8N^W!B?mqRjybZ$vToG6$~HaY8cjWl#cV(Rat0l)TwO-sw+Wv#8vR+dInfkJDQ_xvMVmMQP@2PWGv~%81WOK1(%YM(m=gp-UdGxU_2SA#Q6@n>j zmdzuR>sp>8wI?FTk|BGX`2ingZ_fF)Cn+0xhPAsic-EdOP)iDh*@90>t2c#OFL_D3C&2+^Oi?t4JEpm z8C82F)eYd@l;Wk7;z={G_CyIR1w3K~8r=i0vXp9WV9ef>cHfjP-hk^Hiub9%ZfKWA zxT0jv;PHmis~fQy>asc4ynEMjT!QjP^J3Si+XZgQBdCi+_sVdKO9>jq4`s@a@hiyY zD=u6s)_L=v^kcr#seCG1!K71xPf#iHshp-i|E*gkGrWSezfu@EQT{%)YL~a_lX;a! zTm@%p)f0FHolceDyyzfHwTNsri(55%akWx^l?wdPgITo#pJ+3F4KH8KH}e{e`5f)W zYB|0t{o5MOxSAh2mGpe*s`IrL{k6Z$YuPcYP5CNy;kC{L=qQ0RtADLSW0})!t#f0Y zd#Z@%ZJi4Z1gQ=AY7cQph4|9c`}ISF#p=9tutHKRUkO9v`oBh`*76b5XZP2q7k|y5 zsZdeEDr{^h3dKrJt<2SFfV$R$L+fMQ8iQ#XE6u+q(9~*v$Eq!^Z)1ftG&YjjH`Jsy zfms_Mvgp=2O)hfmN6f+lru=n&Ek-AV_2hyXfwD-4~7PQsz3 zZqPwD^ewk$BKxAg;^zHZ=n-r4s%-Ne4eYd0SXc>G;s%4yH(%e@-sm(V;UedJEtfit z>!~eI2VhJiFoFen%Yt(J)Gu_q~Y;6Hit#5Q&S{h*= z!rDGIwY}VLd#BrmE7#6!(aL54;T&lFxPbb+og%EAHm!rdsRPfVgCML!I;~x7pacJ| zodL5`*&U|J->Gm1(@g7};_LWU0@GuI84z}9m3PYOc5S=AgBhNvC;evk<%Fpg(A%AG#WBR^(qKE^0N&b&A#axli8KKhOw zDy%pD89c(fIKe$Q{u@3nbU%pTpHOEXlkk{$+%ftQJfUYfu0S`%OEhV~Iw>tbjx9f7 z<}s-So+R#=)Q3)(vrj1=Od)tDr7cHHJtp15Cmo@a26WQ~^3(qEQyRCJ&gs3b&>2)7 zm-2pkhh`?`eh?*gHe8&FN*4}FpN@mh02gO6!)KEP+G6$Q;w)#sM9s;w&*dz(`5w%M z9n9Db&gBqI=d;g((#MM|F{;yNQ}xEn?`JF7CyEy5qb%pkz|)P;g@M6^uKQ^i-NG1n zVNiZz@P5HDe4!3J^HT{WaE8v$988T0V2{%+*bQO~hA$P;EosXSYdyy9rJG+qSlsuR z2$Eky=qNNt6W%|-3Zr~b* z{Q75wC9a5d;nHHq;!Oiy^>)0C`5)sSanm46~ zHXvb}v_qSQ#Ovywn_7a43GcQH4>!vRx5(%>ZA!QH^fuKGw<0rF5`?jTWp3Cm;kplP z6sHh(R(86$1BQ2v8o!aD(n+fl?jnQS{@LpzZ}+p?ZJalmbqw>jxyH&_Zs_6e zB=AstWqUPZb(Z5G5^Zl;@F=Qz|G;x)o%pCZ;&7t*@In7*UvO`W81-Is+f?BQm*n`8 z<9MU=Xq#gnNq>Uxbp%d7A|Bp#@jS+dot!J2)GQuj7#u@6PF@e6&>zi@(w|ahoKR;R zb8uoZdM!Lha-L!fozg0vp3$F;q@R8oK6UXt7qMmAiAWSHzZRuOC`DdpdLgoxH&U0ci%D<`tZ&>iZVV1_Scb1HNN&r7 zFjIzaD3LeKoVS)7r?tq74&=oj2CVLkyKf_yJ+QkTk~^QJo2H|iX0MwOq221T?RJB^ z1!UQs8#jD!N%C;a`EU|>x3#?AhWaC+?BSFXIc)%+ zUA{S7zTZ%MKs{Crkc|<@xkzM^Fuu4Dihv{gg|O}o_UHaN21U%z3?BB&?h(lI+u^%@ z*#A71k)4MRhZ)F!4_JOkwZ_XW|DRX?bJ#!EsXlr*jKs_J#>+i^xJ6wbc6R}TBbFb~ zzVfx$v-yk0PV_daytN2fNj3$**P2W4wR0&!$5P>^7_~Sn90d zm+89Kwu8nz)9T^3?`*dw!HkmfG~hpL3ym}do_cqPv6h^Xb9j$1h&=-~L=& z1Xp=w7$6r0NA7c~Ifd^oUzN9%RT6N3(GKj|gmD;1i(!})CDy{YoE_zFdp5pBiHuYu zaoI(mNDfH1AiMtaCcC6xQ516!x#y=0i29D64<`^0;xr(FIO64b_+ zqY^I?jcnh^f7k7o6hxrKNV5{TS4h1s*!U33QQveT^B%DAj`tNz>{}>Hw^1zr%YM1> z{@3fdmGXQq?4S01+D-d5$cJQm*Z)j8E;dqxME;|kFoosO;MY-j>@d%?QMJl6tw&s@ z)RV<(1z905$FSUsgKAZwui|8lA2ce%zlp-`L_$T#0PZI}j0H_3 z{|t}cqkP+^Lw~i;qmqnJd&%cd*6kVKs z@_)ekXKuj@hY>#pBLmz`E|I4RHl8=4SyU>JwuhRL05t!sVK&nD=J?UGvQ zewVolZM=9q&ed^779Avs`Qxd$X4~cG=-@X-KS)ow#QFC*1Ci}7AJu3Iqkk9)#lu`b z4l)*{OLzkK&Ht0y57I?cI~q=_`ts>IlL+tBNw5>ro`Fma)J<{uKGd^mjS!1jLS>=c zMnLQ}^|RhC@tde<+fRnCU-0zu6uq!Z=*Xo@he(h8c}nDbmrE+%+kLAx8s|m$nnG<> z{1H03j{)1PObd(lQ^}1h6WE^-E z_gm1dUY`45ETff_k*C*mNPzrXG7eELGD$1naP?aTNqWBM3++L|)A8)N4iMMpn?ZSO z`?OWUO<_FOp`ZD&>5LA>{Aw)2zimr^&wd#p<$mFROF68{Kz1+-3owpEh1lm}VX?e^ z%sb(aZIi_g4i}4;Q6~H_SvWOdqH4#Y7U>&TAaKttZEdWQZS^Pg2-BRhQ>I6R!y(^T z+*})4pk6z7p8ajoRJUwzJabB|Sg(_nHL`Ccc=Ei^Q!Q7^{6@X#sbda+E?bT4cC_B` zqEuzW%;*{*6Ic7Oge~1z#d=nK$Z@JFgWb@?#Z(j0S5p+KXF*SAt}!L}rA&u?Pd|Du zBgpfMOP!_JcgxiIMg6LB7z(WOm}yUZx%3AQno0k-)h^3FuVke&|E)Ktv!_1Y03@^I zl5NzBBAKAUh(;|-b zF?1^g>;#M3h6yFd;x@kXse0JMb+(saYyY!QgS#oRru9ynhaPi%C@`@^y3;afna>cb z?8Nn@#0mAoUQa7eQgiMBlRqQ>Po<*6w)=ZdI~?8b=#q&(kt~0r)tp^U@;`b{YT#X1kL6Df|d6F4tt-m=pwvD+5yC`ME(OSDL?W$ zE3N$K4rkyAA^bb+jbT#smFu<5lZ_+9?TD8CxFwhR8H2E=zN%m-gZpo7w%Q~WD>RBl zzR&*eus1_Qz%_GErC7DX?DO~d;%PC1c3(PzkdoO-li?IBv=H!ot&J?1Hks2QOTF{K z)?(vcra_?BBLeJ_it^R==T8hQ3M(tt6T@D}a>&$w81BamGF)Q&T(mu$DQZn8-(as+ z0UGyI8*He7H#q)SPM2@2wVWfc!=WFT&pv90ku|!=x!azsN5|5@dapm6Z4a``PA}9q zn84HJ%@qgr4$O~McAJr8oVT@0XYOYYi;Im=x0SZ_{){sBYuVfJGs)#LhT97y+J~A& zZ#}Y^MJL?1pcEIvFF`bJ4dS?~)}(D3s{z5kq!?^zr*P;zc|3M#y(Z!*W4)NLld`=q zsdv_VRy#r8T|VV+XS%{SxmVrz4R_X2wb|X(sCzQg+-R1!g+`%rjyUUKN>k21{nG8f zN5%8~o?VaBCBMvxq6=Yq8~r-mWjRQax@IlLyizmMLB0)<8)hyoy%hIt4^)t#b2*!b z+3v$^lJvYSZYxWwws$KVy=!+TO<5vjJ2y|&bT`jk22>d7<#JZ+0^~e9hR3g5J8VRhBpJ?Ujto zu@sueDTFX5Oj{Kll(k0e71phwGh0AbsY6PNc7X7w4TH7tl2n^1nd0iYF6V;M$+aYK zS+gVj2!e(~eT?#6=#)3~y}dhZdn5rru713o%2-Q!)PGQm^eldl%EAqtbaRDk@Ad2^ zl)PMlMFJp;b6&b?SN$9F{>&Lwt|oi!SF@mud#fN*fa%iDtUE$nkhs^qLY2&UNH z>vKz{f9#^Tx~mx0FuwoT^VUhAdRh_ywJlM}x;%X?+pWtOt}t)0K4Al2D4VpmWzM^>50>w_L2wJLA#qQ|o`tsk}Y&Wk}beN)O4m}hg#`jNcHupJ>w3N_VbdZ~z z5zdrmj|A^Ou=4e+vs7pLNleJT7z1N(FN#pcW|sVXQykE%au^+*CHEIr_Nj0Eh>PpX zWd>JE|ED&aNBhH+on$~I8Z?pj4uFz3i$o_npXNRJrPZNLeU>~Dw#5?7Q(-VPmOM6q z8um&{nJt+lzf#KoOc#W@KjtiLC-?Oo?WZC0{J-*MV{&Nkkj>n;G(?9H&*oowb6YI% zi+KU_)$Xt_wQ365qM9HD?}#62*gGn>Gk?fDg8dZL#2YkWd6PmP662jk00l{)YO_+d zaT@ewAgRB#*@u%{H|AD632*eM{0R(J2h^~4Pa>&kJ72iQSiuD)Z(gbh`*?36A8+;z zRc9$wy3bZLj-AL{vIi-n!Z3Mc+Fa)$3%YvK7=ge#pbs`unD8fiJv@wqu^$@8G1iTcuuQg4qvolP0dnyJs_L7#WN6ZC85(SNCkif5#k-mdM^zO0BI zWaDKlo_2VcD6{J<`7K#2KXmvxKl4|KiFE&*F~^r0Q$0&_V^+Cwd16Se_ouY8N>~e0Y6Lij_%#(;`aX$A7cJ<5J^GbF_PsOq9k>FPk z6s$z&gM@FRegiTN_+kqo+EnNkO;;PfziLuIOPy(dPF@jGOlffLt(WF9`nwXqWxTK$Bd>&CwARplkH%Dyf5`E0oaexzWX! z+1}5Ar^|r&Q^Q%k%2=AUP@{n%w+ zY9^t_A+atiB#IUtqv6N)I(O?t!`w++f;eVQtYS!KbX$9 zTW_4|2UtsOQyR&(r?w#7Kj`h^_!dy%@A`h@TDxopy4{ywoVyDI?XxKs*AxM~fv-l; zGC3FLG^}qLs!A_#?4WRwf}08O(4|)_bRSEQZ!S39P9LDRZwB2KBB4?QKFN68qRySRXjkpTWR#rH0K1P`Y=!`BO+GcJcPmd?=X z_;<2WuLqqHp5#kH=QXS^dBOyDAj2N}ikxnf;}3OUMvt{0Ft_2`hpTELPt?Zuc8fx2 zt6S33Jf8C|?XSR@q4E66>UK|({&u?V5pq8Vc0byucd(Qp`l^!Tp*I$GhouO+nq_!6 zhA})uQ@mkYYXVYhg(f0$$mwm@q%fXjI)Al38 z7hdP{1=rnf+nWL6Cnn|o8R6#}k7mN?%7p7Et>jO&<0sW)Nvs(_r-7*?! z$L*y^85s6FP@E}17uWhLw}U#!Qw!p!;~dDl86d+AxW(}?;tq7)3AE|aemCQ-i2zvQ z`dC8%Y;OPtAV%>$izT%=Kya|(661KlwU#7OqfoP;JBHf1WHX0P@p$= zNF0-|A0n74AQ-^piW>H&^#lWhLdbA~aq9wqIAhjHg)}&aR3em$AR)X-p{1H3zB8fd zQlULe!EK<>+@8=bkfuFl_!v`oJ0z@wGISW>+iMa!Fca<-6h7%!n0>E(RreBOd@W3BJ~iF`1KK2 zGZ6^qDBSvQ51Ns(n$egp(O6nhkEx6%FmE^vF~{Rth2G+Cb3+>%JhY?n^LjYGaB#(Pl)Y9`0ue~MR4j#0LWG-pl_QA+qt6{))$ zZ*LlDSQukNm57W>nBc~um`#wl_ID{v-1Sc&EyR6nljtm+MAw^miJRoLCRRFm-Y6-t&|mU#at=>aZhcJpZt|?X<1?F>jK$9htNLz`d5BRJo6GJ;I%RcKdeyZx@ zZ2TJ_O?n-%~r)nfDPO zrNEXq*8`~y^2P*d;%E6b6!`Cfx{L~f&GMhE;HB{ve$*~Zkdcd`E=2AWisBb#vB)Kb zfTZUNOU;VHQ;O_A6-5{20lpWph7?tX$QGv*M&A^*$P_lZ7S?E&)P@wZ6cx8OWCZsW z4c-*@r2JJilO30I@us!97SB-^^znj=C(@>6&(Npl~U~wR8tx zX0M@i2)|&{wM-SQ>|{^+Os1@RuM{n{__nVYpk01(Q}QUZ>_t%-2A}l3Hh9{s?0~ld zkF}hrzvQubIb6E}(N|7EAYEHnLB&^z5;WtdmNCrBkjPfzgo0>UOPFuLY^;@13+J%pXbJR+a8m$goPW&R3`2R7=p5 zsPNT9_EqbL)+oX8boy&NKUI_4)T+DHY7x|y@zxsYNUF_OTijMz-PYQX)|sT%xir?g z>(n{YNHVnGnaWn$_16JbP-0C9A6AI#JcP|0q7@1Wo|g#ihxoy(0~%{%`05Q+>l5IR z2!eWx#`-h@3E*wLEkSLvTQLe#>f1Mf2pY^98*< z6%^j6g~ElY6^)Gzo#ss%{!P7njqRb;3M)-s)acaS(7DuFz4E4j`KBqPtoR5GRB|3# z%~!EP)2vbrnGc1I>VUW4(C?|udj#U^sZH9)SetxJlRB_p^Ubp~EgL9mDGPnLg&n0f z-paOkxV1QTG^5kDw#v5XDz#$C!HAp0u2@^cQegz{tyKKQX#8!o19+qst*4=_FVb*m zN?I8CD+n!GSP3Dob=&)Nnwiqt&-mIu>9!pew;$klXwJj<_az=%w4+(HG2XRtm$bd0 zh0Le6JSu4yX=)d@=#ZjqJ!tGuV{6wKkWkuhM-;=1XghSnnhoUYwRGEmxp%4VcTmxG zNwalP3wK)Ww~D28`)!UET|o;_7i39yS%3Gdg)YEdR~W5? zpIlD>ZL1?~FL_f>>|JBRLbruQvwmhT4{Z;QZf}A`yKic5j(b>n=fH<#%U0tZyV^ZwiwVo?r+f*?@Q~;lpE-@80aZ! z9&Z|$gAYuX^o$OOqv)jP9jZ3lx4PfEz&4=&9FN?6C?;*FqG@P?7CjnmxC8|&Enw%m z!{8=td+*_$rr}mv^p_*U{uYDi_e0jgBUs@hcn3ph0;5AE!^DGP3^pUwM59+tBfJ)) z6kxISfk7ng$XoWm9GDAs;s?NQYvM!y?d;4+j(SMiY|INtMANx%d$r?fn#Jr~FRfT!&bMjZ8~0`I4( z!P5o;Gnk80LHFal;F-6BGq<`kIvz7#?6b1+v#0wrkwh~o;PJHdp@i_+ME1!nqVXKM zA>jQi4c%<{;6yRqU>+(vYdP~QeNO+~e9OXIsmDkK-2&<0e7Wv?o#lLe`dr6iZ}Y+2 z+vf`-(1qBAh3@d#UXMi|_Qf!{#SEgw??~{X>%iiq$HWZ#>`Hok2A%3`Rc@SUK~Uy|7$Hri(plM#n5&-e;f3D_wd2 ze1%Y9l}KYi09)= z$K;52qa(Irmv$|}ck?55!hw4cL#vte7~qFJ#pc})3VReDy9G-dML>A<;YdcrS~+mn zuNfZh0q+39D;0Jl58-`>d$7a3?ozn9!hVv~ej&&HEg?qv(mw2ApAEP_=Lw%^-kn;S zh*~<_Io$8|++PO{%{=UF5A7p>N1*bf3E;xn(A**Y@gt#wljg$` zj^k_3qur$=vyo%}p+j7TljEV|;=?t3&Jzj-j5~!BBIMDi?hz&D39Z42tmnzwjN@mp zll#LHDBZ~mlHFHF$81QF{^v)hjFA{D8D~X;X9M@AFAa_}R*qjAY;swjMU|fMGMqmU zpGYtquX3D!7(N#-JC@2gmsviET*8o#Jbu5ttW|dL9d^OZxpn7x@jLPYCj(=<^ipT| zL}U1DoDMbQyyP;tFebS$N4uJbV%Whh#WVJd4KBZyU9B!&*?S>W6)$}mwqz6$JC+Fd zNQ8p*l@G%O?E^*($+f-Wb$sL{dD(SJ*|~b;RRZ!li2*a3Yuj&7k0_psp`WsW7+^l-|6x#jh+L-K%k zh%qLF+%!NQ3f&zKBX5VV9wHxhBJWvCkf@#S?a^(G!R=MX?VD1hI}CXOL;m+wkm5rD z40-?0t0)Dt*zrG)7UaeeYS{ZQ18cic#N3Fy`Fj}W{eLeaB#bH4g8BEOFeZwDo?9b# zgb=8U|2^IN2K8hC>iFf`q7~$l7ZP=m;o*M|{?94ys4s+ezlHh^|8v$qr+`pT3O|4% zZ#Iw^s1vU^?`Dv&Hndg0UXquXM8s@K$14%f3k3^Z|ANn8rPKfa-mTK=K)_dWk=&%% zZ1E(4|Gg;Ajtef|8uKUqvp3Ouw)1cA_QFIZMbDZSMMD4W-NIvwRchrjnu%_e%(PLt z+oet&d$2~C&AR#kjppA$@%ux|{^=uw`an9NK-yWRwT>^aElgJR)89ks0)Dx=$p?mA zc0w5v>8|gh-el{*tYmqsQqqf1gJR1spDdPee|3LO*Fo52u>;4XGKA@pUG_x8%J3 zi_5^pW2DZ&<{FFJ;PuXiYKSOLXY6~>2;y~kAl+}uwV*dZlyRBr3r2Vt*VJF*av-Kr zwCLN}=orN>Jiq?KJ=?wi%RRfOqSG9<>bHPZlo%#iPpBGp*!=~0O>+~~8%*;v9C^(^ z1^IKPJQWaXc*$Skav9#k+{CvsIp&)8+zOa^X4(;PiB1YP<4hoH?KV8KMytb^b3*2q{S?g|W2ivjdzYp`_EUr|N4F#{& z$P1xHY-+|H4owDtbgO1m@Ak6URFL0k(MgEbcKJQdgVXB!ZC&_UB#EAdsx%|iuqHzh z>ae@&xM&6c30pdZ&Xz;n+8;^syB`yH>AH8j3BlYi#z{O8gUi-Jb{jm%CQn{TV|v$# zoNX^xWU-gdW%<>IBeD_iI??Axq!8ir3QlKYd)>R&JI%R+!@d-lq_d~pl-qd z{3~UDJdIBhe*0l0__GByX-<$Ri-;9KBR7N89aK*2`8Y_Fb`7`FSuCEtBA5kbYaFK( zrLI*Dv6iEzE#{V_GmHjkFBm@fLb~5Q9gY0?DT@lrMM7llFc@H=`;v^gn^_{l)}9nd z_lCKEAtvw(FUp$*n~{9=5FM8Bdgb}>$VZhF%@C=BPk0(XAzj-|`DN8svW|88bKj#>XqwhPG(u~?r`)JAh zcsic?LGCweCzXQjl2XEU$qI4$EWhcRO5#z|Z+;Z)bagySz2g5Zc!AU!!ey~b?!sXD zXkOULE-{{YkemPbnf9QI_P5koe-i;o9%U<)iEKp2HuvYgVKv){j2-^%`>AU={|37h z!g%B7oYbT7GS%6fHH;EhJSgt@EScthM+i$s+E-oWB@Wi!EIF@goa2W)mS4M~dUGoI z5m|*FF1AK3_C_O8J{CN`pOca{Q+Y>z0V1|EQ|W9_O%j{Tg4Y2^A~EIP|q|c_*5Fv zS!jQ5)OyF?R(@|$Y`8tGS?_vc=p+s{f`!QEsZZ4;+?!i)rfTsFO_BQo+1U&o8g)kd zhRt*HdVV@l%}!QUhgId#+5TwM-TE?J@0(|7Z)q;K;5gNg^2^+W0$%g)^bsG;`u|H4 zb?X1C2^Om<|M5ByL@yF1rJUUvN&*ub>rqze=AfmSpP3goGzm21Io{@cFfnk-&+!>th0_{ z_9GDL06 z>FRhL9&O-Uaes?oRxBOxszMH-VRKVkV3M0WH^+OUnd%GqtU2n}B)&5$@$3OREug(M z_lF!0GvJ$@AP+^S(rb}KQU?WrJUvHs%juVD-#aPQ!`3HvrozqgCYK@(QFn{|@Okmp z$TOU*emVLc50T-Wm$$Xyqa;zk5~s>Llj*N%=)9Vs`x~>0&Z-<<44) zh2wU*v(235Qrhlhy?&(gSiyFr@Ra06hSXbTrdWRo)19pR_nLXx>LSi>{K+J4o&;!{ z;k}hLu-(Z@dKsv>R=^b4V3^98aI+N#LgA@2?pm4YV*W!Ul~D#AC7wxUk2~i{}b$be+1W4@(}8 zyOx%ct~b0cgA?OgGzPW7Pb$u*LXUc`^&70KA0A}EEf@x=mg@6;g?nxILi^kPXadj8$(zCuXh11z-+r_W>e8-auP}!G7tl+#_!f@EIR>rl2SdW^wGU}|?u)02? z!(ljT>Y%W8-|30f{~SD&4!i&jQ_u>`7}}XTwuc!gy49OsdAVKLtfw!u;P9Ui9awGg zG2F;uza4us?15gaepmikXji_>6%m^LP+sscU7A=A?VSEmdt&`lYBBxI+q5y&o=@&P z^7cx0-*@MXc}uc}eiavgPusf!-T$?p6FIghylGtVvkIkeY zuf4qAm;A!u`^WG0)k~_uAh9dj#wHdW4M<^E?Rwr%qx1`V`ahC+}ihA8bPow;-Sgx-f(zKx$G9}(TpLr!9S+18%K z26en4w($@7ME)uVR4w`8UCc;W{%HcBlW*y1qTa#=1>Y{j!1qJkb2ha1(pr7!Z|#!P z&S+VuX9vg|&Ya7_a`-2?M78JMg&u#SJ1;Lp_6z231Av4^(KB!5Y(i|~8b9WX@Layv z6kg4G8~}RuR%SFr`y53RK@wbjqc3zPa-I|YO~I-}?tRB){GSx;r@T)iU;mqe&HIXP z-#4CqQ(YkVAGLlqwHk=(*i^+SWrC0!MH9n|R10J#|E6FmTlUnhydRai))eb4`e}B{ zOre*<XBuOd2ft&DB4P(gat<6HRqLzMUQWM-vP-dq$)El$;e@{8tk!J3oh1sI37|gDsu< z|Dy@+1ZQy&pcaNGO>lULO`iSC2Jcn&4bmct3 z;@X&eh}N!7?;q372DmziwrVw-XN#e$#BR<_&o~mE3CgWKwN`J(HCzvpA6O&jQg2IO zFAp`ATZgG%CJ_wj`k4=`(~pyNWp9>80^~MU){2Pi9 zTi(UC-*rtwZdS{BG^6Xlx@Ii6m3q#{rCVZ%5gcr4v97a%3$TE3T^@-u-mQkdL1e9_ zTL)-k&uh|&a8FkI&|6Q89lt8KCw zTu19!odJi{wiMRthXIG`Y4E$9Wpdup#0TumP>EeRhK5l){S@H=m-UfD2qdT3z90j8 zPq*%RB3l2V*!X_`%++OP`ru;Ngzmsm{dTTbz_AE^huYQO&Tk4{S=QY@{eHyP16R0g zT-G}Z+HPD)6mVd}pg(yWa=E6g;M}-Qw_vS!yTNRL&^CV94_Uq|WnI2*_j;JjW^msH z6S-6a1TQMyLN~#{t8q74)PEcrxA};#rq=~0Dh)i~bmBP6$cM3bW9X=>*PZ`QZ!|}) zyZ!e}y((A6V?BQZt z>uzLN=sJfJsW^Z{E@*gNZvQ^ua(kHe!j8-c-=C3pi%nVGkO!u{KC?7#!K=c z)$~!D@+L-jvnBfAL40Uuj3}hsju?GdD7{cLQGCniIj#>5#P`XJF9){~qlxoJDL*t5 zKdzad?+`vBnr{4>enJpSo+P`MLEeJS{-4PGMVb7>gFNMT{PoHGl)2HqF?p$(1h8QT zXeD{+NCoJFETlnpeB6P0nt`ve12wq=k#&I^F{s}^TY*1<0Bj&YgF3)z z2VjdEMBW9^+5wm=xd&3ZX(AEcAxWO$NoGNm0nwU4vAD*B-vMcmVBkz}CU=l?P;j!z z_jqpqM9q*)$B>L2R0lRBp(}&|5mMe`QaKaiIfE0U8Io(F0qxPO19??zhVIv)WjTj| zO#n8a&;~?k(q`BVR`?!SSQ>Z00JqneRG4{uc&K=IA0%uL*K@(daETIa+BpIVhzR4> zSqG`FPetruMaHN_tWZYGp{6#Jfs>m4sNLfgNN>0fw<{^K2N6Ey9R7faoSF1SFN`!y ziZIQLcoG~gpAaQW5rvr?jm;BHI~%<-6G6TkieIQsSr`r4iDsIO%$xlELQ8{P+GEI)p7b){Zik-z5%fH$+$~_PL90`HDKP%byQC zv2BpJ$Fn#hcpA#P5lUKd&Y$C@lB3m`qvdC{6q7Y|@cw+DO2A@{wvvv{_#8JHpV0q1 zPQWGcEljbOhcx!PVc|>Bz??hj!B-iU`Zl1(f*VyK>Nq*N! z_>_sLW~*ObQhQgDGgXRYa55LO4zNBvRx3H7KG>fsjG$sIJY;<<65_X z$}@X5m47xR;5r2$9cLkx+8mr%XBt^S7H?Y^RpgS^g`37~in?Px*{3G8@^@PJY;13E zd~~5U10bCciJJ~(PTyg|o|sjiVFniFr*G7wEheY_aY(3jFgxb~ytxJv1!MOn11)NR z`Yv|!yGi%g>Cgb<{rWVzgbbhm#n)Q^wb4FqyI6q&1u9UaNDYcp!=*xTZHs$b3KXs3 z?iyT!I|PDDAOVVNa0?{C-5mntY~T0ym+w1sP9~E{@;v+OE;9^d@7&kLnEXjSW4tge zFW2e1UX=4v8ZlEksf!+`cIHw?#(8%-4R@ASa9WFQst03+!%@oM_1K5!Sr56>!^eDB zLrnI`vv#g$^Y=tu1t*s?{no!zCGJrj_GOy;>)>}{QKsh^ab>v*+!lsK+RCUbwe_ga=cIhP zmfw^0T)Fd2ld>(DqO3x4I>++Ap5{8j@}P{lQuySohrv-~Cb`6n1tAo<6nc3lBKe)V zg(J>cw?Yb0=F zTn{7M*Eol=p5z*hhO!S0rOih*MWi)dMKxmeRc?yaN8ENlrX#QG*PiuMJ6qMbDb;#d z6*`Jn?&sF#`V-2z!VQ~?;#poe7>7uG5d`*$5>}vOmf27* ztY4pot1shes41#1QG(TM=#=x+H$w=jHtG>dUz$Q2iYWnaFZ{te`NMViYkjz~1Dwh^w<{Ysv-nhxEv#gIe zZK&S`S5E0S@i{b&GdJ}^8j0XFR}F|WaC04HBMC3*zJ9Z!ee>2vVy0AYYKnGH}Rmi$k zv=}b9N&XDp`pBR~ow-dkrA5X-n_#AO71t^#(MF!%mbcpWGOX<>yzLz@;a=PO;&#e! zZKPi93RE37PdW_mwSS!{(kgDSOzHS|kykd+MycF^#kJ$;I|*ewE37&hiaSZfJ1sUl zk)fUEq+R&-PHp@}2U}QIC{LG7akHO67tKo7S#FoDa##GOKA6`yakC{XrTzLuw;z3X z^u3-eiT1ja?tH4YFV53rebrQbjK%$hazHV%AH&mUWoP?z-}IB@W0>cH(ANLooGi$wP&RZOef(Dl@zA}UvUo1RB}_S83wIQfP*`vz-^ zhv>G3iSVhzgtf!iv0;9j5$Aiu_iXxERfb~nM;@?{TAPf5>_-bOhGqgrQ13?1C<$J& zj6RbbeGxu12_Jofa8eH+c)!*6(QtUjZR{j$R583=8DXQEYG@cvKx9b%%6?_bo7BOth>4%6qvnPa!wwS@aTB(eV~c$gLE)2Lh6z$CRh)v6QKwh$%?_L@vTAj>XW=aMBEos!>7d^EuI{ zPQl$LYx_~q)M@wH=_MgZw?Z4pr?y&%w+LRwMaS++&~W@(Ei~w z7<}r?xZ#+AA=ykSYMF0rHg&Q$H8tN5)0v9-iNKVP&kV$&7faB?Hke(Onfa3GZ9@!} zWwx6SyTv$c?2g5UW5)O%S*U}t26#Il9#qD9q>tVoeJO30q`c!HmUTdM__ksZHyr?R=xPKvh zd7=H<;&rJ-Ih92@o5iqz#pc|__l8UDe2c1S3u^XgE4d|hvJUZ)jWOGd7x zLYLE_>!cm)OE)I$-PhyOmIC=VDlzL|+oe+K4LHao3*Zymtao{=wPH4iW;eoEH&t0T zdee-nSQqO&w(6y}2(>nm9?OHQTPSLinZ{KY(AF~bOatrozUEew5qX|EIreIG9csKF zMYd?WL14dqp0<5(WwhzBv&T9+jM-V!-0??mpQUY5sFBJbcSs_P@K@Vl)?KXRE)C7# zaoQdl1l0U?13dP2>GsIk_qL7p?+l>mY4$}+_IN!h$gz9N+q>NOru}}SgA?jaPES%U z=>sS9K7Yh+?e-oHc|hB=_egEui{M~Z^^n2y;1s#{M&NIt7;kg`p>FPd*tR`>LHvE(VSFtJN+;@#(m6HGO#cWwi8V5gS0iyudc; zbqHJq4FHYD(>0p2Txon`>G@LAIVK#aLF#QpTy#gAZVg=i*}24(>dmoT;(^a8YFDSF zc$}TyWyERFKllHh0B*j*2u9+w4uEL?_Y39s9;VM^F+dUuLy&+VTE>Q;iMt!n_1Cm6NaYiMEMG zg{eNXH~Jr{@w<>`d4bu$wRVhv?j^^im}8zwgJXZzCHSB2CARH1QxbHsC4g=DcZ%-8SEMX4C96bD z#Z+LBIFLc={g&&Bc^x5y4|6`UMpZLdQGSs7 zzEj{8p|ESIMEym!9gsmPD@zmWik1o@>Kr5`C^3lun=4WfEu?&%CSW}y4LkL zUnWX^g57Ocmb=!kT;XPT-|#Ii*rT7XdFCM2jgNZ2Jbxun`lXAXq|>@m^*AVOC+|h3 zM4zfOdhw~6=-36ma`0FRHw=G$Hae^>*GV~A{f;yDKtss}$E|Ur_0GY2wHVhAZ3=fw z4nKSl4^{Z^LN0FiqqZgG%ePwk?$uhO&oo~mb@TN`w2Ya5==+|Z${+|AZcs%jkjE=6>;5Up&Tjy)1p|DXxwB+61 zUrX&L1r9^0^cXihUohrp?PGcnCzb4}iT~}dPNsp(0jH+H4?SAQeR&!uKZV~QeY5bd z^;Pcp{$jM+6$4;>B_#@oH+B$Rj(7L+2CT0gNnaTpmSN`Uo}^+HnXXp^0a+13e>2Fd z49ooV06buQ&Cjb}FBJaHWL5HT($A{2ffQ#|-pb)>UD+!;ZJoD%EyhH3=ug!4UeYS<-6qH~b!geh(ha?R~6!^Q>kt zOkmN7$&8_ux#nh|=*2L#Be{&&@OMu~-uYWG1)Utnd%>PEChXZF@2=BFM~c?XU!yDh zLuFg;Yk2s8tW`wej@A!=E&G{ctgicInq7b`iCNif!CTSeUH9KIxwL_aoeyh%L@4^@ zvJr~P>%HHL3^sT~U%4u8_j!Dn7 z=D0`5G+3uGlJlyHgY`y;x@`?WK=v;bF;nacOuL=6k+b^HQhUh6C^n7jVoi2$YUujv zNH$wZ@Pmt_)~M*i91=~lkDB%G6FPfYyVyw3;q#R=1<2X+gmgg&Rz?wQ^Tma-bsB;zpdhTh(3HbcjBvvl%M-_j4MWVaR&(J9ffUo@_pT*;|Lxund0FLe0Q7Wmz8UlS&z`otRHSl4dG8LU)nvYd5_gz*H}pO1^7 zb31f8el?Uiyo8(TaBnwc&;gc6sxS9xlDhg|R)j=d7~O43Y*alS3VT{?9EZ}0xK#NB z0xB4yCr-^-OZ(mpVVFaD#&RyH{ZIORpQ?u^(k(oG#M+6QaXX&&%=P~Ws+E|RJUHt$ zr9MoY6JLD;J{t`3fFuj>2n*e<8gg9P^}LVP7RNDUxd`!-Ri7dk(@qEE=nptVRV*G0 zBz2GW$Nf(KrO0I*KZI`I%a-Ofl1NAxj;pCMW#$bsuyPrh*sjXIWTgG4FiJ`g@_$CW z{j;Xe%QBjMNpC+eC@8z%>TB^pG38X@(?4`ul4U}2ohdkA4hHu<)>!T3Oa)53d*ArK2^e2Qx z+@E)n!z@3;5K_Z8U8?~qj#H{tKsPA(EutYO)W(e-F(UUaBFpB&f^PE|xm7&<+!^^$ zI87nR+^qMN>D5dhta4=_`E_U>MfHodk%AA7hW+QXY!hY1y&#(!2h?=k&kcuOSLhD5 zd2jxPL0jqfCQoV}fxel!woZ0w#XwcVA3Ylhl~$d7l9eah+0qa3EOzyW;|C=}kb!UF z)~=QI3n!orp*l3K1%Eu&bmH`9(U*^N_RScb#jN-E<2tm@?9`Bn#oTKKQ>VqkuXFx) z^YZ7c?>U@eY}o@u(%m1;cVg|mSj_LeCZJyZ^pi$Y7_IR9K>@piNKNd5qlDDtLc}dC zc~fUKI!lb@#$#CKM>Zj@`5^Upi%%X;0Mfsa_31Nr)A2 zM82(A%Zp;{fIYJLHNF-cxV^Nt7^5-Hxs=|%XPz6vM}MB1ASnA{@F&gK>T05RJR=ua z3TnxfE8WP2$+Kq_&5zDN!8p_1d*trAe^hmzFY^7m#+?w@fu|TM4tw(rl2ezaYnhz* zjeD`Qx#w)H%n78(o$kfa`z@qI&$1vhsHff{Y!vftD+jh-U{g9{#FSH-LcwEOuxM+s zS)MB!TvSxJy#meP{>HTvKcI+vP*T0@y45&kyHQ$8K*npI_s2(HFr|&dU=y|)P_Ws$ zMT)Y99KEsH$qbqAwM(3IxY+4L2Uy$J$=hgF_%G$blhb&gTYsy+*$LllJ3!*tis|Jb z2UX|C@V$X47m3|L8Dkg0ZaKEx-Qld7&0nnz2&(eF7uu<2?RR$!_!=dM`D6!8C@)L8 zNFvsDtJyBezh{&^_PB1{W&gWh2N~5Fb(B%8uCj>t*WzlUUJ%E z^LA@xv`3HcY>aR}+@d4V?uOH>FK+Z~(jSaY>i(91JYG`~zN#6`MQ*vo^{H+b#k*LA zf5+C@A)QxP4w&j41Ie0Bcf%kayo+5Ek8$YA5m4n)tz)Y5_Nb@L<#xI`-gPJ|26TRs zUcdEh=6#c`2fA0-?zva>TfF1Z?gj{PJWVWcaoLs+#iw?NUpehZ#Uv7pXjdM?1YCAv zut)SF(&yet$5W-5x_vp`JzZL<#SeGKzIMD`p4;+0d^SsXTfXI#i}u-@pC*?Ny53N1 zM|cW`&0V`ZktRs9^D2L6LYO|0ds9*E=VPi*K6r)#20EY3pf4MkuW)m*yWG|R3!e?o zgn}BWU1+bU->O?1gV69Xu?VGr-EJn0l0-UB)GEzllz zbxNL>M|e{GEsS=(VTz6v+x`6Dt|*DD*pI(-+ee%V-HLke$zC*n;W+vEj@I`3eRXxe zCvpls?*XK3!G8*)^#IZ~ESJ|DpxdJM4idYR^PVMi zD;qi73Kb$>e*I>u@0%V#xBXif)$KR>`ZRQ_l0o>d3HEPclsAt$E%==!wO{gDSiZ!H z!hp-O5pYvq{tc&Qe51!WGVNaztor-;12AAW6ra-_{A+@xRat(0#8v9PJ(4cmswV?P zydamVxZD1D@AyJASbywgKLH|MW~TQcpsE}}n;}JW#gXK+%G{UCg{r>S*#l7jm|(>W z^)#IOGf1DR6y5Uc8O;;Zj29Uz{3ww8k=|@HUkxaXrZbHd>U|`oDB+e(s2{6Hepzt; zX#FF)o3uC$h&u2S~fGZalMK3Pb>YVX!0jwRDigb-=%I-j}DQ4_yxxlR4lpK^2V)7BM)9y^rWoAXSrciOqe?S5#5O_5HYc3$%@4?1x5VT@tulBfOw3hrBw zesKmB_o#@7QC@PU5bY3n@{BTUM(FIxZA*JpBPeZsC4G5J)>LJUXa35Rv9PaFrDsSlkDn=(%B!MwNgdv*RpvhdI_=5Xkj2-^EKWmZ5$5{A zMA;X)!tTmXKi3as2tCgkm|c`pN**a#UhdFHdfY{oBvkDN&|N`?g^@fnky}8 znV;9HO;(qgGnyJtoRg?@ye#acUHU+Sn<6!YmOnKlqK7k~CWXw(BUCoNBqX!!S>P;BqcS)B(Hpk}E%ZdLMkYlfAO zhd*zpE^DZ{WPeBg%J-b<)m8fi#2LS!6Ah~t#zL*F+slPu$yFn)=;V}#d2JJ7^G%Zr zYC`oy;9z?3ON8@`rqoGet@Eb0aXrQy>DbCSwe2Y2ib~(!YY}hk35vLY$u*zd?rHb_wtjAmt=?Bvswd*;r4uC)|fST@O|~NrgO4?|Rkeds5ZelLA-k z^1XJ1y?W_A&D6bUER2siy~`%Na1)-4r%vEb?-?@pU2``E2A>UouagO%HsPNawJzK` zu0Y&-o7|I2#22;X!oTXndg@JG;M=V2OX%bi6zThh+%Rdvmx94pn%qah$z5jBM>fb$ z&HrYtsn>zH!_s5?W~yI;x{H z-W4`b5E3pDjukPOa|-9l3!kYAr(X?UIW_Kc3U?U{gOmF$>X0rmMDU1&9TtEFS3&5m zh{ZV2u@m932xyCebXh*KB8~{p5VcVkN#yKDU1-QC7(oV$A}@@rnvA>)GrV~gv8fZa zMILcqSBudygef?Z-#OwAW6T~|G}n|at!VTSo;*mjknAy645w~PTXi&Fca&gKglu7i zyh6+?E?wc^7;)VQNz3S+y4aS-v8rd$^1%_hNwFVc`YNKaYK(DGqH%^v`dSLH0!i_y zWpR422(z5n7Efve8g5adU!lc|O-LUJ) z39xtwEIel_S$`?15SCC0i_|SksyWlBJ4=e=N^a8yH=TX_lLWSefq~Eao!uJUTq!!; zDMJ?C9cL-Zbg4a-iAhr_la@NDsl;1&^~5&7%BA}^^_x*h)nyM~QP5e_O}g_cZPPM! zr&}9!9ekibc*N+5a87rnOXqhcT+q#^&`le&^rpX_@jWi(Tp?p4IOA$9jfz5>h$53z zEbSIk$aCFH`tuBiocCZ zfML4XwDp;yJ(1!?(J%C}A;H;?k~5H^IfsiGQps5YOu4U7z@jVbbU^fH+A^5ju@N-lY;cT&{2^YrxcuIr^vT+gTdo%>5H|CUMq z?e#pDgalj zu2}keF-UuT7D^A=Gg=Z+1i|(|<|#^cDN@FmiUfL~m5R`_9+mwNs8>kI{5KN9X^j=J z(zTw_t#4(9$vKac%Wl3b!zz~Eu`mDaQgR{&z0;sUIbHT(ql|{Kyn~{Q4N|;XRDRS` z&f;3e)sRmWT7Fl*LI_Vu+Hnqj3Q?jLueg;_&X22LZKw=Wtd!Ev;Bc+X38|22P~LZ` zk_MMETUEZ{fxa57x<*$a+grg1t}=pD>gX%!HB@U%S7_8cQg48vO)!AFs z8R^%GFvFsm)jmUN{d%i^=~u)z)PSdRVsWr+tBP!JU2d;p7!IZp3M&+E(8++6SV8k$ z%c*Ax3V9kDt*+I$HY|?9!YQk&T;bI`@R8&O;D)d&`xbibHUz%B2y0iWYYK&HDIr#5 z;P%t-yLeYv1T%aFtb%bxOyTN=!Em4(+Q;0u<_a&KZphcqrKHI2Qf!9p5# zDG_H4O&8P3<5o>&5TKdbJgn4w?Oy5527C`!chK8J?uMY~Yu?ysrU_F9(6+OXdg7Ts zD3TUDGZ|y?pG~Ef@xwm^RE_r~{%}hmc&(dHlFB=G{)M;A_M*c+OxY@>)nKOM_e`s!gfgXgyN>~ZJ5`6LwX*X)G8cSU zi+@;0;HKiJSeLIsS2M1wJ+>=!vt7da8r5c3JX|qKqB92G4c_cdPf=uuYzs~44tML3 z;OU80?#|on$v>y}tX!-5u8LW4tw!7kzH<)@kMbF1LQHau>>=Z*jA?#|`4~Sam&=V1kXH>f-eyio4Nc)jvT@ zFcr-*X^);N_%)RoKAEh7%C$k|`JoaeQQrNNI#htx75Td#<+FtP5bt(jbW)kMbSWB_7j20eoe zN265GOE#GH8|WtY=~@J4YzvK*9INHUOra;%5twoJw%Ks(t_s1v%FLmp;x^0dE&{uR z#!B@K4291UL1$YLBveMNgQ-|rDFWiFaVhm#QdSHjKl+v`N{Rj2o$a}S8}s+mFw97j z&HicXD-3}YX5VmL$Y_q2YM2K!$7egQJUI6Rx**PqdTG1B4_bJ{yZ9Ef@EEkn5=KZP zwIE}Jk@Z-3V%vWrxhP?@$bYqHDO1`@BGr6pyWEjhN*T*av&;WtQwpupK;=KFHNS2=_R6 zO+d`=xm$6y#@Tep?0LA$irP0?QfAwiGTwvo9r|JpK9ufBn;hkZACa>iNl71nu{#uv zIGk-f`ZlmHPH+gOJXRk#`l5Dp3s3yDY1P7R+iKuYoOWM)_9*po$9Ir4Md~EL_{4E% z<5Bw2kAV{p={+ywDIc}dShl}K(unla-p1227IN2t;|TnTs_|Kl^eM5|*#_pM5KCNK zdNzqXi^ZQ6;fX5+&dt+L&J2OdC9W8YbKf~%qQ<4!omR7*N3l()8=X&;T;!>pHk6(> zVu_oLcbB0TAmfWk&kM`Tt$sZA66tw1$#&T!eIBlQ4q>}mExpuDy{H?wz|vd|vf&ZZ zm-NP$uypha+c}T~Yd4aeG+p3#E`2lb`vO-Bp137I3=0DA0eGAmUVG;f7|H{l3tY_$ zT-I)1;n|K?OYx$!xI@n)UX@~#QyJH7Ieke~$^63B38w5>c|L*ojmlSK1V29sO)i&wJyeAp`L*-`r zjVuPIyYLd}fzAGd6YKf@ROy{!+)L}>UX{0^0f#4K=ZAcS*KiQwq3k zG#@%-MM|Csl022kelS|nN+5mb={q|8;X&yo<*+~g6nO2N@{V}seM7xG?J_a4 z{7F9L-2&*gXDXr#4?ie8UjX#D2NxUBZ-fKgZmUU>`9qOXh&!?B?*jF2i@svJeEy!p zG~-SH4R8D5dzI%)zdoo*6TJMWA@{iY;|H~OFE#(RS;w@5uhWf_OHDrV(X~R1X&HV; zS8E%&UK9GSGAo+Smps`ROG@}M(nUs5sGKVbD`%2bdOF-Fm9@Q8Sul~IA zo@c`BM1@DiOW4SHg)Y;`b*EhzOMARjYwU@~k9oy-k!MoDHQ1|Fhc6V2oQQhYn6yd)gP zlYk_7n{hQGkfVNuI862&p!gcqTjtWZB&!wDysuq%SV1Hkx*RPrnYg|@O~!h+{|%Dc zwM4dpCqRidwbKFM&#)C)7Wl;KFnvu8D6`&Q zL7a3YT}kfu22Q}87R2!qzsm4&0u5)C{X&3xEkD8NcdTx$lf%~0vWMM{9gT!rYde|o z_XB6C^wmR3EZVW#*AYL{6Ucex2A@tiGXk^|11BavJfpQ zcFKJ7SNuppZ)1{&H0~m@$AtXB5zjv{@zr(AKGpEmnl>TJe$sw({HDKSTNb_cWDEcC zQ0NP|DZ6Fu+c$tpH;`l=zwH+!`%>suu(jLbEwm1YsO)#phqeW}g8~KBb&Uv*Q4AX) zqwIU8;n*PSSz6Z>d963m;W3LJ?wRQ-C?C^A)XwB^YSujs@xJAnd*_RwnrPnv-Semp zgD;G6qE#o=`(fcRk9=~1Y4waM;%n|0@>fqO7@iMF3NX#;cRku{_vzeXCv zwfp$Z#BTTB75TV}C-P@_k@t)t9}?wWTD-qr|1r1dPNtfT#Yf$u#`NydqKK3=9Iu#) zkR^XMQ}tu@c9dFHNOaEQcN=|SsE@yDj&imAt+f2LM|#?C=bNCpDBQ)gGO5Q(&H9Z@ zCPF^8RE(7=zuQzy<<{&_r3=0lZuNyrO!rIy1SOf8(cUZ4ZX~S+dtI*Rs_5wq&-Ybv z{kHl{S*|zUs98~}InN_79pF43p9V&l+wQ@%2ab;_$B8#h-sz*-vX09-{lERt+)$rr z8HdG=t!u40>i5q(F)2mc1FI2c7j2?_s6RLKZ_{-24e!hd|B@wD8^UG|x+0XMo$K8f6n zlnG(r(}EX7Wp{$uCDZnvSLDb}~|&CeuNat@?R{YCJ8 zq*8w&8}q=hsETXkg=+Sj)cV+>F)3~7+@T&#l?fnG4WPrl9OJCC(9AW22*vT#+GBgd zl^mgHEysg-_pVyIjwUZ+N{oEn?rdz(+xm}T49oLCqN?QJHj=lLmH7NNx_Ij5NcLB$ zKvuqU%eCS>4TzCSP4UJ=!8%Zy)i2$ecD@8kvx&8zn%R7xv$Cc<>s{!u;vA+Bu)ynkwY(wC{2*r>WmcDjC*=!N`fhJ>Gsb(>?q?=K~KMY?RGY z?Anuz5Im#&>~F!Zfn#ChKIWf&7nkJcKy+VE(*Oi-;auSTb?q;~k2stk{Nxp4Wbsz7 ze`2QjQp@=vNJ6#1ES|3C@nV8hz1)|;FCgcfXp0A;^U<8p)w~!96)yAGr+Tp2RBf?> zhY5zqYs`sWr1hDB-Km9NldU-@R`jy<|Wiiuy__3Hp5WASelcEs%hV^oB(e-bT zk4Qz!lEL+0o;>h+Pho!Jl~_^1pXhbI^1J}6P4FVLp0`q*jXl&)JlkhL(&V^|xAJrW^LM(-bGt+NHxWd*-poSu1rv^Rby zIPk!3>*b^qnay0Qv@JfdYRHp}T4dNl98ojJRnPak`GYX)GqkY7)&ZJo!{+YPXBu0F zxs-Hwk!fq5D~Fk!-WxoNzw^`b7oBTu&kPc+_#0-c22?Fp>K?L+jb>SCiH$`V^IhcV zm2SUW+N-y9-mFO|+*+1fmI_!I`GAKVHPrS4Uwm?8<618Y+(9q)XxmEJ_6e7IYz=a9 z03U|Un@;;N6KoQvRTWUreN%nhV@7)?9|B^LW+JBl+ZTF^1LfNuFzp4&EC0U{yiY^a zX;BGj_Wwcf{wGnr8KNtbg#9wn`ux8UymG>ML!NxuiTeFF3&628y%Uc?;te*K%MD$hTM z{8r9>{EshGsP=jd09Z|)SI!snRX{5Lu6&C%020;i9tRHV)z!ks73tM~yRQN4L7Qy|01E%zqAl#V19D9!2(eF$04WDkEL2b5;H^$y+G zRo34AMeu5AWF~wlRKCAHoQ(Pv%o(?&tm!h6cK$0!(0@=>lY2Ow>35DLe04AYHOS|c znIRYcO~rTpah_CF!TbKA*D*yOAyP*W{lOv~(Vj7Rm+DL%7Kq-6?)d)GvBKNF8+t4C znz>qZ#ZGaSdTTw}Uu!g-?fW4n#LVN3Oz|Z+NTf+p{Y0zSalGemLjy7;-2$oO3J(=) z41KR|)u-di)-dZ0@=)#JTQ%hwDkU71P7)twh=k*Ei$7>U0AHxs`zkPBiLHv&G-mum zCG;BVgUZI}JX395)ltb0e31U^trM7u%Jz?ZCAo2;lj=G#s6(x|!9(?vhFXN}Cjh}K z_~j3LR%Pcw$+X@ksdm8Gyzq%=k0g+07o@QWos>ZN_4aod6Z^mxGtK0K2gw71~rtle$<&f z@g%Q0OCx+kHiBtNT&w1hm(7O$Z5*n^L#WD(cgswhdAi-Bx~4YO+87K*jeLDk$0BL_ z!?kW2llHSR6m9GHfdR8hdR+g<(9V^U0lSwboQB)l!4pYfqbG%Ht{d&1v${3C7m%+M-lp| zYdQnx=C!Iv6%Q{qWM~>D1sZLZv9Cg5QV0GEBDBN`RSpLspfizpDe)J!^?*JoF5?SmKf1SFUTspSBK=uvuek8csacz|tO%{ETrcO_nE3O>X=Xy*W<3*$Xrn<$VkSeFPI-Zq)e%#(D6IxNs)=J}K~d z@kE19#OGC)+fxw_iAi6wC6d>Pej*}%VnHPDEc^(Ld=>6`%MALx74cOU(UvdpqqXoi zI`z|)S1UIse;^-VpyQ*-;AL4CV4WDC!w^vB7@%-UtX$`7U*OMV5#ap9*`?0g<}}dj zG{7-YQ~yaILM|{!CoqUSz_&}w6+ap1#t?i-78J`sVmlf1z03cnPVm#NphR-j&!<6I z4pXRD)O-6j*;p1kvfZ2 z=Zac<68kzB#5WcD$s$(cdf2n1SflP(oi$%cSlpNEu^$zpv>D?!zC=qqU;Dfkrx+Y- zQW&rQGTzKG!8VE55SHM=7;UMLFy9vMB${aJe9hiD@#po#E5H%T80X%d5P6m;8kra( zswSqM815V`!k!d(mKdv>WR;YZUndV@iucXgdsSSC}%Klp@@m(m$o#c9zm0 znmV%v9(PXd^#h0FVX5dTfWMp88k>qr0*_9m^#-TyzW@!2ru(g>E$OE2GA1ADrkr%A zt|X32U;@AVmYwy2M64(4 zpga5Nd9o}Mu{1>v*e_e=Jm*<*jzoQqa zo@=}=uZ_yEPR{*ck|*~q&muW5>`vYX_B@@QEc^QWpNjb*Re3f{1%xgdzd;6gYF|Me5~&dkQ^d3gejy za>a5Bm@+b$An9Td7gUkqc@Yt;sJ@=)X$Fx%4qHYp#bZp+zT^_S!{U01A}kYh&81+mN3oroWSXfI zQx7;op={Mrc}N-X*WysG^qRgRS#RmBhO#bH z*#UPMLa~g7S@tHRj8&;T;amAyQ8_d29gBGR6Qyzno(e|&iq{ksY|NFEy%l%GOCRAk zDztx9a8Xvi(68jNuN2XL_ky5OhNn_WsS-f&e#og5hg8TlRICF|_dc`CKUD>()$ zg~Y297YoA&tKKz~>WbH>F_*pXtycY5ZR%RxtXN~)05uP-QEsa;(I>HUt+jD22YjK5 zIW@+(T6W4hiqKl;&|25tTKUClah^IZr8+b5n!wOH*~MCKeVCV09SB?<#RHRhlo6(1 zdm9Y%pRNJ-!rsWh(yd?$Ua(^Q`aDXRG@iP`>AGy5dXCxp(v7!od&zO!hyZa!>N#RO z6#ki+s2T!a#L3OzYG;|7AmGLa>P>?@h^=Y49m=K)9Q+v4NB}1yOhKGMnl4?N_i;@W z@Mb#*B1MTnQcIa69LDO>LM zwcIcJ6EqDZs;%L(Ekb=Q50zVximej7e}rdRjwoB*cv^v0t+ZR4XmP7O$)6`PZIUT1 zax*P&cxz=Y+Fssk7fNYU+>}+eZhs!ut_yD$wrAJCb&HoIc}Zt2Hgd2J;GEyneeKBi=LD|;zBn7!P}YZ z)*I>8Q!mlmaF3|ipjZ84XL(9*>`bpbRi8&#Zymh1udg>ftj~nx&ojZk?7r*$)_uNI z{h;E$-p#&=l%A&Iex+Cy5Ty>0ppmyEhw`WY zVs}rdhFG?SUVR+8Ycs@MGQ_Jg_}FH+o_Y8gV(=l}y_ z-WU=R-57$qjc}xnh$Duj5JM?mqpT_eZ*C0B7>+Ti48LOO6GMzKphqQdjNL97{ZKNf zWjM}v1F3r{^9eC3VKZ)|(rw~CXeBvrdpXWTJ8>>Cp=3koW;h`gKC$07z_&{TctQPb zCWCAyJ-k)y1F>TvFUA;M7lR8A0LO z=9`H{%w#H0cN$JNqo)QD(}if6es{nZDoNOlo}BKNL2seEZeUhfFz$Tlq!glY8w|3a zXe|}JiS8P`#GIB)JyxGQKx0DG>|Fr7qF zvzTz~O;+GPy3UiWS=Osr#`BuhQ709}-598d#dR`qFGuSJE% zMX{Mh%|`4^=)8eyi;>5YTH2BYbjgx`@q>qqnbFcW*2T|8&33lST8+!!K`ZYu%kMre zK2)D}U|ltVu9!BixJk));ICFf8dn`uS3#h~pJ`2W+k`$IM6t-#cvT|j#x+aUwJq_r zMAmgc9GbGdwzz>wK&}=xu7_N$=Gd-}gsvA;6IDUitEq{gM(cs9Lp4$xHEA1Q>W#LI zjkdt4&9)SI{2$y$(b#MNdYz(BxkPP=Z5du$b@ZFWg*HGozJueO}{w_H@WXbd(d zZ8xW(TkFu}MdY7{WrQo#+Z+7b)0pk2*4ulajkU&|1KS-pFySQiPAvcKj_uZk$8IWS zE5DcUENv&mYnOay=Lh93iSZtx@x}r5o&_r*1)B_4^Deve?tSU~2kCnp5u3LnYVO!= z(W~w6dhF8=|>+*cNLosMM@7$*p76Xj?hL&L|8)e^kWMwp)U3q1rTvC zM@G{7pYVsKb|>r9CxN!dR;6U_0Q%MV#1?-nz4O*h`ox9()T!xIz4XLQbLbo$OV1(co3#V;Fg9G98ZOK8!invITgT&3GPV>XK;6ScOP74aCdi?xs(0v^WAfP+*{RDP4!wWKZdI5e%JFpX=hJu zr;i;KPn&J`W7yAgfaiX)hdL+&+)T&v$oS&~!}AvOxd`)YHskpK`m_jm8nAjXiFnz_ zc-dljKFa`KWV}4Aq8?YEJg?rBk-a=hzj}f~w^twTJD{^r=*#$X?&`w@!>dEs_TM4t zzn@_n^c4DX3LPN5zQvw_`=2?R{~Qh%?bF>Ug@8^dAo4vfI{=e_$DZ<|kHD+9JOBR$ zxZkt<{g{j#eStr-r363d{;$k1RBlHyAKr;)Ta|JD-vZqDgQ96?{6({+EoIOoP7 z2p{9ek>)C9LAxcY>O+$CXA}ZL;3ox%SmPLlNf@Zj1)qN)R5y|YeVzJ3NL4#2NDK|r z|G}5!u5sS|wNJfTlm?#m4T#cD;X;hTz+FxpA#W=N#4s)(D}gpdTO$S&P)d!W&Tmag zvYj5$iL(pl)(CQ*BQVu}zpb?fp+hm4WT#NJr)8jT6q)3%@eQiR`N{icno$K^yyc}i z5#!}wXxlKSB%~3|CuEcj6yM7+2r?_pt3B636f=72Bvqa0Bq`KQ+Q70JlG}AE)mKlr zDzbLu@hX2Z+Nk~X3ox(2h-m>V>Vt9H3G;?^h^&g1@pX=K*5hU9^EQ6h2~y^h0kh;L z%5`-s2E)uhwLActvn!5|?oQf1;>ojGey7h)z23-%_+K%w0@-v~@GKiQBA{r2jang# zd2@PzU1zpGUaW!Fe`1Z^yXeP^ayM-!@JTg6;_Z&-415?P3D%QTi{=eIbjMV8liY3y zv{LO>ns~Frc<}ZzV;wC`^1HY>3=1#QILy8XX2Iao4kV(Z5*J9bd1SGai+Rx~3yXO} zOWrSHJ7o#n+4sbvuW?!iPQSkF%2b@XZ*J zJ>RU3!+YLr7Ib(%o+@{~Jl*bgz(QAK9q5Njl-F35-pB$vuQ3Zd5m};qu(xO*wf=p;p6N%1po=1iU;8#8%Ac`C3+-(X+p&+d+x{jghQVGt0SFMtT1$qt zYXtXnJ`wclN%xHpTQ5AycV9t)jkobY0TdRSkaywyuW|~1Q(I1iDx`i!sc96%aXhyO z#Yw&Hq!juQI2lges)Y{5=V5`!1XmS2KKmvF`JT#JEi&C*y&K{mEFUv;Jo&9D$fzzg4L+B!4*!6}BpCIQe<2|d6|J94OhDKn4j2;E^Sy{2xcc)WzDa_zcq*wR z&VUJ*YLxNdB6_yhkU^8O^hM$aaJ4s=BFsd>_Om=;xp~`J%~YW zJmI#Kg6A|u((}SLqU6rtS65QI?gx8V4!B1OZkljFib)&yr(h=Mkd0QI&VD*7;C0&{ z6-(C3Tp!u`JlXFF?irrmi?Stwn%pxEw;TdG4x1vj9kWIzor3W}$Y&mx>H zVo4~s3!wda43cj$LP;;nu4zMur zSWq58yRJw*K6>G4Sv1VYt?J;;)x#s2g$O|!XWcE#g=eNgS_$<@Z5BGh2dW3}>T74Y z>8uwYenZM3Ep=R$&aovL7c93;b#)f@HYw^WYO@Us0jG{R2Xo-S+4cbvE0@tjjhC45 zAWuyzZ$VMW!3X>nb9MB6CkCB40u*HU{8h(~x zHF~S)uu|Rc45}keH)nCz;fB=H4P6#U_Fv#%{}WiE!KM7)z>)^#Z_Dp*OnCl}Gnp_1 zH0U#*Kq_T)wjdtGchiwUn;c3D*ooi0U~NP-`4Y)&7AyMI ze*;VL+>fusm zNtt@R)#htk&IbDB7RSqn$zi98)m9+fBKUpdnMQXI4m@9LBje^k5DrgGru^HMCkUm5B6^hO(``VKRrEE8Z0&CU9IDT=HI%$W$!2gW!It_K1G z@IJfl#}}>`9ktDBx#xm~SHsHt@Ken1!T6b8yqJYKRw$%%e{4|c_tv6Ja80)CM8u4B z?N^wSvSMX~_Ls>bWU2ImH=_&l1S#aMCKIX43-v@Vl8|!3tJiPUyv#TDc4Syj1{YI# zA5@H@FwjJ|qTTuS3SzwUDEDIgIPSB8f=P>w4U}1^R}wVSf!V;Es=4ei;6l(&GSkA| zeuNcBG&3!C1@)_n+fC6yv3LDLYMgX8l-ev-0iw2DrW8r3m#~{BoSmy9M`)O*|G~^K zKe;%`u;6Dss!^d$DCkeo3{v85U7=y0Y35=xXsaRM9d)@=SVGEPQ}BK27;CuO--GjaI?cbp7zBELl z3b!*0uG6IJmEqF%3BE;!G;qEIZauA&!P)RqKgP+(y4+o56I)K$N%P^&!AZ**=+S2I zqg5!w&||a9MIkjjab@~<;fS*?Z0eCSaIH}3b#LOiTGco{d|A~5KVI6A!~Qqd zkcZ2On#h}K(^I^b>shna&EuxccDLKrO%jsx9`uiJ&w;I-+(P#Lf70h5!lg*{46ZlH zq}RnkIS;z0zBg`a#doZASR4gjtLWN2{m9Mg@fEUK@F}ke2HVAdS2~;#%_HnOy+@ZD zQ@C5qcws}~gJQ~f|9bj_3dO{)!lAGZ7`s$K-@oog5sUI=Y9&RoQfZ+!{cg!MqKDlO zT=&T}+8_JpM$TA4_m$$7y|}v$&gyP60ncH?RgEr^a()l-4ug~0R`we|7y|mP(i=fQ zXM7?^-~%eAadZp2q-ND22Z5~K3iK9|9a`PJ`tTkt6; ze_MX1Vv?_N|01Buu)wnUD(`zl(SKWhN2w$;GAAPfrJ_E9i)4ae&QQYZLJ`SgxkPID z^oN-Ok_hV8exRAZEx#%-1hfI9P{0FDl*9d^*dzw2PQETRmNb)EKLbYuIux7!+w!Xf zF0pW!Q#XCaTXVR0l6>2mNLOw{ zF0|r9iTAhVSFJ;x=6pf9dNQxn{dQQpZVIpT{@L6MSz@j1rJ;S(qT=I<`Wh1FUH*Y) zg)i^J8k)LF0djkV^W~yClJ;HCM+%d`Yr?gez`I^bq5a@fbv*|cw!ZK5*8UO0x~~TA z`adbX_GKnsA-M(iRC_Q+28C;pRN!^seE1Qa*sA&E5jenwWE&PgvPJ!Kc1U{c2hqom z+d{JQARQ$71UC$WAJE2Oa;yrXoL+H|AW@Lv002wv({7JeMPQbBvKfdo# zli5RL#3PSC5sXEjj_hH`5Bn-al^FcH#Tm`GZwE!9;C~gtR#riNKuT)n`GJL?=LpYk1URPeBcBr&?3yvJSE)Oc3QEPD>Pmp3M4jDaa zI+%Mq5b0QAwQQiv`nbSBNB^~c)L0uwZ9cQVzH#)yT$z7yaZiY)aohaZriC+qL8_tE z?a0h@;9>c$-n404^3=0nafR8^sU10T%Gu6s4^dAjL?l;FhOV#zgi}CwlpW z)u%P~S$0@pDVLH+y!*T1Y9z$dA|sY-oveaox}bccfQ)30U7G_ObbOVO@@anv@&IwL zu=i{sJ`y8qSzw)XC~+e`($jV;9`?L8$>Bb+#dBC>9=o;r_VGY=z-@)u!mi<#=oshC z)7q!D+k!=slQ1LK^-(R`UK*YYZ%eLK<`*X*yytS_Kx^9mi`{To`ff5W8{ta&)kKEp zXfA8(zIMgMj1?(nI(GA+iPiR8#`8%lUemF9+XHx)=dcUA>68ZhX^YeSu9x*C@2@Wu z_7@3wIks7SI;?PiTw{2F&ThK9yPd8)vMTxBakhINpEf;#8+aZrF+I+EGB$QIyh6cb zp0~moPcY__dDiRL$O}%yW9OUqX@bqJlJ|*|H)A5KGEMJV*!@=7;~kq1UcVRCoDTq& z4;J`rB-oJ7dEx=RKhN2dQzDU|_!|j%Q$CFJm|~S=)1J*O9}MT z5cU%=_GZQR=M!<{ne&4>`HKMkt6BWS_xu%5{A32T<176UQT*YI0+cDW|}px`9@Fqt#uCK0uW!O%2HxO(T%Zj`X9VDepfQJZlvo=QNUh;qxE+Q3~JuE#8!SVdp4w zlrVHrGYl#@coP6Zk@Z#~KtnOw98c|IlHV5-Ijo}SAeG1hk?79^CRP&~1gcSp^U?a0 z;X93rAEBx-p?R^N2V=iD#JoWTyi*OLO;Y7y4`B?6DI1L52KunitDw8Yp;5-0yr;2yU8RbH_5_fU(U@Wsgpe%Rv!ElH|23QK6pO`0RQEiQp=P045TiF-xq21P02JFzuX8U#rh z+D$-*%81MRScAUwPwYvqs_AzG8Jz^Lz%ELKLz#?o!3fP+%kyw6RN*hcOnlW0ZRZTr z!K|U+^a7ErZdG&ffGn~Pnf!=30(n`KYMJj`GC!ha(^4mlG{tiY=Lj0)ybT3XQzLU1 zEAbuV;ECq4qGg;@CUYdi$tUMV?q`gm>Za{SNt@##=PMil zkkRs61M~7xBbMVM3=i`5_Vc%dvfGe@9Ey?N73X^&0G!nnd)a~157Eig<253p3N;NZ24CE=J-i@uvl^7jI*4ig z30fI{a|p*!gFQ`sNJ^t4O`$W9itA$ST4STgW05|3p|4w_ws`HAxds^a>ABGO#DSc& zSe~LD9(>pYYDW6z)T-*1CgAaz=w%i&{X;RJ?8iUS$P1xGikk@&h()G2~hh(JL>|+-_ zS2xv?A>L6ddP&YFj2=eXD6Q{3v`fuLG~Mh^I#QiIZ_SHXxSA`(YwQ|&xR-hliMnOD zy4Wz>l!o>BTf6OLdSo#=e=q5@wsfnT_lhp{{SfL6Q*Vc}?lmFqlb7fh8tOIFDAL7f zwUp3NHt$#E8n9jJcO!JyCLS;=9gur+moe#c)@TzV9t?$Y^&{Xl#SSA{AN5|)3?eVt z^S3xVEp>%S47sUq30itsdg zPyA<-IB8pA{OJhswsZ{TY`nT@JY8&J@DS$0V`Vvjl6*4Y^DS$M-?%;M>&h`E@yxzthcRl}4w-JIX?tfGXzlf`6885n78 zo*8*Tif%z#a{k$1UVPNNKyxM~b)iIZE}IoW6K?K|8kKBhK6Z4m*?6v#1l5IPuy=VW zd>IT(oA)VOtiqgL-(LtCU7BfI%srm#fIcq^(xFPwF5w(4*;*`l8q8BU4y>ik2UITe zjxL}FFLTkYM8mC$SS-&IE+bfsY0FH8nXkyut)3_?_U$e{H!!R=#SHw)Wh%26|rmh6P58+9;=; zF!1flbo0n}2 zsU2?1-4??&HI6Bl@?Djcc|)E_KWO(!(Z8 z^;)ch?()6O(Y7tP?Q!c(Z(O+w$ZHcmixcIU3X0lR7d>KNurD-QPaBN}t`4+_(2Uy=zbZU4H83 zxq+NHhn#T+M|LJ7de&=s7C&}Y8*&_#dNyitjz2z&&T!7Tf9A4s`my7j7`q9+<5WB9 zoDy(`!f^4WB8-%5_v7hlE_CIhU*!Co*EyBdIj!`i-~GjJtWz#P1o`P1d&LE1$K`J_ zAdmJoBiXqq!&T7ttAof(LD(-~=v8vl)$#Jx53g$#t1P*S9YyUcE$B6R@pUWDO`O(^ zAvC%>edko_TBzdEqC@SH^gu&<%V9k181wd_{Dx}$#tpm77`kjLedEWV=0tYu4LJAB zxbs)LgL>SBw!xuV-2<@i86K8BrB5PG?~(zk{6{AU()S4&=SgG_Jr6g!+NT*6XT{hl zF{_CAUT_6gk4j{ZuQS%tptlv+kIk!Rxx9OJ8RsxBbrIRqPtZdf-~e?MDI((ulwq;? zaxvlcJZ|+g&+t4At*B33eQ=9>-q5~YT770=ehA=wIUu{+$!HkCeqqgcJ_I}*V>iiW zyj)~J@3mj9SM5%{pstoMC*#ZW=>=5!>Y)N^zY5)lv7fLwZ52unh3fJ`AEa-eGghD( zsP37&_5ZV9paS{;c!C|(I{uW@iR?-Wy#zdNjzga_BHhoRu+e*lmnYb%?x251VV3|r z9{y+48VZ{L&kOalhM}kb&VhF9Tz0(7{;vtH?Jpa=D6_EbpPhfNeg>^?e>ns^|2^#> z^6fY>G~)y|=ih0(C>GGpzn9OHLUHf>=bk(-4l7>#y#GDG-5Sxo6B){TcJSY0{yDXp zH6m<--Q~#NYiu8OylnilAI?T_?H7+4#s{uB!K^NN3nX^`I~hF~`of~w3zXdyiX`Fo zL?Dpc5{V&~OczL!+ZIcp(`;8@-&*UGKry3uiiz5gN`FJwjXj9|B5B?w3*->C{!!9qzk6}t^Q@`U_oq&`ZOQnun4sH53mVnk3eVM z#cO`$y73=iGwf9lW@%pKa!@dlHY|MoIo03~H4epv!I*|qd6F3{_xQS7sj)6sM>Tt?buJK@h@Y$~d*5j`SOJCcpYBAZ5 zoc$KQ2tm`eo{tW7s#0#7v|ij7MwWvDy%JwMUs4v)XG5yHCk`uq!B3-|7CoZ5j#b`a z`G4oDdx5Xydd1)_!-vV*3gS7p9R~cu68_3a(I`cX#g8FKTP2A1TdcAP4Hf-dkjUz5 z2;b3be}Evd7wu%vBF{)}*QK|>4^fg=BhnpTGg=w@KNTQU2~$?s+YFK18&3(-cEm}G zd?xrx^CozNi8hM6Q(vBsF5{qDk{uHo_pXn6y!YoQS6gb$_|}TMv|!QQRn5douSVq{ z*W^r%?9W*yrl}J+O*$!2hBT?5d=~O4Ss~tK9C=x2s;|5}e4VX=A~tz2NPg(bep33A zW*uaXQgBdC9hSaM%Xv8{3Jv{=XI9VxfH9O+5b3Z~jTkPk!8*8L97#PR4;J-4;AtYX8m1EV*qpYwKF1B}?r!_)S-+;-CTdPKZi^+u)uuD$=k z#-{6!r_`t$NGA13FXUT3Oh5V;*bFh5`>P*CV%LvmhpcbLNaw$TRsR~g7{qJyxS){e z=exkFe@XdJtfcGejWW8Rn72k*K{qbm*%3kePlK1m70%6s^1ewhy$i?j(W@Uf< zqpV-=ILs>tKBSn}jJN;tt({eBv8Z3wQU^3{|E>OIhkFI9{vB(v!WKH?wC)tee?sUM z|6BcwYm{X(pzh3dfk%<3i!{tIz-2dLu?9wb{>ayDw*lu2%SCH;|u-s32($vtA z>37m`3tN@J`i9H;0xINnb~S56Y;(Jqn0nE>o!AiwI&I+fdb-7azMO)EuLlT?&C_jT z-h6Byk0YUP0uUimj`G1ICtum<))Xf`edt{~i)#3dB{k|d39pM%!OHzE;k(B;@`xOJ>y|niSlII(k8wx=y(BF z+5JZNy#G$+7s8DVK!|puBBt>t#fPb=pwbOw+z>$_7CC=_zdl|Un<%bQbvV7mCV_zn zKl2!Nq}7Zrr5hWFY$Mtm;pxlUR|JE<-@S{j@Xy1^1B&D@jz`z`Zqqry!dF*Wx47D` z1OcL~(4Xnju}K<#zLCrdN&Cu0j(^P~xdaX1X6je2}#<^)kkNvHy zxHij-D>h<2$1J-@Dog=@*`JW62mT*uu=sol1n}DIdbC(9N$# zkoT@q$$T^UZ%0=I7VpO-+GTPs5lp#{QRSjfYI2{R3K~?JXMEo=y-Bn-mCqvtCyp^? zq4!Zkh?~JFVlyQiWyXvy$&>n)Go{21slwm~S(BT}LSbeq8Uo-b3PoLtM4y?sCfYP` z3R;`5(MP4?WGc%PiJQ**A1j?Z3#3qlJ6kgzs0`wXE|y87My_#HEaAbf+{2(nLnKn_ zzG3n(5~NexZ&HH%fW*y=eAC!|pgfy9cM$fkhhAqN@H4=c+iLVx$2V1w z6v1VLjW$EBGp75j6dD#a+b?cfI&dqjhsBpRidpMMB`n=m)y0rFS&A&Wb&sfQEMH?$hD0Dd)rLRvk31=ym5{+-^wRs zp_)iA(_1z-BBJyoJW)cKrQyC^x;#_<+D(&VJPE|PW0THVV!(4dKi+mm9rYuYi{o3@T$S}*=WP{R9 z;g>@M$!U7ko{1KG@^B_aWeB>(9zuKBUW6^7z7z%pLhU#|flIr&gTZF7eJl+se(l`zpyB0XJg z96`-%$rLuLgI)qY{{KL!4>g68Z$3v+YwG$IP3OyK3MhVJMp7(Ls_Adcs-saRR`2j7 zpU=->LiCjYfI!XD0Nv~Fm$!u3mzTG+(3N2ClKe0QY!w)2bjrK zG+m;pntTZ7rbo{M;sq@Y%?^!zHD=#N+87e3!+XM@0P`kygYmTK9BnH` zyT_^g%|xy;k!|ox&o%ZT$I~Z1maiD6eoO6enV5BkXKQc-53?3V+)3>AB#KCD%KVOrKw9 zL7Bd&9EG@cB65Yf0n=5@_28w%u~OC^tRycZ?_^*>8~7 zlB+TIb}WCtX5F%uXEa{2)($|-@^_coE3lWaq%72wk-OIo4%SoE3sKeDF;3Lxqb>r* z^|S4SGpC2_><`gz6T?*HUw6r2f&AI(L3!Hrv4hm>JTR_BtC%lGc}&|%6R>{*QS-h#M< zpDiahr8cb>wi;G#_Z;HI?N13$r$cbCg$~0=9T;};Xskk{J&DWacD?V}YcIp{-RW-n z^#43v_WwpdW*p=V47X3i6ce{d7hj#Q2RUSi@^#P{d8 z9x<*qjY}+GRo+C-OhZo878c9nvW2X}@WOQ0Gm6@hcVB`kVw!*dQGd@e7v52>Hvb_d zjnUMopp0|Cyk+09*4l{lcB%L0vr#6sUwcEGXDpWUe*PbeyQ|=D<<3WQ(Ajs8qX{$+^IgW$DO70TOpCoNX%pJO&YSDF{ffA zjx(RPsUH#3@ObZWBmFXxL_VDM&_)xPVw=vKy?xg% z5SV*94YC3Yda^!n0z2-#&;Hi@qJ*&h!byJ~2r@oQhVf(Qy!CPv_(}0r3I(PRpEque6+Dk%4F7{m=S+?vgsto}^7YLl${;Vy zDrOt=y=Q~GCbvhe_#}aS>oeKyAivZ@b!-Mk9;NVo zm0t42FI0`p9|ZTk$b7b;%eG|X48}vMdbZ+k2Vph8L!*|i|75&ue`|hCFX7+bd2`GT zjs5S8w;TtFtn(YjO%hbv^W<;FTlfoEY{C}?r9!V>VZ1-^`&;viiRg>{RctckbyoKK zwn9M$Sj{itryPRkLLuJ&WW3}azG4-|k~q3GnExl^Es}Bq!JyQCYJUHl@sbq3RXdQg z6a4tUO|GzvS0+P;e`funo#nkmi3)uCWVB_n)N7 zZ*vZ{kj3Y^32!P@G>b9MDOGy^F}a%SKZ0g1;clvtO#Z3)g_&GS;=nre6$SI-|Cn4Y zr1)vLNA&7zi~pKjIp;x8j?f?FZCcp6;{P$Z8kCWoCaPDxhM8O?%asB+%NyS%Hh?0^ z?F(AuceG*~=MZV^i-wm^q?D`b`z(+dS~O2#zf{`lEOV-dwKNj`X1u3H;77WImMZ0n*id3cQ{o>3`^=&6wWTk%rNaynXTqn+0WgyO?BC?+% z;LS>9uyCpTnc;cK3npWT@`xT#38+DKbEcs#u}Qdk)tB(QD$=P`kLXdQi>b%IyEQ~Y3uIizWC{~dQfhxI?%>lor1GzNCr|3>{!(O>~`m%OInj0 zU9tu7yoV+TNL?oHrmp=SJT3#Z_ z-~jwJxsHPl1Xel5Td?Z&Md|jnZ=PRRn$5Ze~gdi)JH^^ zo4PF)j*L0h4n!PSrEoTi=a1B*e>!ojXj$Bibdv6oJaO$&U%Bfqsw3Jyakx!cz8!1m zG!lcoe&Ae#mu9P~8nyI-wHKlS*tBVIR$O_X=1~&a+HWl>>(yn zPO$@Nhx+67EttQY+Am2?oC@q#4yBxbJ#z2)cs;CLuiW-SxzEM4-9M*$+=0H3UT_1N z4QNmA#&}6DS&hCE2x$|@NW5Id-MX*7!gi%AX~W1p{jtej;R=!^##p4Rm>g|wndxW<1QxRFm&D1R0<-jl3-N%*l$#G9;SOfOs zhF8YTIvzB1h}ZR$Nb5Rq!21DrW$FTl?0WXJ^=X&E`X;vP@m|;tO$Y9Az>7#(^+wtA zm9zW4k+*uF_Y$5PI-B?FJtxFH@7;W@w<;bxtUf_bKKOSQFUa1ztll5-eP>vFzv6pi z2K)X(@)-^CB6aqq-?OW!^^u$PAsuvLQt=Z|_F|j!ARlz$-t!Yj_Iuap7c}cD1k@Ly z^cNGc6P)ue&i9Fr_LepFQ7AO01_sDC2536@#YTG{Ck7y(1a?CLez2k5-v$`(87txY zN9qNltp!?%7@HRQJ30rseF$nU@HT7=a;J1ALh+Xo@%hOXETbIE8XSNOJqwOv^YJYV zHr)yGy7LMKh71__#sxcs--RTqxJR>v=HB_FQJR(_h9(ZWB+rE!IfnuvN=BKXwkm;n zuu60hrQ%--EkNZqN`(%5O&J-bu08o4HkCdUg(8tKqQTIy;NaL`wIP%+XF=7P!En*w zum${x0*CM~ED^u9Bh2c<=Ym7V_rjO(oz{SA8!ATIlnw@&5f{Knz1hgmDv|oeVdag0 z3K5kXpfWUA{?)$bp@<@Uk_IFg@IVQOR}T8D6g5*AjwTwoI|#VCQ+-fMWvt&Yit$;2FwFYw&RPz!1in49xhN7&W)5HITtTEUNzP)FNv)$ zi8mm*HZK{6B9S5_4E;MmGbvFvvF!7Zc)VmlMqw6oKj(Y1Jg`ZgRZZSHDNZmn=c{8jXK}WXP6B;1%5M$@{w83s zV%~IoZc%*NhlSktsF^%y`8Di$?990=d3myRF~({tX08ergbEU&*;0ggx?%+kYASC{ zqgdk$@J%xKigTU`3bjll_0$UfG^bmLrv4Vq+JQ2|mL?ZUn-)4Ar0Sy;IO2wT3>Bnb z=er{nNm3UDxE7ijyo!p_`ik1F3vEGhnH)v&gpsNN#f2c%;svC~r2HUo9#?X9 zdHahL(&ah zuUi!*Q7Q3o#hFX(HdW2YR!V=T0gP6hlN_kyqW~Hd{r8Et;0MW zqCBO=igdyH;J%uH?HZHe9J7`zJ+~U6$7&IpI=;sS#jt|jz3MyihN$fXd-aBPLV!1V zqd-`VKTWEUnbzl$MoQO)IO;~};Rac=CaTb;?1S`;&^j4T!;r&<%*FbgFg0s8mB2^! zg2SfpuqMD^eHyqq@VXhRCApdtm`RhDEZ&@ouG2@*lK$9I*V1hMP#)Xj-ZqSclG5B| zrXm>9GQ8O2KvX!G($Lu45HPGK3N>j>XlcWwXB;GEhm{UKj+L%&cUDUFF z-8w1WGQAk_HbwDDTz#XY@u)=^a##=z?yxcGFn`nO%G?>I*11w24OMSI!-!frR6#P& z{u0y~L6nD9(!6fk{(;!`ZE8JExH1P#^&^eV7mQk>qg48lN@K++4)r*Op-wJ`u7|o9 zn$%kI)Ht_rtRTos;92o!uAETUg4uIlEhYe z)4@G8h+_+_!)@V%;G9Rnti*ii+~r2D0brqt2qqp|0wu~%uj+9R!M35{>r@7lk#3FPg$|f6GXVjJ_h3LRY9y1tG6R(}X7{?RR9uS%32`z4Lu?9Gepw}sA zS{-v*(*j1P&N5-Pq6$M2DP~Pbzz(C3(j&;L{#iq}VY@Q0nZ>L#=EPg0xd@>KuLy`n z+nl`QTm;&z&A0gw$ys=v`S4{3Ak8C{d*1tb-d7Tw@Po_Z^DG=rCGJnIptd{nvyIvx6N8DE_8T6Ky*trB<^({OV|;xX5a$>hbTDo1;25rYbcH)_Y%^%3fMj`b zS+mt+)%kX5B4W8oa^-?0?hbSHoMg3SWOdpi_r4?seQXVZbm2q$3cS&Z57+uW_v&+5 z+Oj6#wboRv#yXzVDze4edH%X@!K(4{+I-s*!OD^<5+d=+`g+@NRoTXF|AyVoGQ?tI z{&{`odQ~uft%7~yjphbubhBkN>^t%n4%TLuKm9tzx?A+#u301FGm<=~gcy`%Wc09FKf6{x{NUgh*Zbm*^ z7(u0$O-@h(R<<0mT>Ly2BP{m}ULd8Ko2*jv5%eo~CtJZ%3%V~eu{;Mn&s(5HS017R z(-+v|!cO{$1rJYTar#p3*uf7T2ot@5Yx}m7=AqZi!OVxlc(%i+wZnSL+4ype5Kp%j zo{j#o{Z1Z>Zp-H0m!pC7qa=_0<`WdX&g13u{S?dNE0SXn%dx%2@dnRsx#fYx$kEEn z@tGykh1L|d1rjWG2BbSjM{eHooZNe=ID1Z?dv2DjoW5ADhVq=TTAoox9&;0I=r$ap z@t$65onmBcKuKrs!;x^L_mED{f=WsjNDW+9&T*yBZ&nTmR`#~i&38_gh_O-6p`@3T zUdwpc7a!^OD70ap&k-jsx^FIkFDC*W=W!88x#cG`fJ?#j!>_!ToYLp(?H5xKXD3+K zKdi2pGOqi}ue46#Bmi9;fa`DCmps^4krX|dQa9>WH=@$lx>h?<0DbcD8?KBC48Tnb z#nqzat%cR4OU8N1@vRf!mYVnap#0XXzVFZKO(gGS_Sua%_RN|%OyhdJUw#*d4Fs&- zpOM~Yl05)VcWpZEO-$~&POq~8clcHhpOsM4$sS8O9%fG-DgX}_ybq-rcl8;WRpU1` z6_2^AkAzCM0bciAP`H+g``(JQj@A1ih9~6Jr?-Yr&C>cqY8H}b2LQ|B=q|3#Ze*_RJ z)ArRl9Iy1H;F&Czd*pyfN|euZx&tuPw;tTF7!e1VH78i@r-k?_36Bj zNYw0wN0JOIKXBSynL^6Q6Itla7>tU_Emr$IKHQ8*GrAT0P9wCn+~|wIS++>Nu^k^s z;|-$!0aHuNcpyuYus=ASEEPQVkv2X$U-UaE3rlmms~m4Hci=rQmyBMsrt}PCK&|($ zBzeKglDw~wXT;l+;llTLUgPP@l=ME-V9_HinpN_l12#-~F!$kQy3lzMCi5^peSO=t z&L_Yq7%#L`Nrl6$z$iq(>iV6Ji2TS}h{S0mxNol1En4`K6ZGm_=nFK(8sM*l0uX*SL|I{O4f;^lTP^;oP9mrGYuneKyx&p90K-3KiBCtqTPeg!vS*pa^sa8e z8f`apT&Krg&SrkfEV@fz^Zh~;v}fY+lJ}DpepIj;5%^{hF(E{DOgGI>wSC1b!SJjg zFUm3vp{rADl@i32SJKQ=q*M8$=m1f3qB~U55FCwG);+vXRQ%&phTRW~ z31AvH2Ll$htzUUJa~i_&EQ>{{We^qPI>bbB%Q8VnZi61dhCG`Vx~IO#d`CznK>F zq24$gAmpl?M`YM+qLv}G9a~&czi?2PXBlrA^k;|Az`Ke<-K??)0y!*IR8@~Jo7}10 ztKRh_IuQjMa-Oyx))P%e?^>pqw?AUNhsC8lDQCJ_aINQc$ja_gJ=jj1=YwgETy}#D z+IAN`th=ca{qO~;R|>zd+lD8_jWn%hv+PDgCp~}9yjvx zxLuU~jizjN7jKu9ONaL$n-{L(s}*1@fRZfgb(&i*BdO#-)KS; zzPP<>h*XWgu^cD-r0`$E=v2OUkrV#p0_&)XjeIzKT>%XKx)=s*{D0M`jP8Btc6;3< zd|5%f{)o4RM%k4zzdj2I=)H@d3nBk886v&qO`3}@NUby(`tht2r4rajXF3`7mF+ib zH=EFRSW7Lf@hd_wP>7|yGvcTBAL4B`VWOGINT=Q}Uz{_Ac}}VT5pen+5mgcR{^p|+ z-EWgK2L*prM+4lq-hX8m6_e|VN$iE{Q*dVu@!Lv+z(K! zo{F#VH=vz81F1r$5*m69=p91Pw92y*+hNM<04f2!5AxQBZ^z!oH}z7;!G)&nbt0w{ zNSaz^hRtqm;MEmLz6VyN7+viU_T38+%w(qSGQnV*CMn*X$w)u*Z)7;A<1Sd$>9_A+ ze#3P4)~#OPmnoTcA9QH zr(eMEN8-FhjMQ|leCuZx#n4e}U%T*4e=7EUHhK2u>9q5wKT^j8A_5zB=?@48pAk7` zd@ZL61u+fe@Jz*mg=*ua;td3$c^rz7mbHn>eZ`D*AnwnR3L)<(sotldN}9yfB^ycZ zi#6;|CDbeCGmzwPY=fkl7v2|~>WS`m;K~p|bL+%Vu>l@PV{NXvEknyvsVSsM`SQrH+0yf+%;=?);DDM1)N$1aBBBM5*xAlPCWqP^Fuev??w=< z4N_9(0lqA_sS)({xZ%(>n71}Jm#$2uDopdFy1vE0-hzl3V{tD1Hf;}V;tFG3myy5? z7lMo)MCuwJPL-QlFko!<$nY+Ntt&OHT-kwky-Etd47dF|UdR1%f-SIB_~v`Cpu74_ z0idVwN^qKqqZ#4+0LzV^6PFb!FVRf)&Q9$pr50vRbNTF8y{qQ2vM;tPq~?aj z8r#E+<_~+kE{jt|N9u`APSf&fKU?e1bn{92mg)3**4p#5UChMP)&GaDw+w1)Vc4!I z?o^;S)NyE`EiT2qKyhs;EiT2~-Q9w_1$Rh-JHg#GKyZfu`Ov4O`fL7UgWq0=CL9(A^OB;x61hu*eB=-y~u279%<@z3n#EPzsMDz`c01q<4YGunyWu^PqGJbO>DajU&%A?xeRR@Auj6x<+6x8C z0)CG}2ZNi*3)71v`p?~N*3LUG5yzEDLdS*%?CWghuG8kaCuY{}3rmqd<~s!s8rQ2*l1BKKIie{gEcblVTQaygBmKcC?cy0q}R0~I%__cM6RPgyk|I*oiAcA}q7 z8);egp?5Dwh1Fn4zP%3%u9qAu`@_a}XTO9I4IALo>Zymz10j=@FkyHHz0f&7sGVQv zimMGnfXfBJa{~~*1qkfd2&lCb3vUP>+sHOy24|bPR@XIl9GvS-H#ize(J;XsO&! zRu@xHae)jGhtH4S|0jw2N{=t7_*=e0worQNYSF9G>~gc=fA-MdQF~~)`m(ti<7Xv$ z@Jir90}(^dL0{EjPQ<&jy`@2o%^}Dq42(+|&7!r=;Ouw$Lp*ywN+Ms&C5G2mqxR5T z=HQ|F8skP1*gUO5!^hnak8dQ7s68~iBf_soU7p(ZV4>blqb@w5;iwYeheLnS#Iv(u z8;A4QqxohDR+5WIXV*J6hkyPtvJCa$JUm+NBtX)C1-IT*_e{L@GH(XiU5##(zME@) za6rt~IaRy{2wx+cv2d5ITd<^G*udTfXSfoUH>8<72E)?aN!1zR0t@o!Q&OKhsTsT$f9x-8^rqkH7u>el!0} zWglzUE(|@zgcaE);xk1TN`{uGX@7aYo0OoBWJYZ|o;Mc*gU|yRi^4efSb~bp=CVt= zo|{{g_JNsA%W4d@OH&$pl36NR%BPEpXRu2xt@~}^dsQor)Q64hiE@Wc+XV==nqfYI zC&1&_KzQp!wU%X3_CtwvZqy|~IRuH#T3NmKyo|l&An>xhz*rJ)1DcdvWGP0d$iuo9 za!RWjXkbkzz1Ts7r@gog;ij#OxiUusk5^c#9LS6Tsy%2V7H7k+U}a~}wL}ZfS|+cL zPr^yamre(7){RcaXE_zlCIqAet0z@6;b$WRg=H6`tWF-a(9so?n&>K;k`+J0{v^uKZ78LR{!mTiy5~w!IN1D zwTyZiW8=u1?Nldd{aj#+;NgzVGh^3vpAISRG3H*_wLXayJAYk#T)Ou}22AK|t@#Ry zI8yQA_c`u*y}U}-$53&1I>Zp=b4DS~fvOH@Sl?gF8duz3E;=0vUOw?h2}U-PtRHT6 z3M(FN_ZyBL5XTTm$jw=jf$+^0O!xt3{fyodi|V!B?xdfOD8>IRaK>c#-vrKm?ZmF{ z{QwjhxM79CPg0Ma=~4Jw<9`X9KU_b0G+${<$h=DE)YnOO`&Zz+PK*@O6n&an>C8y_ zUx71I87g%<`+`>VBvf-K=XnF8*ekk|FbUEhPn-Tt;r(78QLa_f4_`UMY_ z#ElE@5ZHPf)j#yx@I%TgQt^)rFK`X{Py*-ummdr9M9|p(5jYb*Vp6b5tU-sB6|i=r zSb6#Tl->P;kC0uc>wJx`N_e5rSU>WsLy2+X6=9JGy=JEeRea_-O_3~ z2|vO7NGR$SrKiJ1Jk(}mk$cZ_sEACtnD)lP4o|s2q{Xu7{mMbEqlm`Rq^>i0Ny{Xdg zyL~fYvlp0D6y|?6`DS~pswx95S-!7nKknhXtX7g|G0bn8>wI@v>D*mr!azAUE;|j3 zkARzKAmpJa4{@c3rQwGG)E*lBNp_hmbR)~@OB zMZ(4_Fg0Ph`^KQbC>6uU{q72HvZ9rHD(B{zd=6_2fmQ6%D#&9Y>p!C3yf65!J1`|G z0-p@6J$7#ZQxKn^6S%KF4HIeC0onvmvaVn5HFUl|JPsmXT&EJA?RxpR-N#tqF}}`h z&nwSA;X(U9NHM0tBE(hE4nvzX^gO+i&jUgqr5U|_b~7L#WSj7z)rf}srb{5>G_=8e zjoqNBU+ePEqiFfJ^^rPTCfb3vhfS<1}2zo9yEx(KUxg5*#{FwQ6$@GeIevFs+!syfRo^TRX zO(AhznSzMvL}| zZkIYY7T{AAHGH7Wz)#%X<5<(eW@($`hBc|!P}-fYVF^GiEf>^ew;y=h)GRb~330bZ zrCXVyc(Ad<6?j-+6(z8+Uqh5O)R0rl(JT~JO7^9>I zb}`T$(NXIT;UGzP&B>uBiC#2g%*F?OIETKb5Z$>C^lXC+#0LP>JIG{Om%$M|ySOXB z@(gzKPbdAeZ0;o(MBR0C4RlhFOT9;))co_U)dfXS7M$hyc0$n89_LO6{=tEJtkm-` zPPpwrM#`JdPQoS~elKS3Mi|XNF#_p;us+E}VyRhhF!!mr*Ck`;9ZLhX&R+b3wGT4fGzHK}S2(Kt60`dIl^hdEB1a-(SHzk6@nl z3|{RpuM2W-{A90_AWz(6v;+~`A) z;QTz}v}1IcV@;r|^BP>HD5h=}D0<3y;q;O~1waA|`%caRcar{k4nyFMj*!JNs!ADf9CL2nAzEH~Q-_dWlj5 z?yLHf6$R*M27K=ed_orR%Q@(Ga*%OypnGtjd}E+JuA(Dukbh&4!E8_vZm>_V0%K87 zBvLc@2o@CE=M~x*42^e=P7e7P9PIBDY-bYkC?F(?C)9>9C>}SIuP7wXBrt6!L|-$c z$V5J;C^X+Bw2~sM?PFMNQBb+`BhU_ZLvR>4FRXk& z%0e5%;%388#^zGhh}!G0zU1Kf*}&4G(DdZ+JL5=&lnFNWo}~ z3+JdylPD7J$m8J1J;o@2c+@pdH2-Qu`E?XpiVV6;^i^LJaY`g!e=v7jG`~p9wMq0n z<0D+km>5iq=P6N`l$f{I(IibVG&j=F>lkvB%=spWVNRY7FP8HLgG?*#l}y|hq)6=B zo7f@JxX(9n^dT{@>xg&#aRHlgTzK&!bFpu<;w9&#q>JOf^v8>7B`Ds+yOGB6FeRwS zBoMnKXv#<_7sp~Sp#r#%j9n7HQzqKxCFnLK*z6|sCnuWsC)#{WGzy913rTcONu)AO zs^3iHzDfMdl;kOs=-L_DR8GBrXgA^#>Bzy#0|2b9WS*2`cXCj%;* z0Ie<(+FF2iO3XGq08}fr$0hCSCZJ6#eQ-B*BqhCyDIKthF>{kXU7S9TEKXUZl%>PV zSd~dj*-aYL%8=Vk2Zm%!&!z3nC7BlEZ0=^@^Jbn>re3%t?-ysLU}oO;XRfW)8i;<^h zzoE)t9LUB^MP~_(-jhnqP^?t3OaUmp4BBd&qmAkrMHP)rfC9A4Qx z*UDV!Jy9X%Ou6GMPJEQTIrrP1lk@H0^+NJ({ zB{U*=vG}DF_9a<-1!YuafPqq*^Wyr{lE(SMu2e~IYDpGz8TDw%i?&A<&1JfnnKgT5 zwavi()Y9eD(kU~b_GB3(6*y{EG`0s^V=mX+#F)D+@4YQwx&<~hm+n)2+0-tNbVbRW zffLQ;SGVG`R2B2C`S-4sxCE7t7Q}B*w+q}>MpBiC?N#8GmJ_r{9LiQ6<5!U_R9(1M zZSWO58N__8Q~gw~iczNupP*XwVPlR-V5` zA5q5O~MJsW1NDSx#tyxy4r9VKvP@vnDisc=HnJGV5r14KO$ z4KCD;NbSZi_KgmJMqlbCzrjWk@dhs)tWZGpYmvtI!7q`3dVYeYoWZ8_(l43RRVqqY z#VySxVOS}E>O7rhkZTh#tSQ#5C4{=A+Wbo*b-m_ytoqWX4wlB|mKIX`<~l$tkfpg% z4&7R(wTIj14hC{&-vRfby_w6ZBK_F zjH3{OMbSt5ZJ4d?*zRql@?caI7iY4Kq_sU7(f&-g{UvKhKy>?C-L|$C2xoW)S8KB7yJXTj#fQ4^?>gx*yOrG` zssi1LcM#3A?rHw6Z)FfYR)_&%k5*;3oNf=yt>?Qyk0C4Aq6}n})@?R~{!yTJOs7|w zu-BOt?B$Nmn$_E*)61KN73|*Yg0$$?aPNy80(-Ld`GoiSx3(DH_31?SkO}mw-l6*q z_0e_pM$+`h$@gb1e$fo?4=(FZ*Bv-^8^|af$Yt#>*BvY%94ufN3>xaJ-|x@R?XM>2 zZf?Z_Euw=6hw`c0I$H-qEQY|kLnGls>41T1!eOZHz_@(Vz|hblVP{HO|McC^SomPm z;;@PQ&|3KLX4;p9)}d8alrVQV+#K_;b>O?r@HOG^scz%JK6IBA$|-^YUo5>K#12jy z!6h1n2#k_Xjx1Y1k1Pg19rr#H#Nd2ChCVz>CO)EUF+%4tf^;8y4jOTXk3PO1+mRn6 zWg90O9)AQJqbBOaz8_{p3Qpizj`5^V@G6YknvXLmOfW5tiyn-#rH{R51BvKOd;*U0 zElu(aPyB{Y2;UE13rwoBjZ1n=KJFUh0#52#PAJk&^ASxMuuRD)OkgWant4oV0jG$& zru0FR=4{hn52mmArerKfO+BXEBc>cdQwFp%1`0F&3ey@0Oy~4|SI{gfk4tesvqL=_ zdq0d4I~y)dN2iMfr_aQLW;2#%vm)kF1UusN=Ho5rK1a_hu+8T#b@(34g&)k?4bSHi z%@nZB6{Syp|J5uahW@E zL!^8IPPlqByw3WtA@Z;m{$g`;XhRUZ=oCFKBeeB_eFJ-QQ!;Yp8+c0wy4e`MMFZV3 zB;HW>+|m+SN_@XnH%Xi**?nYHkzE(hV|>WTx#CIP(lLg?F^K)-&BzJe(ZU$rDMjW9Rpv1}2PT8p;tM3l zDYoz_&DYa2y0g*r(~l#kE}mx`kmF*Zv*gh;5_*)b8FRV(Y;O1r^;VgU15*ZhAkVQZ zZhcNEe8FRIad2=hL2@BnaX~wBthsU~&2gz~y+TfMnf&6yD(YAkdHE;v66tZ_?R{Z$ zgt8D}x>cOp)32G6T-pjBd5l~IdSQB1tUE?s1*}{LSzm`hHhzs|9bMaT96KQ| z;woTCNE9o-5u>|Sin_`2y3SeI1gzYYlHe9v-@0es8XV# zt*zWCWFf?a??DFl*$_nh$h{@W!!gIhNz~o;%6e0eo)d_HgBX^XmiZ zv1)*9iA2svA(KV$C4^A~962bAb#Jgg|IaZfVt!`uuwQY1jXXz;+zmqh=dpt9K72UL zME-lg$^*a}FR$`{Uj5Hu|6Hf`=;1I5FV7n<@Av_Mx<2IY0s_BYc|iLz@U)l-i-=A< zSxM?;AQ7#QKZWwTc14frZ~(Q& zp>764Mb5AOL>4`;$NdA=;%HfBi*vw6vprC`@TCLQV3h+4JU+uFgRFTbwi;IvNuS^5v;_&Ew zZY_t%-R0}bwu)*3b|Bh;U55w`J!vTflf2AY1ec?$@?GENw`kGPS|l!;*b}KCnGU4c znT_C64I||@n9oQL`6-3-o^)aBbbXKtmzQVjred4?ApMlvzev?ZNBGw4H5qq#@uTZC-7=eeq!*=Mqaf7|4aL) z10Q$Oz76vuS>F#nQ;v^|5+zaKk{2PjJR1Ho29F!zoiVCanW6EB&ys$!RI4Z_3}hdX ze|b==D*Q!)tc6pfI^vrc?NjJq z?emxv1IS+L#gh&DNi}28#graO`~3O$KiX%cFvis)auwx$uEP+zR#sqdbq2>J_#bWl z)O!fq&OCbc6qX=GOfh=)z&t zkKV`tcZ*x}X`+qityngtN@K@E-Dm)sfA+DFbCUd*XxC?xbi{Va?X5L6TcaPOC)^SO`y7GD&R37>G)2%kN5k+iH;#ji#b^_s1pOBH zN#)nrLsUN&L8JQW=?0@H-}Fg{6VjfZOs%Mw{PIJXXX`p47L%mPVx^6s_#3Kc{XG)5 z(J{6k4d1-v?dL6dX_wfQN1NU#Gydl(k@H<1sYHJ-LTxPGi|`G(+ML8AbaWpB);Za} zBFWF=|A2M26~=x&_3@-s%y;j<@D3?Ip9t;6G~)cm+o$=!kTl|M^zrSiv>AR?OlzLe z=c*JL8QZhi&9l7s{4zrVvE#`o?en2Z6I89_G@;y|fi?ThpqA)F##Q`pA-5(4o`>>w9w}Y9kxCFn7zzk&(AImmS*2A z0Sim|HI)z)Sm!mU_3PxKWq9=r=%Ab3bcev)ZyGp=Dumm$q zEIXF4@m&DuVUIM}UIMNC&%zAurpa12x@{i%%=JMTNo6wKmcc9hhFBFRuCF9ds2=wE z+If?~c?XRC3<5uuN)9{j?>X#nbiboZCHX`#|B2oRTg4`y>*JKPbxPRRqgt8mpbX^1 z=N|fz>w3*>NQnE7yqO5i<^O_}_WurhpE2uRdy94k5x*Aw53Ho%;&WD7{m~mi&l^hk zci0=t_|;dw-!@+^o)EVyMuux!9`Ff+u&=465Sq#Jw>DdA0>BE3W>y%m|2yo>6cu#M z+EXc2tup)cJ)v|)+@RB!mLRljuG(ZI6$>pCxKM8+N2X2YbjaM~e6YRLvX^BL==F#I zyR52mt@Fhb1B>G7s*R-ZmvZc~O`Icxn8Ak2te;9?BUxhBv%dLkl@aoe;7X7kPKvlZ}`-YDoVL=NW96O>Snfso4acu3-LkSnt66 zXmuBiB;!ETFQ2)eJuEG?fZSF)HU={*+;8L%6K7H@74(P;BpPSklD8h&?2;4iyP{MV z!q36fZp{+7Yu2P48fyU|zohAHX{K>#J$XHLXuKv9DB`>rv6FMWFsXLdeb%~*zPo%Z zfMvPDw|Lgv1PpgJP_^0Jwdi{?)4Ukwcg03w@{Twg;Y!oaKmF3}zegwV|DM~3(tUoJ z8%-O^_%7y6gv&~>6jj}Nta-I&mV-jabzZo+jLdTUx4ojmM4ijIe9TTCCX?hB9r4@Q z()In@Ip{sRJ88<2p|HGsRny&kciE!iC@;s`!ayHvN;9S3u`b)ic?HbBzrEw!E6Krc zMcx#p6@HP0IXiBfy*6;WOfAlAL%-e4>hd*XEeU?-wq9Kc-rFl1oo6mKk5>$3N}RDO zIjCrl+$(NaMQ5^TT%!stE7{3_KW!eahnE3tre#ZO8+x1z%cs_pffZm!_)#Mo4%IQr zd!bX=Jn-)Bu;Y;={J8cp48TxNdNg=YkMu14fXc!Ro%C`?Xz%syCYHVHWb7?H4Li$t zYn^woY>w}GeK?=gO?K8|+#_JUUsZ&I6H(a_Qea`9OHw0m-9<3X`az#ZDxIr`{OYc1 zM8o)=tM8qYVC{@l5XiPnCHwO9ja;uTLxkdj#m1x!e6eE6-kR-r={X+oV%gvsGCgya zkpXzVYWRT`U||VkxmZ`@*5{s%J{xve`3~qOwLAQM$T~OA^viM3lpz?t^Kp>%&tlOa z=xn1*s{9IGiMVgruH|OsS<9x*xZW+k^7QFe#W`w($1do#_9ZY>u&>rdv9Z8Lz34p3 zOfu6EPI<-#w-em3q3bK#2KI-Oo?ao|EeS5K^Mi4N3dH5&LXXeUxgUr7aTn|>c#{iD z{uDWGnsJ-vlyIpq;&CLlcvz3)d&67lNg15=|G>&)zZZlrvBh~ho~9oAGydsAAf2z;h_2bOT%`XCE0w}?NDHOAnYI6gm3{x#W?z%PZUbSb zRs}EDsA6~Z^?d$sZMK)sDkl7^SS}qXNSyzl+HBqn92sfh^_XBcc_W-@%|1!Ke_-XC zIcMqa^pn`oeQ|n*{(cmpjLRzf`L;BmU*#|+CR_e5tQ=6^{t+KPkjDh9mHAI?HlOB) zDI3X9lJZ)q z;1g{y>i(Fsw4J;+cQhZN<^_M{&Bo6`{ZO0vZ)w+EM!Z{p<;@*&8K2DynXYz6e5q7Z z(U#PN$oWS7P{ZCa`JIJBrcvyts3zX93G>@jy3knfYywb`B&s$mZ5yvaM^+^Lw>JB5 zlIOWmd#Q1a&Gs&KA*6NLn`Z>Ty;vC@6cSL3+J ztY!NmWt6~xNz8v73gxZ2>rbbUr0sX;`kb_(Bg{d_`RZd%Gh zQORUe`9-<6$DYoXtY+Qxr^?_@JKqTgHS_5{S4Af<(8<8+d$cdBVuo4y7)oax9wsa7 zy32k`l`23FKNV#CDl?H8oHu6wTxY6hX>QCSKY`>d%4MzGSJ`0JnZKP*tiND2XfM%8 zx%>+&f7w{e0oJKdu#ydEV;R4&_w=e+M$pQ>fkkE_F|wJ%hTR%fn>A$DXk@D_cdY^} zoi=kPEz^D#>6BZ^D|Z6TdsKK5@h&aoT|usXS$kf|t?H>bRy-2=;(>yd==_ZlFw}2A zh9O^U;p+|++9lJq=I{7AGaVGfRnK3yDxv{qJ6}An3N58DIQQ0Qr>j50Q)ykNqOXCt z^HxPtT5QmTsdN@b{0Zum`$4~A58FWPe8&Wgal)F0U5P(> zBIHe29&Vt&dTMg8hGC*`r{R0D+C1U?9odyeXtLya4mS`csgv63#eR~qvmOkh4({(v}$EmGTVe8K`nnCP}&vjFv#k-d$5kK|50y{K0OL~cqoi2qRa!c*?=Bn|;(R9Zv@^<{>jY(mTJ?qIQ;vBF595udug;dw4udaekuTehua<)^xuz{wqc6O{=QFOm9n71) z(NA33{nNFdZvvVLgDWGhql}V2<&K|ppCz$o0Ide5lC-}RPk?xUpFEG(SBk*!7l9It z0lK)>Uw9nUi#)X&{dAlI`L+UNd4do)K1Mu&&O3oNecJD5y*00cEOC9T8-rNi1{oAN zIwl7@G5YC_k!KO3A#q3KZ+=*<%v&*E7uJ5oee{m4(nqK=_m@z z>kI2C(zK_D7-x*=Yz*(B2phTf?KcSO>O3}3sp+w6;g%|<|z zBV*s#9(PfKcChSv|^ndV##A z;w30+De+Q9IJ^&f{N7r^G{K7^P%|ar{$qk_O02R?lsQwPs8Zr@$|&941bfpc!{S&Q z$|Pib;v^3i`COvpjlWBA(yo6ZX)*3&nv+c7V;{#M5=iuLFP!D8h zZf18g%Tx?%TcGSfec7 z+e|U$XuQ1~$xua++icP1yid1zN_%NCvT5IJuypwHxtalrX8DVx8PAWiRrc~#=kq0) z3nIEQwdPaBQVZAy3bw@yY?TVM2J-*N=9|kF`fV0iHy4^x6?kd`ocSIFr54)q<#`~r zi@Y(5H1V^2n+yH-ih7I+L(B@Et>UHe6?179C(6o4Qxzk3ipB6tvYF+RLyKhQi_6VQ zB2r82KbFLlg#j?MwZu zY9>1_>)}glcP*W#DjeVgmQJQkQ> zE!PTFw2G5GnKRjn-o0`(Kq+FNG)TMh;Ko52&DDkR_3;#tAE;VJTxm09je8HO;EEk>6_;scJa+ zYXrgyIn2xXN@ZUzpgynRcB@6zW@%+>#LXW`BWlX`s$^NDSr%#mx3!YgWh(r2Q3JL5 zVRcGyJe|Qh&yTgwZR*wC>a_^!EBNY-bfnZ4YAp~oR)~5#(gqVigG)=jyH0~6wG@3D zo~c~5-C#q|DoU&=>BG|Ky3ojK-l!GU7_uN4HrVI~uMKFakL7PNRBcLxH%1aPS+q2z z5lChrnrsQ`Q`|~Xm{Q-qxrm_Itfe^@-W-Y9QpI0WBG&>mZ_)8@XP3Z4K$5>nZty4OXUkl(l>b6Z3wUh%rARtG87KB`zhg+Lt z7Z{zUyI0h{nAs!Z|w;81(8oO#8<+B(g2a0bD4I^nr z-?9BI&$70Tv4WuZ3S-xcqs$;M8`5(0TzCAv$M}iB#GS>&C(saW#02B;gfb?^yWLj0HzEs8mgh=N8r4<;3iCZ#}AD#K9u`zb*9lp^L7%jncM+R5+t!%Vc} z+QU;;>62=}iS5>Da)oJY%jqZS({^mrS{^f=OXGilGxi6gj(XF9_cK($83Vyt%%$nz z`w2ea?7QJvgzl`4$E+9IoSeek>HcgK(QGPkA}t-77%`W`HkC~@kxL8BxSyk@ovR$4 zETtXJM`dR%XP>3d>%U)UTbwWV7_FjRBpqI;)Lm$>Txd$4?^@~yAI!gdu{a7^j9Xmn zjhO5ASn^?83YTBXBwG581TMJ_Elqh$&a%y|ruSG1E_)sW3Grgo?`Kp_$2J}Pcm?5h1SS3)+s$#sWVm?9@ct6>j!%49Fgl}m5VmgBFimid=Ap6hQCWo*nYts^ZbKWD6qLswtYZDj*Duk`xc*`2R<8B4}=!p@c2=gn)4iK6Mirn#q?xYegB$SWK6Ys`EZpSU} zT14y?MD9dn>_tM?vgj~?4|`w1yPS%9x6- z+>JVf4;=164)=P?;pU3_$yWQt?E45pjLPMG$iqHs#{Rq~d=k7ny*$U$w!igoPys!d zIy{J8KHNFn@Acf@$bim1?7^V>*BM7el}D2qi)YaJL%QQf!Ured!!q{c8_%QNt@B~DA@{(lt z_0cgal4S73(J4a|26N_FiO|{5{pl-%XMFVM55y;u^v7%L=bR(w z5*5eNndh=ACsE573Q@-&R#vnsF1|x9csRE2JTHDnUEpM5z{)RmMou(F&L(J4L(WTX zg9~Gl3v;xq1rUZE%?vKXD$dI}&Lfe_B_ubQ(fFZ9#|iWZ z4ML2<%v1;hhfavcbBe%-zcTOvJTo!jV^f&!T z$X$BWeiF(3dep70HDbW}z7lz{K!3S}ytn?ku_^p;N{_ki^{_+ofOm*7E{xnVKpqO; z9giRpBUcYm4?9u!EM-X4&KGfns53xZWg^~|Bi$j$6A1FZuNHlMD1;#I|9KUqU=~0A z=h24TJVFh7A7&vPw_hJr)Mr6r1l?Gwr3jj9;VgV zZ^{*k)gd$V?wl9KVuByaQ&64U!eJ*3p%zEC+l!YF;T3)l=<($}Qp&vLQ1{II^Nr9h zi3k>XEk2~{5)kzTk0DQ1UaC+YY2J;_(`n70HRswHh(D*hjO zVnj$!+Mm9jSCXXtw#Y92&b@4`g^(oNM(VXg-V^D!F)dGeUuVWwNxk*Zt?qsa8GItk zhI|%0a9CndUB%X$rzFb^DpQdr4-t=+=cYW*#;4yRjDd1=TAV2e-gBMF3yu_PLvJ|2oyk_te{#bq`Sz%eNfH8vn7AC%o!yG)N7d}m!#foT9E0;XI4~LFmK9R)kp;| z`zu_ozu=H-ek_0qYl zyy83}8})7wdvQeCC~{uK;Y@6=d-rAsoHsn;OO8o8ciKw<%UAS5Vq~3TGm1RzU^iam z&srJcZX~OZb|Xk#S<*8^& zd8B9!V}i674Ig|Pd*44Di~9L7n-a@KQgr<=B*;Sd6&X`6lVqf=J!uB*Tc$$#*uc+x zC~p>IR_gUbOnBy-)fXe9Tq>!`5i4R_1WOcB>YU>Vmi|Vxr9A!2n=vl#n|Xb~S4oN(pNRD)W`({B(j&Oe5BGtcO-Z2D6-*-F}jM`B9XvzL~IsxF6|IN}( zsc5^bln5(ZB~G6cFkM$kI%@qbfP$T_j%R=?f!{(GNG&KXvt3FL1|yewaXXvjMAkuG z!Q*Gz!!Fw20CWB(f>ON7Rw|P@*Ih84PXi-rwv(AV01tk{wHEjR#LywK_Az8P$+h7K({V*?}RdHH=mohav~ zs%yh*@@Z{I{&*8u zL?;?9t(?;xMgkEZ?^9OkWv6NKzsm{uOB3rT_NuG%2a?!}bz@}g3Wk}u3qOwa+reTo z6g=^XQpKgmawVx>>J3Pnj!6n+$wtW5l|+GsXPCZ(K=DCkhox_5aeunG))O426ZYu7!pVd&`2=4c5_2egwi@L5(NtpW@DR zp)`zRu+d!dAAF$ON%$nqz*g5<6p(&mOST0y^9Ce#rAO1%0y<;wA4^ zdLx=d>Yyl?uji<4IrB>GdpCu8_{P-Ebc9*{)NTamt;F2pU1xgd z=WlQNC`mT0#;fwpX8CIxIbSZ_YdS^Y=!V#A4Y%{O9oVGjF zq#xxxUI>d4nU>njlzzv=80Rl(x|3b-K{G!`UDWxlKbhq1lK^cqymxX2wmaF$uL3pK z3mF5O4FMd9x7*=GC_I(MQ!hJHDsYITG|Hr?Dz#Fjc)B4ZX-*i+0_y4|$LR^~D=0BiJIHapDPd0tXpx!>GlQuWPn zlQFMPaek|M*lb|8Cf$+mAOtPU?7+e5H_PjY()nT=U8f$Z!?MQ{uI1&V8_jPj;KaBV zEx{e|ldALSu%o^k{buXhhX*-e8-@YEQhi~dc&`Irc)zkyY+IlTxO-V<mD5 zs9TX2|IVXAdZ@?07@U!I_d_wGpv<<-)UeQS@V%plP05e!B%20aPq&)kCxwXsU%2|143cxg69b62GT#Y6h^5tFp7<*^k!WcYG zEsit5$JWjZVdu;4=JO4c_t>7F26X^?)oTV(pz97}#6@M-V=1dD46AR%wLOqa&!(1C z4reEriy!!W$CEp#dLWxv(RrgI?RhyJLwi`?3Mr!P+b zQwTIYfm)n)iM*3nKj=%}gfz>uY{jEIqyYaUp9_Xd& zca@)ncNHpJufx(GDhs*NWr+3A&gmX?CN({!64&2Cq>ZcgeRStluvfDCzB_NsSC$R^ zRa*KzZSM+*FjaCCQPnv>^6dy8-XB>uKg&9joTb8`d+dX!`aNl!LCjNu!1oA{wPtV9 zPSC;bMYZ|;vbMM8ap+?cdDdvW8C;38Dy7i(d9Mnmad@6BDTSG@zq;R-`b_Wp#}D!P z73FZS_*?c55mkQ-Mdy<{jM|kWl}in4lVJjQ>tp7w@hRl@CW0a;O|WDaElLwCjb2ry ztYooC4XTtS7b1!!O8ZG`?%X-4#~H`J`ICg}y7xusNt`e1`jfceuD8TC{-GbAzs@bH zmEwFKI~rbani$m0zx*^wZ*h~Hf49-VmoxqaE7}JctpW6Rb}4CRG%Pc7L(iMfoGZd} z1*W*gwCCT49e<-euPjCm3KhVDG6;=gX5Y!%gxbcpa21I1UVhLNS<8MLQ1tAb>{zJw zIf^D0NpcU2z0{q|eL?g$1*;OZ_Z^qve^Rg?^FNM$`ELp~{|mnTz(o3OZK2SA)cQG8 zYDJXCrYcUUlY~4dnix@{S|~g9Hw8=4wx@RG{ixivu2gTyPqSBc8od%8U*YVhJ%gf& z%@;tMe^apkYJ#r@X2AcXV9UNEnuBUw3Gw|D{*!|JM-yCTbfc~LBio@mdARI1_uw2# z6I_!(G~N3cF*p8?CKzb;j9UBYa~5FfUrn&w!aP#3zAlIgXz4WgA5CyKFq@qKwJ=0! zf+Nao^6h6g`L3EqBiQwl2;Q#CUNz4SA6gf?y;w54YFQ;ZGHo({0S~=u-BIB9*&b0hhJBG?Lq>EMb9F_!eX#)ft>-Jw*`-XWv86-5$c39e zZn4c%6)bLX8e9)ZDQ@Px5dF>7LWyiQz_v57rP=x$L{ zK%|!{BepYH9O>{!3Z$gCz&G$$6YSDrrXJKY6$(Bp4?57*-e{bRe^+1qdJ(2h!Zw?s zUtjBCZt-)OZ%lpQqPAgaP9Kr_w5>e2zDdDqNS%6oZP~VICPLd9!MD`$yP;Ls&1yxD zdTb-30gMH=QqSdDMi4g|!GWe08#=4FK^741%OeSfyS1>l*V$|7*1-`l%vAE*qnVjg7fr`@&4@J>7@ep?BW}61mg{30+jZ18o5_ zt|r`QQ2%jgf$GxVL9+$@4gbhp5ZrGtf;*>rYOeW7rwqidx&9%I~d)e8VhJk9x)Ui{WZ&0GHOoR z^SZwD_H0AzdT>DeGK(9d+>61?YIvS+nC|hr-cEQD%6Q@k*rD<~(Jby*)ZRBNUL=zy zc$!W`3Eq!1z17CO$WUG!@!mvr-j64ZsbpLaSiIS&J%Kb)a^0JW(3_yn=l-M*mw+*g zxzigNUo3N9{>g7VDDMxNt|FSg;&nEH2|u3(d5Jmsy`}W~_|jK0$U||{PoL6PRRHVr zOHVa(e-36Ts_cnGw=st5M_Iy)@GoUidz7+t0o5J6_VfqO0W!~_K(yIiY7E8H4IFy3r?L3 zP8SGr3JOj%H;fhVi`NWEcL+(_1U#@IaqS_DsF1Qw^NPt3k4b_k&5&$!4P>WgZN6uf zX6SA$R)$kpv3a05*Mgb7ewZ7M!uX1&lxj) zqNTwpYdftT#Y_{zsufMx1s(=4!G-)0cef(e&7=8bLpTzne^N(_ILF{^g}l>>W^&do zTT~Zv{{C7py16cfe2U-$k%sCPSVb$wi8odzF;bm1QgKR4IZ;!G==*D$I6T%!TiM7o z-k71-xE|9OQRjGO!MHg`unCdguPrxgngq4WINQWnJ4tUvRD7#xybn!+%Vng1VEnU7 ze5UhA}>YJ0$(w^W%lO!FS$j_>i3Ij!JCC0&m{b*v?VTn;%Kh+46pi{xw zU19E*x_LAnnNtvvsU-i)q(IpiYZ*vGaD1&rcsWJvkAjFo=j3+6WL68{7wd`M)sPC) zWYAP}S8!}(fi`1c3Mqy#1<9JS`4WG0N_~JdyuI9JpsbJuX%hbEU z_+5#q*43%{&Oc|i5^gS2kp5=7uw?qUG;f-uuPW)|1*y3?PDI*~&TFYSv}yP*+AJCw zYwhV*U1|5&GS!1qo3&CrXwn_dk_U-mo?T@=V@m^#`7neS9usCB5M^<7N8Sb}mDBtn z>dFMkW=a%h39)5$s%6avWUX3c3tML1ze;=Tl2Ra;o*5jann{$U#;DHLgRl^$D`Bgbo>5|!1#P5NNOs3q zo+&EF5tds*lOu*n%6t|aNnn_RLz5puoI|Xgdm)h5p;a*AocSQ6V4AStE^VBpc43HI ze!EG2^zSsr+yZm$JRX-ktgC!!nu40EylA-sctVbiWm4-_a!_|lSz&I)71UH4+UWvq zE`-(><}?r&a%p}q(N1ll%}Qm<89-?k3R!0s76I+YTd*4h5Q!^Mz2Y?%dO)LXu6_5tsOykkbBbt=(4e zTC~t$W(<4zBS^(6Tg5tU5y4``cp-pu1=u#x#P$_}JK2;ZsqIMxkI|J_&`PSADx6No z8<)!3q$)Y#vNp9!ux8Z(an&96Dl)55O{*#yXf>mJO>~ZjKH4uU<(#qzM49nErf zcoP(>Y6p&#H*O5AFCqcFy@;pVgwM7S?{yFg4hVcNM7%H}j~%IGiiC&a5B4B>Fmw$F zC^A?QIm?b%B5C*}-|)_iQ2LilbEkKMreTa%(;n zZuTf_;!uDyxHVHg{=>Fw!l~Or5%xy_=s+s8@L9JA79n_c311^xp6fQN(6tICH%sVh zV9mB{qFZ=GS_$)7b2nRg!&+YL>cAE5FyHOy5AC?Z@5HoqXkf0}8N)h5**k5D zn*4M-?`?Em=5*RBbjI!KKsXE%cALYJ+lVH*{3yGk9(QMowAEd7<&m};TX&vFbsx5M z6Nz+v(CvbXbS8!ML|At-hjp8Xbk|W~cR~m_t$WHi>?*GHtCAaQ5WUrSeOqI_?a2fs zZhe*enSj&qX!~g2Z`y2I;{sGfrIx`1|Ht+Cl~Ff z7wNhojc#!pB1#!5Bz2{<>3+^>Pj*+Ig>!hfcd)i-h+=Q}4kl$7yLNbCY?#Yt#QE{? zW1Bt(#i8iDk*DWOFo*oG6jvnDV_wgThn=M3btU!7;DTAiSiJvK>W_lCD4igix z6Sg;FtGyFJph+*icrnFs+my)&oAJ)|)v zohmK1D!;3De-NvEZl>_=Y$oSav#8_1-MJy;oIhxG9+NUVt~aKuM=+Z*z0Ntdm@?Uu zl9H!4-;px^6FFZ#K06RQw^}?mY%_mIKf7E!v#&S5K)=||b?&+R`7Kp%DcN!Lr78f%pm%4bD9;Gf2H!Rf6Ewtz@4Y@CE6)&Z?FLkahF_kR5 z4FI28VN-HB*nZxs)}9hPCJ5IcASFkMxxvVyj>0 z*Y$3f%stjM$<`$s+8Nf@ux<&y_iqH1P5s{Apu(uHJ2!0pELp$PzaC_36mq-nJHPph zVJjHC;R0R<&u>M5x5(n=-ji+k=x@jBZyJ$plk;sQ^>3w=tf!T1TYb0R zV||ceZ<@?-wqer+yths^ThFk6thU#vPnfGhxNy6Vtc)+we}EgVkGb84FdQz39^Sh*c%FJR2L@_>hXEc(hZIMI zOh^0r$Bzc4DeoN%79VkV5)&>Qt?wVQVH%J7^iM9xc3C{}S;bGB=8n0-4{P_2(ETUm zjYrRwkG-%?7L`t^Jx@^mM<2NV28wYur!T@!WEl^ImCw%hPQ)?CS_6l2;e?+D&h+k` zO4}WO2NPK{o~PQLzYRY(I5@UCIR9#Qu}OBJY;$IjcIsqsG1+kDf?4@#fC^wF{$+O& z;(77a;M`XkWx;qEaByMMh;rfv*t$AxwkOG+C@;IqFw9XR_Y4j9W$wL$*tDzpn@iI0 z%d7z%h$qV5fHvV85pEx=#7}0T&t> ze%0iOE@eq^muT^|$#4`f8q|10YDcuXa09%u3q1et zQD6v|(0CK~?shfpbiNT&NO3C-91d7h8GUYtS^MV@kpDUdVDcW&&s?}hmtOv79Xrfb zBPN#u``?rNyBcttF}S^0I5%GW=X(Bq34;NaJO5|7rT?{D(86uDA>h0HyCT+iwwNYw zTzLwSPPUj2{@FaDK>0GWmBo(Z|C?&8mmB8AlcA7A#3|S+7#XJY+Ft*EsK$~ZuX78M zNU6krCw(qd3X%OU>#IgQAD*lI)3Fr(o~zxYzt&fqx!YM|9*)tx&s|DIDD?wUd%4j1n>MjzwK;%s{dcm~iD|zS4he%uO~q7TkT8%zYX6q*jD8=^ zhY52&v!1S|@x)iu{AE3ZbjO&^OrIUX>z#1`>#LyZEKHt;MUQfDYHh68fS+~N`Qv82 z$u|N<2DhKfk@eEy=Gs68*;FkbVDPwR^I&gpL0Qq`(4+h$=TiswJ8XW}QW5xdmK~5m zDkzBKXbG0`oKa_&HJ1>Fg;x+BRg`_aSNVgd<(4nGr0Q=53ELxk{tEfXz%Md~yvOQQ z9?>_TdpXYVoa}x5_Q)%lCuXbR!oz$BRRC(-8X?UX{v5CKMV>^Y%mkC$uoPRZU%Bjk zQ19>qR@n2O@7b52)(y{ljNiQDE;a7t!tJoGR5}j|JIH;TA=0ZPKDYWxS#azcQ#p7p zh8{+|zZ@M_k?tTFt(IiTIZ>6jL9?meZFzL^Njci}bE_;>@#*K!!lAOC-%7_Ge$lWX z;r*zt<6f;k`dW>*Un@_0MBRWc?AM6iceXQ)Zwqp~6Zru)roBu4PkbTs4A)z%fXr~dzZv9hxYRIgBB4dj3NX#C-g2%?x(}b(l_{H-!)Ut z#=m)q0@hc9KmOBpwe*g2ihsM8l2~FWazDlfrxnlyle1EcL4)%~T5Y<|W?sCg$CDyMr9_qBZ?=DZYKlMo!1molw&qh3$;D_u#Nb}+xm`8h+Xpu^Q>JP#y}Sf zvmww$q4HCva~As{HM|e+{Vy`V^eu)2A>xMq-<6-~_b_kkgeg|{9UouQAA$Ls$zPWG zvAi`R&TvF-mk;_c`Wlhe2a5fr8t;5dtDhwhXJF{^5JxaBoD$UC-t7;%eaM7Op!tsZ zQ-3gt-%}hG>OVy4gCUevi}=-qAGkbt{GL8vI{H%g;dRYm8273^tqFAtUCsSK!Rui% zM?wjq;qRV~9Lo=)^E;T&kAgiV44JY7B#9`aA_VJ}@hA%ZklL2}>YY9%Xc3Tor2Ye7 z%YI`XtLx%TwF|JtH7Q%n|0sBV=>A(GhdeN$<5|s*a5=vmMr=VD?N3J$!Me{WD>r5I zUC13Hub;kJt->nIUeuZd8!`=A?L+9$z5E6b5s znOReQq*jle+)#4e7c+_4NhO&(Z&Hto@?IST_qwq~r)5|(KgOmVtWzDyepkiJa5qH7 zwgw;|`xgk9$aMy$KFr+7-h5`EF=VJ8lgfI%C3Q44M6@}Q#aJBt^g6L6GU_xNSIy*$ z8vIjy`*8Rxll+f1aJAs&w|V=k7Rs+^N5hC?vl#FgKfR~@6v;OhgK=j2l9SX|zz~x| zRK5M7JZUU(eAJtNj}5<(SUnVcmS@bnqY|wBr3zCR8<6QYB0hJe?%iFT^s^YMcdu3p z!4^}RhJ2y%duuHCM`W2l1-n#F;Sh+crW|ZyW&A>TibHm!A|Z!eO&Fqq+~-YRMdTQa z2u?Tg{U|e1w4wHf>prR&FDh~8w0^=q<1!Ri5ewR}`3ceLQy;6WJS|rDC(&GvJFm+> zE8x-C(RKa6Upy0Sd-=6~)J*#VUejkQ_Z_N(*jF!Ibbo4It1WrF{;6z3vc%|~mF&5t za{17lncIf29D1I={*wNsWBrca{JDBl(_I^H+0aGYJdNrd_a)ysbQht#Q?o*Gng3Df z@Qp3-zu~^ck4^fOA>6U9&4eXbzQ}Mr6V(r653s))7n;jy*KGe)U*^DzFw$h(uTQ4{ zERm$fPwpjl_VHGPL|*GtH6}DDoezb*Dl&+j)(pQ<{0ast7=jm0O_^)Q-t}Sgr<641 ztYXJsb$Y*64^O0-d;Ey86E@gxcO;{4%`~bNe4Dx^`akKOD zQB@5&t{r+lnbQzPQ)jyHaS>Fb`d3p?1JaZy%z}#MFSrxCM*Cuar~Q&+HHaIUYdgvk z=g=34j~|Y$sWPJD2-3B38JXCx%DbT<|EDlYfEDt8M!bECMsLc}n|$#fKGn@Hd(z@- z{!}g*CHwUsx~)Q1`HEDyyTE@HM#u7XyM8Fj$MYEcrQ0g?LHK?y&lXhXQKjiN-~xrw zmq5fDZK*nKQt&xfshZl7Ep~eps#XrrZDYG*OZESR&Ofs9~rRza!IA>~A!9}t1 zwX$>dvVN;`&UhHRyKf}=5!B59eiie;BmcrJqmG&za;2plYIdn7Te5~=p z>CdV!C(Gi8F$(iV@9`IPb3ThxLx$!{@2QQPRtrp*{Hb#DmaHE;pyq9v0tC|BpD%YT z*n82NJ${cxw)yqvJvIJ0**8z~nH&UaVpbeQ#3on5AE?V1IV)3G%vhTgF{p&j(+Dm`nY(_mb;tOD12N}OMXEqTL%4d%FShJNINz)E{Zu4t=D>!g} zZEH1Jb)01_t?kGxCxnyoDkq*t>h0jqdt;lM3BqwStPrsh3)UR*2G;ppdj`S0sPt(V zOPYJPG?n`oCFkWrU(+qN_`r4y@la9N2TN#nU8EZE;DNoTWUJ%}5S zLq9F9UU%JVn6lj|t;HhXu+RPDqr;Qj%B;H!+YHFxZP~-0wuYX4usX;HS?;k*m~^;4 z=$H$zwy%@1QLFG@%S9xma=fv&gx~K#?6#itqZx}RrJ*NPSLcYMfhiY}!$AoH7oIL@ z#+<|9%$nU_E%iv!^4_-^DJE@H2fCaMA~>8g@WRH|S4j;f{d>ji|#g zs0YVt=fn&2T;&M3a;?@e#d&|!)8=MB%?#r@lo<`ax=4fXy`KHlXzMZ8!*BP-tNJ6x z@$7I1j69#g;l93U%`3sAv)z2`JTRB#C|B#jAA8!{o$wK&C|{g#QWi%JYh?CHy7eqsdirF&kV8C zCUWk}DgS&y`qc+Roli~Svm0c*GjED86QW|X4p{l7cgYvjK;}a3r%9SYh{5saayj~I zf~D^G58YNFi*}+@>a`F+!3}%%c;jV<(C`u1p?8J+w6jC>syy72^lxFb^8;;EgwWx) zr&NNtQbIre(rur!$acwTeWXyc=Qqi_Ie8qtiG#x&9VLX-^V56>?w4cPZ#QJP73@Tz~&zs@GB*pxgc} zjB54io4yL&tEA@tYl8h-80E+%OAVH^AoEMw3d2XYCO49lTA9O3SD@re#1t_7j|o;tPg~WwFCG7tV&Mb7?$KN!wK##X zf-l@jUnosR^OS+YXd3NUf%X@C;$k+bc=%XF5^w&Kv+XZ)UHC<*K*YOdt}#ZeUamb> zXbghtUu+Nh4*xE8IAeK?lACP4Gg|6djjg#uJL$1LRu%!`5JV(S+%98Q3%C2ccyo7o+!E>ZF|??LE5)+ko}qI%!jlD9 z4EAn~!V3gC3D7(0ht8L-OJq2_%@4_5`IGD}J(!5Wr&TXwq_$qBEPd4az~g{~ZFia0 z^-&w^xZMx+uqpf*R0p1adC-Zg4^1?6rwrK-aB%O6_}j}8VULRNXoWRrV!?Lqm#;~} zX0@->FMHNokD_$mnZB03?B#c@h|VKj=L9gUanwsA=J*R2qwEyyOc48C14*qa{KOh{v zbjpYN)7W?P+f`(OGLWzF$*tX^bk}8i48a9_j{ex&On2q}fgj;k#&~5y6!)H z$4LjYD?BXNy=JLD{C#IP;0(@#@g*iH2X0j|R5io${ii=4rmU+fyJUUu|CQ%C+oPrY z3y3p*l}yxcnj7%7wCt}JKtwn77X&A#Jj`kvk-HxnU8X0LF1Sx-R*l1*XVt_m8fu+) zy$#^=X8n#WEK~cA+^*AU`$x^f4c$TE*D&d(%ljM+o1n()@HeH-2-n*cDP{LHNpXwe z_=c0T+S)a(d&a{!V#f>uH>+yO+kpPHy+qk<|2?@YU$)q3Bmeh9J5Qe_{>Bs7g6LY} z9(uLb>2e^j;r#ug_c9CJ<@iAvW^ZBtdehZ&O7vdif@0duo*m{oh=~_9hFM$#yafHy zq6eZ%?pKTq7yA?L!yT?C8=m-l9w;g=c%CO|ojpGAZC#$%0l!xdrKgFC*FAHCa~AKi z2`}`7Ck@I8(&0Tz;C^W4MosOrdvI_W4ueoq-`Y@op z$?|=hG<>n0e1al;KM?9APWTd2`-&6#$U3=8O!`O#`Ki9t{np{9fbv7fduTWr0s7Fd z0s${Nu|qYyDa`#15_F96{Y^A|l&AxxHvFwN4Q*rsoI2grGy@qN0&P37?K}Mor32kI z4LlM8y)*+f9Pug5-7EmQt)Zqb-C=;&%OGFEU`mIepoAdP&hN%v0U#&01WnJ!0>MB@ z^hdtEoF5fZzpdG>cYrYjqT7S0qnjxKu&7jBNBfRxSSEXko2zQH!X9x|rq{ zF-n(FGQr_mi7{VbI*NiZ$~3WJg0XsuI_k19+=+21WwF|@aFfdjjZ1)c8}}(V%8urX zSwWo36cN2_yfrLV&N=>=I^L}--a{+Wfi;0IHr`w|#uI2k6eK(?i2k9K=r0)mO*S%^ zHStY#6bKgYPLz0uCL!5bUC|;jKR7Y4ATei3D~u>99u^0MfwHHPbk-6JVDXi(2(7Zj znoHHX%fwjLq*g6Rq>i4Y4I1o*t)(WTnOnylHCJY??OewnO5k9<>{q{JF`h%@koQXkNUywS>_yh^7|%DADy$82So zQKZq(W_~NnI!d?~=RuC|Q{;S6e%mNIPYMD3APi&M%?72ZnhMw{u;RQUtg1ei7&ECgu4~tGHpN z^LXL84%4~M3-d$eRA?;n!$a~_qxp)K9epuyCJq@t}D z?A}6Xt7TDJNYU`LLJwP!Z5gyb2~UT-c*as`bh}tfDD9IFv<;p)tzFVRS{z;oUFe1` z6Bi#6Cy&t9h^_N$Ut zPiU;ZCT<8jh`pPi5N->>uX4lH>kP3-z__Pc23__bwDOm0h0RWlJ^SA%S5Bu|tEt9u zr_fHP#spI1u2XGDS67Z(?OI>%u~X{>t!omhv$v|#*QphtgGJFPe}mTg^;G}Tsfequ zfy`vbpkY~76##CtJiSV6Shm!mDwuUmb;kNUEw_ z5!LL7k)(RyhO{cP48?m0MXayF+T`mRLlNro$PEdE{S1N%;|dF>L(D=H=UtIg=(=GD z0_cYJ(luluY{tHv@Y&`fO_mT$s) zTzasBI6~K*^fVH>A&GmNc6OTXg((1N+eIiGXZFuDZZn3CfTrlru6*tb3Ly0Lg3Bh_Y`Go|C>8sn>gzjvM=?vX% z6S2l4-R+D+$VG~DL?gN&yIpC?a?}y6p~+n!w{8*k?kI(>+}-ZH)5;JIAmVK`?d_^m z=*fQ6T?fRtBE8uPy|KGJH8I_;Zaq4^?Y+I7ZAE|7275Y-2%8@FJ}K&Iw{9EbsF}R( zbwjkwDD-u@^(`oLPV4rr?)G%M^?%{$A4c?7S@-um?%6{0wQ~%V%=Vw{_QKo-)Vv0; z_d4dT(Nh(Bc7zAd-qLhk^)-S{@;DmK6}&o*Hf-xQ<2C9xabVReVXU)Y^`XkspxF6-fSlBXy?r& zF>)$faYosC20LOJ);C+fH=Bd0nn=Hy3_#A#&dv6N=B5?r)@mvBc(&^_KbcmpDj= z*}+Skw#y2GOD{`Sgc+uJZCAL!E6+JrKhCeb0I$-AVc!#5kqFk+jk+lDx$y2 zb-SW5->>a4IjgrO=CS;~WcgF-+?V+^>;2Vxq-(EJ*Ey7yP4qWp7T57e*NsZnANH?% zkgYP1ZBTPn|@r&VzwIzwrghdo3Tn8fwvn5 z`dcXXtu+1ZD5XZ1{w=WWW`xpu-h4w$$@Uxl?c(|M46Ysa)U9gURWJR;a;|OKlAR#i z?b`lLSi?@${LbmkPNvdM|Lyi#&u(4ATIcOn_x{|l(q@0d&R{=sN^I|s{$7N~-p1Yi zO0NBueq8bN{W&G%g6*z%`qGT;UYqUYy3*=q$^O+X&Rz-P0K9XVy1%2ezvq5%&TxRu zbcnrh(2PE4XE>B7+kgKK7x&&ulgHsn!vVVguy*ILknHH8_~DuDAu9Fg!NC4A%)0A~naWamDHcpPOEABr%Zyb?dj(K!KmoV>@v;qpAJxZPrDJf-tI zJ!F_Z)?ZU#JQg!JD&ai!oj>_pdL(XmmJ2!~WIPiSKR32J6%0RJY&f$VI2Oh_g^--9 z44fG&pFP0fm^N;j+wEHooC=d43oo9f+#L80;wOt;1Q=X69_&0%JNq$k;URwHWiaKV zjEZ6WTOvE5Wg!NqlKaXm z?c!1os9d6p7SQeoS8HVGR6A5P<5eW%go^&vRPlALGOE7xs$l`A$>4Ck9}#vI)Erelt|Z&y6gYk(LQ4B!JWXl0DX!3{8!3q0n&UFN>2-M_^!o^O_71Q*e# zo@c<&yxkQrbD8^g*mGwegMo$r-Lc_+?FbAF{eAj37~T{=T0TIZ9!%dJ+|DoD07J{+ zIQ(8Xz*4}zm~h|_x4`51f0q5vsQv#r`oH!S@WK(W|9j^Lw(tHq1mpP;2K;}o@;{S+ zssGNyV2;yp{yjEu_`mmen3BD}G4js=`*=m@7ljQMidC2Q(8YUH`3e{(y z*8YSepYs^(nbSH2x;ZP?uN;kF{34KV9b8KS^>J_JF?|l_hELD{}t!ze#d- zI8GpimFBOH-SL8dljO6Gx`;Ko8hO~M<#e@8+BwHXdf!mFiB1E(F6t0bEIzQ?cXDC9 z+?OJLP=w~S9_~^6*paG-mRTuDY1Y3*UpXAFb!~`weE#7ywbIuZD2{M-@#&g+6P{+^ zX@5FAhHfZD-rzsyslG&Hku+f)v6sCkc(|i1ghz$D|DJ@~ZKvtfAu~esf(Q4NMAp;M z;ub9NN3SF)bcP4T*A&A3_!DC^vdi1!WMW99?%AxCOGj(RsB};VN(@Oqb8S6he`50G zN&C}qzaNrJNS!EIs?@O8^5oIhh20d%qpy1z@_L7Q*xMwcrMMD(%DcGdT3;&)t~~oJ z`(_2uXju$^|*Kt;(i?jLj(I@r^lM6+5MK6AR=M9Ps zeb<9F{sr>$wORvD3}(zL+KYg)&d}!`pMVhwrD>f{0As+UQ7~g_`qxnIc7bmo{($sv zVQYuf#*xy@Fym-tTc$PKFZzilxVj#KrU_49>@&ezzLJO z0w})vaEqLKE=kG-_deBbJ8U46^jyx?XboL?QArElZGVI0Hg$o$;0bVoP3=qo z01}_x#!p(K{*TO^w(enfV0TZ%t)-2?;QNWQSlZ?($-|Ib^4^@_`=8T0|C6PMhm|>n+VUz z-Nkhc$XQTgt=>LC(%DRh>+ydcOmTZETp1GPxn`|$&y(hbC2 z#_anAN%8VM2)1@xeK4oVEGYFI{JC|7;v`>IX}{oE%z zm|R=GBCh6<9#{30tlrfyBnvn9ZnZ||OytAZ4Y%BV%`F9un)`9XON$($3F1~?qy3m$ z&G>3z(%8qxz!%j<0z@oc-ju)G2;2=nL^>-3aJ^0J`epj&nV>4M)Wf*3q7B}}4n?rT zXx6pvjJPDRk~g?Ad0nF5!_V_UliW|S;<{!EBU}BBT&k(mcuz3930>~LEAr6SFJ&$< z0-tC?J|{@?ntvjKf5|C)l%Z^6{za>>A+2k)Fg$q+%^{@7XTg<4Tm3?%ZCW`qBr5xb zKOK_)VHI5238t|(jUN;+BirSjP%e_^szpcKJlxvSSs8y7zEwgja z1UQe!r9zNqwns3Hf%CJ_DsVqSB7~Y#9g!cI)d6M_O+9*3 zku4F$qFC`hyP~%{j=QBbnYEHxQ3kBOJeyd_GLRCe(gyV)T8(z>xg9XQkbOxv>}VdSfFcLq1;arfPe;Kug(1v_|;i zz^tVbLvK(oVvE?cL66VX-@LmBSizwJN1;~NE>3nF=Vwh%F<450b6(>V`E%Yg&UsAM zq#;x@zUw(GMt&P91PdIY!#Makv-8uR9DFqN-YW2yCThIu&dX z%)}d+1Cp{E$*-qr#^&%0rwBnFlcmIlL?kp{(C77Z%*MgnsFlvnU?i4rb4VY<}A+*u-b*JmcThGxw{KXDu?2#+jE9Lu^*I7jq4oLqR4bI%dc}otYKYju3Xu> zVlyShBmFvi%`l@Kd#M@X3&Pq{3gZ2?n=3STQ^MV_eJB&18&BLpoEx;7_`u|#`>UKn zc_a_OeQbYgXI;|7@J-{ezq;A#M>A{IHDwQ#l88ZTW&=lM+naB?mF9XxzJXdp-DpTj6w4ntgA0_*LHA=?Klt?9+aG14*8Nr*?b1lTHLSOD*EIn1re! zPXaQ5VRK<*%@Qk|^LNu{eumd`{0@63bEG>qR8!yX**YvGr@0HvShL?c%x3r8WncZB zmzuZgTx)x&n_$INzgRV(WWG`Nj6rBL(@I@vEZl(eI$OJRpLgvDZtJ{T6JM~mF1;=m zurcx(13Rm)?E`-JaQ;}lN=K$)B2S5C`d-(|Bc{%6{12u9iM9d9|Z4z64m=5S`vv1 z#uF`X{u{w7&7V8u$(cn+wFCG<|3UB?Qyt_(&!$R1J_^}Ssk%C)k|HBu%|TDPs-&g0 zkN@$7ZeYnODn^0+@rBBEOIsdA`$COb{~~zd6+tO)8QBN|JO4%S8gsC=HcS<~j&CB( z<=Lr|59q5%~95P`+BC8UV1Gw5*UP z2TPHn?&J{Ze#wfX5ounmH<;Bfk5_-{|rpG^eS#ldU03@pS zZzS?1SlFaL#FbLu<^ZKx?V-;h+Zjxtm(oCKmQDNAjY)Cq<6i`?x@t!J=K_T%+rvrI zzk*p}*A&!TMpCbS1@ZU~Dygvzr_uh-wm@tS222lfdS#?bgDe$&w_oInRpo!`D|{ba z_ysC<2GtoX)D-LcIk7$h_zZxre=)0r60awdWrzmoYwb0(`)-bJ6bGGk; z8sgB6H_*lvqoEOoiSUUQq4PM;-+H=;~=M^4`*7KA-T2)`qD_g>>cL+l@h9A_F zrz;jSS2~G&k+{Pjn^W{z6$A8R#^9$%0+!G()KHW;N>y?gIH8Ncv?K8y^F7rzs6bm zYfOHD=L5F$1gO;6QF!6%>LO%UvB-6fZsFMFqLC21;_ew>&_#hlkn`F4uw1ue)m|X~ zxbryPQ&=Jk{r>0fd|JRW(xqD$RI5}~89*jjy3ZKj@)BGwOY?Y{GTO18JgyvU=C(w# zK;6+fS00f@xV$_zN!%e>5mj5Z%8X;wsnTBHrD46oXh+qq+W%U`B5dhADxu5J_D4cu z(c0^WLqw6AuVTHg*SNn;VR}uZekOrt*92=ddz~06DN;!{#DKQ(XJ&f{f#Nd%gYNEF-n07Uh-(FUtCu;q?BWdDgZgr+AXh$lXc1l>i=DC;6 zj?P2$bg>6tl?lh5i3Z(Fn@4p`ZHl!41TsBh`nHZ<)b@vK-OPOI&&tp_TgT7T^PBkR z@IQKXt}N6GN2&a&=)D8X9g&5oN&Xrl{lhB;x2Zc5ye)Jk^MP49OC{~6t*m7Fg3qp3 zEaE;;NGKggLJ+HR7>3JsK_$IVi15lwyWd?J{l{y}w5#Oeu>No0A4wClwOkYY1A+4= zX&A_~K@+SxxZxxkJ-b=$-U1sb{*|k9v!$Y3+z~By7Os=Br8#hAR;zSY@$7m>;$HnE zcm40|`jnl>cj&>f28Rwgy)CnN*WN9C$Ces;Kpk2=e=&b?nwdzVD=jkrPz;qw)v%%$ zB(k`mv$I!)8T6jmVZ0Z5R-X5~Qn}%vk?DG!z~HQn|5jCU!FB51!ew)K!>MP; z^%}eQu|iz~2Gufv%V@n&Q-9&H1rhgn?q`7BXtcO!Y;-%WUASEh^t{e1^xsCOUF-@DmX56AHqWH21?g^OdFYmKgN=DB!Cipdpj*M{e$~kMh%!Q7$(ld@2*5tLdXg z?PXCHV4V=4NgYt;7$A$nQK<8^&-bS_4{(0z>{91#g9`LQ1vnAVa?N(TmM1_luZ z_;#whVkQIKsDp0^f?}v~Z6|}icl!U-41U!alt8HT4HcA07@TY#9Gnp3g9@H?B+SYW z&dU!{+YByrQp_L>uBi*mkqIsk2t9TTP0GhBr4I9Y8H(7{0DPge<{{1bVZAcA^_pQ^ zytqX{VUW78SedXvYVD3XP~Rk|85K6A`3ca6j-rBu4MR4}L3xDWrJye}L1EkGAf7?6 zC@X)`pwl4vY81F`5=VS7oFFlRxFF($I^sG$oV<(RGAQEFRCrt` zm`qR=M+@v?9znbnNdb`k0Y|7w_X=2^G;v+5-1S1kc1eJwU5ho#H6LxgwGKW_*9Z84J4N)vDyMMRh3lK z1qs-KbP7VcXp);{L)%~wyMpB5#AN=aY7%{Ax+Y$R`Nwx%0^-uEE`9$EDd)WawD69Axf|P zm54K)4&O=#x-jR7>BLuZD})(%v?;Ib)5~N5U#J}ERr=GAj8)c*y}zEM@W?BfZWme`}T%qpFldh~+S4mQ|IO4?F5Wg&mtL)cF z*&^_4g(O+_?evdAnW}7nGBiicMOMiLS2-j@M>|(_JI7#KMq@hNIw|L~VXm}gu6a^! z*rVLfOu3rfnfCC!pK^I2Rk=2_`OfgX@7not+j(0wcz{Zj0|N(w)chYI`OUcbKH3F} zSOo#_40pByujlDb)41U7d}p@Y2<==*cY%jQK^$#=iUR74L~F80jiWdMc=dOP^zQDl~pou#!~1)v08+uN2Uce2Y~n z!ComQUkM<1KWA48Lo1}~E4G26ES=;>_DXf(O6I{zKH=(w)dJ99m1KRXmT-+SUD>Ce zYNapLMy}OOay7Q~C1#;D3awR!I=FVOwKlHhfG<=oyT$-r%S2K~99rufTIRZt8d{;y}9l{Td z4WpAO-$C?45RUbTTpdK?O#K`hiNuf~1B8(&SIF^D#5cM-)lkGLT6z{;yGYjvg)}@> zX&hun?#)OakThPS5$DhbEW{n`WaK5Z@y5037~M#WXtIMMljU(l4(lI?{2?T5A{A-6 zqfkS}0Yis25m^7BdfbfCX=Jd^Yu1AQ)up& zYZ2l2!#~@6M$+QO-U760#oby3i(2e)|Gb=S6-{oIo^AfXQ7duX%KNyDFS%82S4zRU z?M+yl7NSkq8b?XD^_rxetEla(u9V(xn@U(aQ&GE>h?Grov$0zTBWVXEN5{|Ja;NJK z^`Z{f*$!RnW-qr+6OK+SOmBzZuB3unM?_d>KoRzncU>;MouK5(C`6ZWQD}KWTRcqAK9JJGmF9zzsm~cI3GAM7VXsMSAKV-zn1VQTftQp4<~N z+ap8T>k-ydhv@0;?MVykHN^e%nx{9bm#ELW*O#;pT-4jM+dGlm-B{EoA9II~2SD)R zY$W$bTKBch_U~W!H*oapJ@1=U=w5IeSmGFvk?7x^9aszN$Mp6ehz#y04_t}B-b4%% zBL_+K`sS|(+pGr(6eX@n2XA)=?xYOi&hei`~5-9irbGdiQ0B%4UeIc!)!B z@P*AVoNo9va_||(y^s6u$jjnkR?$Arxsk_rN4^M;e9*(bb9V^gHo}}TB8(gsLk=Z- zjWQ?>e7HL-p*KdWIQ)*jR|q*qJvS5?_&{A~xgtid}~8 zgI1#Bwm0LnNJwPY>y zB8L84!^?RVlG+!3DZ~4X;9ZEhv37U~LI&c8?+cY697Mq25E;ZaVt^L8!HV?bL8N68 z%{U-OAw-*52n=Fi>Kb`gG51Uzc8EYl8=*ol$a7lM?+Rp(1acWOf7!lBg(TaruW zhD)!oOV4?it07AYUzdgamqm9_Z#()VvCDh_88r&-hAd;h7QUI@rcRZV?}gfMXLjK3%q2g+HLH=s+PTK4PLe3UD5QHu`ph>Wn1}T+~wrBrrojj4Y00( zT$BC0@vrU8oahL`uj;0;X2*U7Vi!mxx;V2vk%zX?ASeY-1W^MgwgFL@$T(9ZeRKD zWg)kVh6&HJccTLLD0X+hQ}2=T-79n$Svvk_9U%e?H`dnmQ{Nb2A*X#aT}=5}1e zKTg~C)DHIi4;Y~PtT>!BJM@5e_kbuKBSL>TzvkR^jE{*>gjS#vYZRd#>SP{o z#6cb#OC6Zwj?A1+(R8Qbjwg1NDWgtu=bg7yBvRCagH{i;X{fa{JsugvWwRhFNd)ZlewcLI_N`DQD zyZ*y|QIF#znCe7~KrhGmu2*o^CA539pldYl3LbaW?}W99#V&!cD}2{`py>k;_5ww@ zT}g3`I;&vEUaApZ;c%;{i}Oz0EDnc-Ugx7O4)_SS@Z10HQoDJN-*CG)>@KdK?f8^_ zir|0dEdRTlAmK-MmnsSMeHr;zNx7l4%#yAg4}ZuI-dg+r3vgfk3JHE|cZH=9oSyW<#_roCf`H{d=t z8lG7+sQR{xC1ugwTWs^rI*3Jk?BSa~Szqwj*V@VS(%+T3$qd)x6OOh0z0+=*KPm4d z;VXq~hjL^y!dMMXbfNZo^>TQK6yN+AJY&qta_Su3;>V7MPoM4;Hf9CWSs0$Xq6gE+ zb>!Qe+;$MjCa3q&UeX;C?Vyiw%xANIH%rT?Vchtm71*uLSRQHj6 z3gMRn&Jd5wJ`hUc|H#V6X)k;Inxv+QHT>zsllw30#${P>(O+MGNb@z^?|#~6P@}*_ z%*`;w5&Zc;kqj~#jf?{=29mk;cR^yn-q8cjwtZ%A?Qr0U_Q%#ICSrg0MPCKEjMruE% zu4AF~j|QKtfcBjJb=`~>sHa{<&x1$hxq(gl^e01=)q35UqpQ2RpIn|L>wW>Xa|VAc zqCK7_%?cGX7)V-8nX{}X71DA{u6KtyLo2A~z6BqrsM?Q*&OWozsjo*`3=6z5_KP!` zMY>=5dYJrBN}n|j-o5td4J5Z@dP+kVCTu3i=-9Lri=zr_GLD27z|7;;J%zsn2!$Pg z`Dyi!*VjadMDuFO2i4}8WS4E2#SeY}^WQYRk~vF1vr)bEG@lb@<4hN1vs7-hB;!WT zPj^R~!rv02mc@rzqIOSYf8pWNPO=A>GOw8ydqAnGmwgFDP|&`yHS97GJZ;&!6O9D; zBsFd}WH?kEVhtQC&vy*AypH8qc6&cE!;@4Vdy0P_c#+!neTc7r;b2f`z0C!B)BHKc z9}(y}sr2#Ml}20551$$0n?L990$g{v6O_OM;ex`$r(QS-&&6;PKYC;=ANGtU#>(Go zJtG|JwN6dJve!q>E_SKWuh!j|DOInvzjEzekJY z1hbQvQOGjY-AaiM;cqpjx)mj-77Zir{L0ES&JljNylH zFEPcdAX%BETggBf3c+uYw_~IU^NQbdI*vts&U{Q!+a!C(ecvJKPUdkJhurJ1@fglF zW9n%pNx>QQaK}0`x@C?|wwX^69#75Lh&N;;Z{X7y)4QZ116Gfkt+TN z-($oB|Liq8Qz*ruDu+{hBMpdrr%o{4@+(3{M?!W2pQY(f;%&2#>ath^r< znFvXl$lsKCDgER^-Lt{9U?;!m?Qz<$?}Te1Bi?V=sK*;fb(G33V685zsF9nkS@2Sp zQ%Ph)qY#{wJ1PE1wLR=psdn-=Q3THV;}0qgaM(Xd(mb}h3EmTVxd&NRq1KwyqEMOn zsS2U?XNDD=TJ2_TMIN-pYW4G49o~1#O?h4t^y_O|a88$mCqLKxb$_-*Fa_)q%KdbE zNV9#%t&HTDOTMpVE|D&!iZgaqUp88M;*V=xZt|9aR>pk4zFUoFsDp*yyv_*Kab@N< z1}oVLw=BF{-6@f8&iG(y6)L*1+dk2Cz@{S0`f zwO-uO^Jkgif#7L#eZ7P0w+sWM{%qrX=&pMn8a5p^+tJVJ#3n++{f(RgWff-7 z_n2DAM;(J2;S)Q8XRW8SPy90vmGrLl8#upt-H@9{bd<{Q}AVFgP*J#x&~7jknW8h`cy(<94V(t^YKyiN(x;%5J|QOhH?Sll$oPK)OD>8V%kO(yV(EudId}v#{P72wOpb(H zS;ptDY)1yZ<$b)%?$pclGBIBvQCOx_dGPf|`qWnecpFh|p>n#g1M+LlO<<{%|Bz7e zZSkjH@;^C^qWTmki*5o-&U(&i9=)od!6CP@S+IU*6zi6o@?5RuaQr7bn+k&lr)8q= zVvW3rR`d+*QW@p`?cfD$+q}iP`qdLJ)g-tFx2{o;a(T)M$I_NzfuaCr-I(?3Y(WrbMtY-~E-SgaW0q>^M=&t;@QAsTn9r za3YU@w;;o@o6ySiM{j~fX3($z1%jDg4mKMSpe6q|6lU{rE-cY);BOc(l<~3mW^yso z3e!Go?3+LR5fu&YW6H2UpJvJlkfJTlbE05_efdVoyRjH=bJu3YMPAX`%oQn+_Uos* z+$MrO_R~xAh~#pN8_oS;9_%ygEX?dn3}(*`T_P!8*A!9I|J}csS91Jcp55& zl?2}p8%2o$<{TS|!J_BC!Xwy9tu1r}Igu$w*}z<2UNtN?8aN-mmi~5rV>8xiNFgUH zA4&OC*XN`JT^iVMk(s2{jpMZY`FTcvwL%-fVV<&H@G&>vRO7y7!Pk3smWAo1X_iHA z8Yr!bzeNpwDVZWmU9T^;?6b{*w+yW`hTi4`dqk&XY&1t~mhyV7$x>nRd#DW7st1OO z?Q216)V6gKOP1))BC<%UMiNGhL!!bT(XDQcdGsqV!#a8cy!w7<)PW9$Q*FKfC``ECQZhsECT!XKKQk-r*eRn5YA(K{_$C+MBly`jr*0}q{|_y#Xq zybg*viCL<$Uww?-`%TX|vNv5PSAN`^y02diWg@Pq9+PIw!l*oU@pc`&;@x(gByMDp zYtR_B_b3y9V)hb!P&kavXyA*XH_&Y?x8Ph#ibCBSxFYr~+)<57WWfoff4ce^u3Q_c z>yceQbDMs2C*>Ya+uPcjU$4SS{eB z#&(yn^?23}wY=TD+~ISIT4rV4@1cH3a2?jxB_Zb;@+BKK^Rb+)fzSISo$a_ZJnzD6 zH|WGizw}I~o=&tV07Y%m^M|~}Ai46BF>wYF^FW8v`zp7+2XiFr9{*5ljD9|YgRsIB zA8@qlf$y#!QQ~Nss_#5^4jnzzrQSU5rcjIzdfUcE=A_%oY5U4ie8il-F{1vFcR~pL zo29(bqV6ND6;~x+(>tj37G}w<*rQrAGM&O6mNh;P{gqsXU_1hPyDE@G#uPdhE_08Q z|C_Qa=#I{^9LJC<;B)5k$-#hx#06!{GhZO81E`=9Rc-h6>DSxiKv9_%=U9g%vw!}c z4g6HN{oXC6U}q;HqV-cvT+`7PUYt9xiYT`i=mw>3iuHavwI$9EYcLw2fiBpo_L31gT+d8+)LHH<)$u%3XDB|f zB%tMx{F|c|L|2zXAyNDRWU3zaeCijqL$M6I=y-(2XOPcaKA)Wc;rrVw#2FMfmfwlQ z^rQS61XKqfShgG$yoxRPU&}A#r3xr#JT^=<{^4|qdN{r_^!{8EX}Jm7E74q>Z|eJkll# z5@12Ho&tMn{P+RkF~+QwjGcGxy-rANGkS6f>=!5d9-Tb0!ue))P;K<}gNF}Sa)%aEBWt2@GZ0JvH*700%%bpf=%!z7PR|1? zNlm7)2s++uaz9IH{6`@kyq(M3zDoH|I@BLfSGX-|BWE%{mWHe=UY_54A8>y%PgTHD z$stT!=weD!yS|)t7%kLuAMz`^9$cxvr42uw28!Y zUgm_bFcZ3*7vY2{x_TZ+~kQE1XwtZ1cg`+4f%` z&Khi+p(?xnMR25mqellhV8YYI2YH~~+cKxJ7sl>}!UCEa2}jL-h+Qp_ogV-0Y2Ekc zW0_^77YP&N-H*_`TE2&4Jnwol`Yoi<@b3$9k0C99Q$*_(ia%8Z;=!w#g1TB1nH9kY zmKqtUEbH$Zk47T>9Y89GH?O`gQgcSbk3!04&di-+h>{XR$m2badv2itcTt`;A)pBBMc zccQJl|3Zwv_i{-d1UibN1h5`JVt+(xe_Pfj)@3+4dp%uB_&zfGXbj{J$rozdG^sq8 za$=*+rf=D@aax6eu6NoPo3{(%?{d*!t%&)a^$KANZu&y;FF+i2`y1+N ztJ3#!kq?WTUH0|$*+pIoX$PH&b@*@ZHeXFQN?sh&`tA3CmexT5QPb@HryoIAc;-`J zHelN-fI!}F?M2{j%C~jxz#Wf3{#3j&&HVVI@2QU8ZQ&n`e*)-WKjQHDV9}4Ily7V> ze@0;7W0>nR4l-7XA1_jWyxcH-x)DG}5hNJ#ogZe;G7u!*6tu7&!~qO8{1_}_9Vo;U z@h4M(HjWS zmk*t?472hyR?i7Dw+=Ck2zCigN1oSgnP+{+fxKO!opQf!X=m@sstlK@ zguCF*f_*5wqnm7OtRv!?B0~!!etKE}iv0v4A`_b;W2_=4$fLe9xaSH-Wx*nCoFfa1 z@uFYrd>~m?ctjdgwECV-v%G%nKvWh7L4#*hH$`-HghBE~bOkVmn<*x!*g8hXs@*z* zQ8%-H?;91m>uy-v}T#j(u<$(U*Gr*ZJ0Lv6XFsO@Wihnu{AUTg8_Kdfuh^AJsqj{-8 zY!gRP;=EEEXQ-86<}E%=Fz23<))xGtbbKH)L5jnkMRvtB&uT*6n5n6)OYhd8~& zsDhu52YxGHTvwbT z=oS54HpT53Q1~P<6GpBm^3(r3)iq7aT`%>6ED%|o>RXZ!P5HwEb zkV2uL9hYV-^CIo7TS_u>QtBWu%|@@7@=Jz@p>t$nZe*mYND9w+SZNxNel8ut1dP^7 zC)CT(9!#3_3~aVZ%ujRh+SKr|N$V1c!OMf++|9V0O^(>i81l^UZ_a!cnl*zP%t#u{ z`XG|Uu$P|vEc*j63EvI6E|Rr47vJg?*4~`HH=vEbb zc>dF(FZ+>5nzvr|88fJhnQ+=myLd2%9~ME<@(VFXfP5K)1?Dj6flNF>wgbNgBeIL+ ze|78GD~0}Izn3FTnkQ56i$g!>wpY$Ws$6c)l#%9Sv5$GO7J0X#fSjD<5~bQ7(0Pms z`9f5neU5a|bOO!ve846MLTQ$@8LwuW&uLp=U7sJnnW8#hprjYgmR|T79Y;=8*cMh$ zNEwSrj;$mO<^hr5-M-7YN*M8|pRYxRl%IiD3;M}+xZ6s6)siuLAGzP1#z zijx1(FR?}!^HCL5H5a^BAoss0Irqv34&{HF&rfX0N>cop(vpW4$0}$Q-(xO0-zcc8SC+M!G3Ny~WBH6ls_Y&^^AOUq+gfZb7A{TGF8oFyGpd67EZTRiAPmXl~z!2;fYJ|5oZiKDwRPj;B9)9(NGne zPqn~B<=OpeVyh;U& zG~xA?rA3;NnuGT%&BYo#^y|gE>K*LJb2#gzs2hXsR%|ea+uPMrRMpSeHtbMUNVi0a z4mP@SHAH4KxpNhJKG5}s*DW?R$zPUyr7jNgNi|Wbdjf03W1s%>O;@7iX>f3cK}^I} z^H2-f3!i2-{gzOl7V|Lcl8pKsu9nYm{I{sCw5$c3QCL;hda2c#v(?;GR`{E%ZC|#n z&!;so13YvIf{3-3`?Qs$w~Y@MwZq#K9~8qf+Ffuh?SJelR)kwn)Ez2v?H!kGW!@bd z!x8A=_7$JTU9OCMcq1aZ`Pi=W^s;#dUU=CWaQ&b%V5{chLD!2vZKs!=6;WN3;$2Ct zrKAfTbeUh44BBWg9e24c8SKmMT>XAX(|y0~cVj`y0+(AaL%rVd>LU{v$WoYiU?wM$_h~Y^r1b zM^C)}`@$ce`@SYD{dVR38dtvRHhrFk?Q$#wQ8@8GB#g~Jhe@3=y$4(a#9LjPJ6HzrOVT2QmH>=P<#ZIWgZh{{m-R}Mdf{#F_*<&X$Z4eb&h(Yi$lLwg}aX53|ZEUw*!G)#e{L}Y&XlSIbc`E+hLiI>7&MpKpt4|_NXr56L*b}<)KvOUbur<`0lXaZ!!1My?-%lF0=|E1(~OgK#21o z69`c94v4w?2oi@;6ZP?Ed!#xKYDXL1y9N&%Lt!b|ZeJX_UVK3}O%=Zc<{q=~`+`9%Ju_b7 z2Q1w-hEVy#SdhyQmF1MHSzaWPuVaDg-Aa_his;!8H+EWVXHji?#fxCI!C~Yd@UqtE zvJQ4!g>6j@yL?D9sF}SYhWyJ9UL{vWy&vth6JJx^Su=dG`VG5Eqq-*HxZY~Hs4qI< z1zy)h&RI&12jjr&(xdA{JL?YtE0K;%u9BOQNCX$#rit-J^!A2Zo1soQDbRR4-FPhv z5c(^7Gf#54z!6=83gzAux7rw%yIuoulm8HI+?Q|J}2W?DybZAO9ut92hxhkAQtoU16`+ zaW8pvuP$;sK64M^u+IdYrRLig+uZX)?mq0?XQ6K}M_Vet9Ed%9imxY%dAdm@zw9G!>n*@2QKtNiTy3VcW5ua3}w zLs|SCFzzV5`Dhz)^g7^J*Xfr=<(ihskumO=y7ahB@+8Ul#1fa#oxQfJdMsCY=+LQu z$c8pFS#g6#Z_}P$fKOgRPkiVrtZ|6%YA3;b`X213fpPmmptBJDGo0U9R67Bs(|H{I zIo}1sUu`FL_bfe5Pa3mBqIRAF+D~J@=(#vCGuZ`I?v>JKB%(+Q0|<(oF16V&i9m~4 zxYJ7d%NEpLzSM>bXdmB8UBZ6#X6T|l4o!(7iv?W`fgF~x2V()(P^YUozUxU`WkV+F z!Uu4@WOBTKx)v0;2$jO3+0WKMjU)6}A<*?!+{HG1^CuAY0E9a?!5*Vrb^~zUj`&VS z?Dg&ePVMNT66cD-ZQ|Kae4K{D@#1i1Qn(AX(`yhC2cq=NS#S8CahXcoMcfsBRU7mw zt&7~74R;uKxeUc!g8;sJIQ-soKI|3#P-nQCz4%kaU2gqnuQLumfmjL`?2JcG|2qfQ zxpvrzo&CQicz0lzq$pb5NvhqFODgZtsx!KfS0C!J#8u*ie7@=*XocE_B=^4$ z$GxNb_>}*7lPU|HG>t5GwJhU%#j0j1O6q;t2To5TKVXPL;$&F@xW{|ok|X)Q4+CXh zE3gudsC7OCwekOXR76t!k)zV}+aT+?^~6W+&LlPY$IMT;7$QdAa>q+_ebxNH147rR zh|uDaZufCQd*49B+cRsSD@b28*^;xP+A(CWVby^6_*CtuH?wcwPV5jE@u({BWvPZ2 z3O<|oBqxQqqxlJ!8KkL6T>t&E7X7n`A1AO{AsS)6&B{%pk zS>UsA+%%1jE-4S4o)zEW@wDmP={qXsR(^s8eLx~@{h+A!2C&2{rbff>`1(;J*IBJb zgd2aLP_XA}RwJI+EMPS8J6!cJ3AiLZLj{sQ2QL2eT3FaDgi*W6ER0?Ck$L2cLVW$` z4X_z$1G}joB@_9YATslJIZ>^U5U>8V^s-1ck@TWq{aWaSSO2nopm0*FZ?FRW#?hWy z{R%(v3e1g_6SW~qGEUzt1cl+%zsxx;HsqxpqIMNG{i8xp&qVF3`tN1f*Frnq1=Y=J zw>mVSj1A(NR&Uh5A_RnZ_3vn_6TRG?m~)o`(-ld#(vAA}uGOz^{RW=m2aL~C&B%uN z`o&#F92W8Es~165!k8?3`>jc}PGYy|Xw&xNr-n|C|4m;F;7+JCrQBy!_pJ*&JT9#N z2EUMmEX9S30*I1!y}j1k!#eEi3W~CW(1<^5JI#%qIl()fr}(Ebgc!t~4{&k;dq=ZY zEZaH2Vy7N?+ zXHjeH(Y@Zqz4*rWbgGcxabh!yN+F5cDX)B9tQb@E_Y2)?sPg6GHl+F6D17#QG;Dv; zkWOG-ij6GZRg&c)CIt45{NDbLJ2JT?yujZ%*Q&vHF^hL%h59%|x4m@ijqiQLr?1~{ zg_;=tMf3{&d6iBdhLK*T`Lrh~h>Z6aUNK=gF6zWiSG&9?dAxaB_Z`W}w>UZOrOL#n zH_z`)#D|wJk>8D!l@rtmi3|D4_*+=vu69ifuktdpg}k)DC_TVw%8bKDc!+%|A&}(i z$t^Csc+M+$jLc=kY@m8hTfG-0&1UVH*E2~| zBQFfsy)_0)>uMU4ZM9DCPmaDmsLa{6wf-muo3K5o>Q^bZb=#P46xD91tEhPA{6Kv~ za=K-@Z^xoOLl1E>(@Jq|@7a0(&)=xyT(mSF{&8EwzMACbO4bqrP&A}v<`^{D=k&P| zZq#vb(%N~q(s@{EVX0K89-{2%gECMg6B7c{hdDYNQjcP^JzE*qcHZM!^(tQTb^Rv& zW=byp=kOk|oLtq}POHuIENmz4z$l0P5sO)pqDMDWNN(QWV+%z~eAYw6R&6%vvvgdj z`^p9YQvbYzp~CbiC=t`2LEp}izJ-bpJi#EY_9EtoP%B}^HgsIY(!rBbxf+V zj$q??hZ;CX^Vr8o6q+_9w)QPstjt34bPn1jV3yiWv*wY@^xN_60p0k*(%TmdH3_l2 znUT*e6gB52v}Rse2|&iAJiLeBvAz98YxuP;I}H%+SeI^5-u1C{E;$ign`z;&t~)tD n!;kY} diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index 58bcc48..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - purge: { - mode: 'all', // Removes unused font-awesome fonts and icons - content: ['./index.html', './dist/elm.js'], - }, - darkMode: false, // or 'media' or 'class' - theme: { - fontFamily: { - 'titillium': ['Titillium Web', 'sans-serif'], - 'poppins': ['Poppins', 'sans-serif'] - } - }, - plugins: [], -} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 3daf059..0000000 --- a/yarn.lock +++ /dev/null @@ -1,2992 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 8 - cacheKey: 10c0 - -"@babel/code-frame@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/code-frame@npm:7.16.7" - dependencies: - "@babel/highlight": "npm:^7.16.7" - checksum: 10c0/bed53eab44e67480e67b353b94ab9bef7bce6cdea799dde591c296cfb47d872348f20cf9a3b82b0dbf8530bf67ca438b5bed3d80622ea76c7227cea3e6f04aa6 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-validator-identifier@npm:7.16.7" - checksum: 10c0/5dfeea422c375edef9bfc65c70e944091b487c937a1f4f49d473d812bf4d527c4b7730ab5542137b631b76bd6a68af37701620043d32fa42fda82d2fe064a75e - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.16.7": - version: 7.17.12 - resolution: "@babel/highlight@npm:7.17.12" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.16.7" - chalk: "npm:^2.0.0" - js-tokens: "npm:^4.0.0" - checksum: 10c0/8f3a6da93c9c07040684456ec5308a8cd888ac3342e04f0e67ed05df372275283c99b8b5a59f273d04bd8b3972965b81792d74c7487a255599dbe11f4d085a53 - languageName: node - linkType: hard - -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: "npm:^8.1.0" - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": "npm:2.0.5" - run-parallel: "npm:^1.1.9" - checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": "npm:2.1.5" - fastq: "npm:^1.6.0" - checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^2.0.0": - version: 2.2.2 - resolution: "@npmcli/agent@npm:2.2.2" - dependencies: - agent-base: "npm:^7.1.0" - http-proxy-agent: "npm:^7.0.0" - https-proxy-agent: "npm:^7.0.1" - lru-cache: "npm:^10.0.1" - socks-proxy-agent: "npm:^8.0.3" - checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae - languageName: node - linkType: hard - -"@npmcli/fs@npm:^3.1.0": - version: 3.1.1 - resolution: "@npmcli/fs@npm:3.1.1" - dependencies: - semver: "npm:^7.3.5" - checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd - languageName: node - linkType: hard - -"@types/parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "@types/parse-json@npm:4.0.0" - checksum: 10c0/1d3012ab2fcdad1ba313e1d065b737578f6506c8958e2a7a5bdbdef517c7e930796cb1599ee067d5dee942fb3a764df64b5eef7e9ae98548d776e86dcffba985 - languageName: node - linkType: hard - -"@zeit/schemas@npm:2.6.0": - version: 2.6.0 - resolution: "@zeit/schemas@npm:2.6.0" - checksum: 10c0/fba8a267fa1dcdf01f925c56966e52cc82dffaa2230f5857a4bfac37708f410264e9de42eb6eab18433af6e3d55e1d9c9c5be36be5a073684d1ef1957c729cb5 - languageName: node - linkType: hard - -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 - languageName: node - linkType: hard - -"accepts@npm:~1.3.5": - version: 1.3.8 - resolution: "accepts@npm:1.3.8" - dependencies: - mime-types: "npm:~2.1.34" - negotiator: "npm:0.6.3" - checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 - languageName: node - linkType: hard - -"acorn-node@npm:^1.8.2": - version: 1.8.2 - resolution: "acorn-node@npm:1.8.2" - dependencies: - acorn: "npm:^7.0.0" - acorn-walk: "npm:^7.0.0" - xtend: "npm:^4.0.2" - checksum: 10c0/e9a20dae515701cd3d03812929a7f74c4363fdcb4c74d762f7c43566dc87175ad817aa281ba11c88dabf5e8d35aec590073393c02a04bbdcfda58c2f320d08ac - languageName: node - linkType: hard - -"acorn-walk@npm:^7.0.0": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 10c0/ff99f3406ed8826f7d6ef6ac76b7608f099d45a1ff53229fa267125da1924188dbacf02e7903dfcfd2ae4af46f7be8847dc7d564c73c4e230dfb69c8ea8e6b4c - languageName: node - linkType: hard - -"acorn@npm:^7.0.0": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 - languageName: node - linkType: hard - -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": - version: 7.1.1 - resolution: "agent-base@npm:7.1.1" - dependencies: - debug: "npm:^4.3.4" - checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: "npm:^2.0.0" - indent-string: "npm:^4.0.0" - checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 - languageName: node - linkType: hard - -"ajv@npm:6.12.6": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 - languageName: node - linkType: hard - -"ansi-align@npm:^2.0.0": - version: 2.0.0 - resolution: "ansi-align@npm:2.0.0" - dependencies: - string-width: "npm:^2.0.0" - checksum: 10c0/a3e3e5e58146ca7da775b919a480b8588ea76d0c91aa03c055535de25f327a09b72f7c10be2de6c84a6e1d8387b89bd9b4c98321b1759fdf4c2767c6f10ecd29 - languageName: node - linkType: hard - -"ansi-regex@npm:^3.0.0": - version: 3.0.1 - resolution: "ansi-regex@npm:3.0.1" - checksum: 10c0/d108a7498b8568caf4a46eea4f1784ab4e0dfb2e3f3938c697dee21443d622d765c958f2b7e2b9f6b9e55e2e2af0584eaa9915d51782b89a841c28e744e7a167 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.1.0 - resolution: "ansi-regex@npm:6.1.0" - checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.0" - checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: "npm:^2.0.1" - checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c - languageName: node - linkType: hard - -"anymatch@npm:~3.1.2": - version: 3.1.2 - resolution: "anymatch@npm:3.1.2" - dependencies: - normalize-path: "npm:^3.0.0" - picomatch: "npm:^2.0.4" - checksum: 10c0/900645535aee46ed7958f4f5b5e38abcbf474b5230406e913de15fc9a1310f0d5322775deb609688efe31010fa57831e55d36040b19826c22ce61d537e9b9759 - languageName: node - linkType: hard - -"arch@npm:^2.1.1": - version: 2.2.0 - resolution: "arch@npm:2.2.0" - checksum: 10c0/4ceaf8d8207817c216ebc4469742052cb0a097bc45d9b7fcd60b7507220da545a28562ab5bdd4dfe87921bb56371a0805da4e10d704e01f93a15f83240f1284c - languageName: node - linkType: hard - -"arg@npm:2.0.0": - version: 2.0.0 - resolution: "arg@npm:2.0.0" - checksum: 10c0/5afbe803aec7cd385706b989338800866ea4f20b774b83f2ea4dd2bf89b829399c60b9df0d44af4ddbc555356514ab5bf3b0cec7a3d16f4dbeba1d35382c99ee - languageName: node - linkType: hard - -"arg@npm:^5.0.1": - version: 5.0.2 - resolution: "arg@npm:5.0.2" - checksum: 10c0/ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e - languageName: node - linkType: hard - -"array-union@npm:^3.0.1": - version: 3.0.1 - resolution: "array-union@npm:3.0.1" - checksum: 10c0/b5271d7e5688d2d1932928b271796dbbddc422448557ab05ef6f34a9f84fb645eb855384feec6234bf59c226053a0e21b8a00b0e6cd588874b90a5c13dbeb64e - languageName: node - linkType: hard - -"autoprefixer@npm:^10.3.3, autoprefixer@npm:^10.3.6": - version: 10.4.7 - resolution: "autoprefixer@npm:10.4.7" - dependencies: - browserslist: "npm:^4.20.3" - caniuse-lite: "npm:^1.0.30001335" - fraction.js: "npm:^4.2.0" - normalize-range: "npm:^0.1.2" - picocolors: "npm:^1.0.0" - postcss-value-parser: "npm:^4.2.0" - peerDependencies: - postcss: ^8.1.0 - bin: - autoprefixer: bin/autoprefixer - checksum: 10c0/80efba20a1884598098eb718c625020f3d234a285e562997c17a5f78560b307b0494051b8851b03862e58a78bafc9e4c9c0d1828293e438a22c935834b6d629e - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: 10c0/d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d - languageName: node - linkType: hard - -"boxen@npm:1.3.0": - version: 1.3.0 - resolution: "boxen@npm:1.3.0" - dependencies: - ansi-align: "npm:^2.0.0" - camelcase: "npm:^4.0.0" - chalk: "npm:^2.0.1" - cli-boxes: "npm:^1.0.0" - string-width: "npm:^2.0.0" - term-size: "npm:^1.2.0" - widest-line: "npm:^2.0.0" - checksum: 10c0/9df2e59dd6622cee184aaffc017b3b3d506f1f70cddb0a7c19d22c865db4222faa9940512a7a6e2065f48500f9310a04d27af2037b1afeb2143e79430c9af476 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: "npm:^1.0.0" - concat-map: "npm:0.0.1" - checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: "npm:^1.0.0" - checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f - languageName: node - linkType: hard - -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: "npm:^7.0.1" - checksum: 10c0/321b4d675791479293264019156ca322163f02dc06e3c4cab33bb15cd43d80b51efef69b0930cfde3acd63d126ebca24cd0544fa6f261e093a0fb41ab9dda381 - languageName: node - linkType: hard - -"browserslist@npm:^4.20.3": - version: 4.20.4 - resolution: "browserslist@npm:4.20.4" - dependencies: - caniuse-lite: "npm:^1.0.30001349" - electron-to-chromium: "npm:^1.4.147" - escalade: "npm:^3.1.1" - node-releases: "npm:^2.0.5" - picocolors: "npm:^1.0.0" - bin: - browserslist: cli.js - checksum: 10c0/a5fa95920cc66997b240c9e6f9bc16f0f5775cd91115c303f88df75f68dfd88bc7230f2576816a1d02d7bc8b58ab796bddf891116296e98ffffb8f996e4941c5 - languageName: node - linkType: hard - -"bytes@npm:3.0.0": - version: 3.0.0 - resolution: "bytes@npm:3.0.0" - checksum: 10c0/91d42c38601c76460519ffef88371caacaea483a354c8e4b8808e7b027574436a5713337c003ea3de63ee4991c2a9a637884fdfe7f761760d746929d9e8fec60 - languageName: node - linkType: hard - -"bytes@npm:^3.0.0": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e - languageName: node - linkType: hard - -"cacache@npm:^18.0.0": - version: 18.0.4 - resolution: "cacache@npm:18.0.4" - dependencies: - "@npmcli/fs": "npm:^3.1.0" - fs-minipass: "npm:^3.0.0" - glob: "npm:^10.2.2" - lru-cache: "npm:^10.0.1" - minipass: "npm:^7.0.3" - minipass-collect: "npm:^2.0.1" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - p-map: "npm:^4.0.0" - ssri: "npm:^10.0.0" - tar: "npm:^6.1.11" - unique-filename: "npm:^3.0.0" - checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 - languageName: node - linkType: hard - -"camelcase-css@npm:^2.0.1": - version: 2.0.1 - resolution: "camelcase-css@npm:2.0.1" - checksum: 10c0/1a1a3137e8a781e6cbeaeab75634c60ffd8e27850de410c162cce222ea331cd1ba5364e8fb21c95e5ca76f52ac34b81a090925ca00a87221355746d049c6e273 - languageName: node - linkType: hard - -"camelcase@npm:^4.0.0": - version: 4.1.0 - resolution: "camelcase@npm:4.1.0" - checksum: 10c0/54c0b6a85b54fb4e96a9d834a9d0d8f760fd608ab6752a6789042b5e1c38d3dd60f878d2c590d005046445d32d77f6e05e568a91fe8db3e282da0a1560d83058 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001335, caniuse-lite@npm:^1.0.30001349": - version: 1.0.30001352 - resolution: "caniuse-lite@npm:1.0.30001352" - checksum: 10c0/8ef195fbf7d8d3be7275b5915d517d4a25196a8ab7ce2b4412f39d9d3d2a0128f61936068e5022004f58724414d575516a4eacc6f3245bdcd1d86b11a0b900da - languageName: node - linkType: hard - -"chalk@npm:2.4.1": - version: 2.4.1 - resolution: "chalk@npm:2.4.1" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/f21b77e6e791d7c2c3e44bc2bf034f11ce0806f0e2f75d5b18cda6822a8496864a9627854b540595822c33db6c6ca5aa81081889bd595d60a871e2759c0041e1 - languageName: node - linkType: hard - -"chalk@npm:^2.0.0, chalk@npm:^2.0.1": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: "npm:^3.2.1" - escape-string-regexp: "npm:^1.0.5" - supports-color: "npm:^5.3.0" - checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 - languageName: node - linkType: hard - -"chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: "npm:^4.1.0" - supports-color: "npm:^7.1.0" - checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 - languageName: node - linkType: hard - -"chokidar@npm:^3.3.0, chokidar@npm:^3.5.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: "npm:~3.1.2" - braces: "npm:~3.0.2" - fsevents: "npm:~2.3.2" - glob-parent: "npm:~5.1.2" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.6.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 - languageName: node - linkType: hard - -"cli-boxes@npm:^1.0.0": - version: 1.0.0 - resolution: "cli-boxes@npm:1.0.0" - checksum: 10c0/1f79cd17e39cc00710d85c2a2d33ead781d1215b72546b31cfb4da5b2edc1f12ef8f99af67afb8a79fa1f92ad6b54505cc245afb16eee5fa01772f87353ba6e4 - languageName: node - linkType: hard - -"clipboardy@npm:2.3.0": - version: 2.3.0 - resolution: "clipboardy@npm:2.3.0" - dependencies: - arch: "npm:^2.1.1" - execa: "npm:^1.0.0" - is-wsl: "npm:^2.1.1" - checksum: 10c0/171c7d216dbec50213e35796740eaf79e39fb3442b7a8caf7414c2aed1da14e4d040696126c467325641612267a3dd43740d2ec29719fdcfb62065c6a2f91860 - languageName: node - linkType: hard - -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: "npm:^4.2.0" - strip-ansi: "npm:^6.0.0" - wrap-ansi: "npm:^7.0.0" - checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: "npm:1.1.3" - checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: "npm:~1.1.4" - checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 - languageName: node - linkType: hard - -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 - languageName: node - linkType: hard - -"color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: "npm:^1.0.0" - simple-swizzle: "npm:^0.2.2" - checksum: 10c0/b0bfd74c03b1f837f543898b512f5ea353f71630ccdd0d66f83028d1f0924a7d4272deb278b9aef376cacf1289b522ac3fb175e99895283645a2dc3a33af2404 - languageName: node - linkType: hard - -"color@npm:^4.0.1": - version: 4.2.3 - resolution: "color@npm:4.2.3" - dependencies: - color-convert: "npm:^2.0.1" - color-string: "npm:^1.9.0" - checksum: 10c0/7fbe7cfb811054c808349de19fb380252e5e34e61d7d168ec3353e9e9aacb1802674bddc657682e4e9730c2786592a4de6f8283e7e0d3870b829bb0b7b2f6118 - languageName: node - linkType: hard - -"commander@npm:^8.0.0": - version: 8.3.0 - resolution: "commander@npm:8.3.0" - checksum: 10c0/8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060 - languageName: node - linkType: hard - -"compressible@npm:~2.0.14": - version: 2.0.18 - resolution: "compressible@npm:2.0.18" - dependencies: - mime-db: "npm:>= 1.43.0 < 2" - checksum: 10c0/8a03712bc9f5b9fe530cc5a79e164e665550d5171a64575d7dcf3e0395d7b4afa2d79ab176c61b5b596e28228b350dd07c1a2a6ead12fd81d1b6cd632af2fef7 - languageName: node - linkType: hard - -"compression@npm:1.7.3": - version: 1.7.3 - resolution: "compression@npm:1.7.3" - dependencies: - accepts: "npm:~1.3.5" - bytes: "npm:3.0.0" - compressible: "npm:~2.0.14" - debug: "npm:2.6.9" - on-headers: "npm:~1.0.1" - safe-buffer: "npm:5.1.2" - vary: "npm:~1.1.2" - checksum: 10c0/989d50d8191392ecb0442775a0374e4baceeb266fc5abf21d8c2857d52f2300d8b9c4051f6edb617c2aff0104e854776884b611e77f63cc72cb319da43036fae - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f - languageName: node - linkType: hard - -"content-disposition@npm:0.5.2": - version: 0.5.2 - resolution: "content-disposition@npm:0.5.2" - checksum: 10c0/49eebaa0da1f9609b192e99d7fec31d1178cb57baa9d01f5b63b29787ac31e9d18b5a1033e854c68c9b6cce790e700a6f7fa60e43f95e2e416404e114a8f2f49 - languageName: node - linkType: hard - -"cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.0.1": - version: 7.0.1 - resolution: "cosmiconfig@npm:7.0.1" - dependencies: - "@types/parse-json": "npm:^4.0.0" - import-fresh: "npm:^3.2.1" - parse-json: "npm:^5.0.0" - path-type: "npm:^4.0.0" - yaml: "npm:^1.10.0" - checksum: 10c0/3cd38525ba22e13da0ef9f4be131df226c94f5b96fb50f6297eb17baeedefe15cf5819f8c73cde69f71cc5034e712c86bd20c7756883dd8094087680ecc25932 - languageName: node - linkType: hard - -"cross-spawn@npm:^5.0.1": - version: 5.1.0 - resolution: "cross-spawn@npm:5.1.0" - dependencies: - lru-cache: "npm:^4.0.1" - shebang-command: "npm:^1.2.0" - which: "npm:^1.2.9" - checksum: 10c0/1918621fddb9f8c61e02118b2dbf81f611ccd1544ceaca0d026525341832b8511ce2504c60f935dbc06b35e5ef156fe8c1e72708c27dd486f034e9c0e1e07201 - languageName: node - linkType: hard - -"cross-spawn@npm:^6.0.0": - version: 6.0.5 - resolution: "cross-spawn@npm:6.0.5" - dependencies: - nice-try: "npm:^1.0.4" - path-key: "npm:^2.0.1" - semver: "npm:^5.5.0" - shebang-command: "npm:^1.2.0" - which: "npm:^1.2.9" - checksum: 10c0/e05544722e9d7189b4292c66e42b7abeb21db0d07c91b785f4ae5fefceb1f89e626da2703744657b287e86dcd4af57b54567cef75159957ff7a8a761d9055012 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 - languageName: node - linkType: hard - -"css-color-names@npm:^0.0.4": - version: 0.0.4 - resolution: "css-color-names@npm:0.0.4" - checksum: 10c0/88ef97c25bcfb217469cdff428049022438cc546eb208210f0edec03b75050723db3ba02cd0f4959c84cd0659be0b43af3323eff80d1ba5fb15c2accf09ccbe2 - languageName: node - linkType: hard - -"css-unit-converter@npm:^1.1.1": - version: 1.1.2 - resolution: "css-unit-converter@npm:1.1.2" - checksum: 10c0/540e94213fa5305c49215c6a2ba24d934fa400c0ae0897a87632a3a3a8f4824d168448806180c511dcfb2ecf21cf16be51af0739ff09ef5bcd946f19e9a5624d - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 - languageName: node - linkType: hard - -"debug@npm:2.6.9": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: "npm:2.0.0" - checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.3.4": - version: 4.3.7 - resolution: "debug@npm:4.3.7" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b - languageName: node - linkType: hard - -"deep-extend@npm:^0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 - languageName: node - linkType: hard - -"defined@npm:^1.0.0": - version: 1.0.0 - resolution: "defined@npm:1.0.0" - checksum: 10c0/2b9929414857729a97cfcc77987e65005e03b3fd92747e1d6a743b054c1387b62e669dc453b53e3a8105f1398df6aad54c07eed984871c93be8c7f4560a1828b - languageName: node - linkType: hard - -"dependency-graph@npm:^0.11.0": - version: 0.11.0 - resolution: "dependency-graph@npm:0.11.0" - checksum: 10c0/9e6968d1534fdb502f7f3a25a3819b499f9d60f8389193950ed0b4d1618f1341b36b5d039f2cee256cfe10c9e8198ace16b271e370df06a93fac206e81602e7c - languageName: node - linkType: hard - -"detective@npm:^5.2.0": - version: 5.2.1 - resolution: "detective@npm:5.2.1" - dependencies: - acorn-node: "npm:^1.8.2" - defined: "npm:^1.0.0" - minimist: "npm:^1.2.6" - bin: - detective: bin/detective.js - checksum: 10c0/0d3bdfe49ef094165e7876d83ae1a9e0a07d037785ab0edc7b50df9e4390e0a050167670f3d2d506457c7b00b612471ba840898964422c425e50fe046a379e55 - languageName: node - linkType: hard - -"didyoumean@npm:^1.2.2": - version: 1.2.2 - resolution: "didyoumean@npm:1.2.2" - checksum: 10c0/95d0b53d23b851aacff56dfadb7ecfedce49da4232233baecfeecb7710248c4aa03f0aa8995062f0acafaf925adf8536bd7044a2e68316fd7d411477599bc27b - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: "npm:^4.0.0" - checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c - languageName: node - linkType: hard - -"dlv@npm:^1.1.3": - version: 1.1.3 - resolution: "dlv@npm:1.1.3" - checksum: 10c0/03eb4e769f19a027fd5b43b59e8a05e3fd2100ac239ebb0bf9a745de35d449e2f25cfaf3aa3934664551d72856f4ae8b7822016ce5c42c2d27c18ae79429ec42 - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.147": - version: 1.4.152 - resolution: "electron-to-chromium@npm:1.4.152" - checksum: 10c0/198493c2d6fce78a0d6da580e0cb0bef3505b0992eea432d462789cf0ef37fce9836550b4ddc226980922402a8cefaede7481e89bb677da9d678276010fd20f5 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: "npm:^0.6.2" - checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 - languageName: node - linkType: hard - -"end-of-stream@npm:^1.1.0": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" - dependencies: - once: "npm:^1.4.0" - checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: "npm:^0.2.1" - checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce - languageName: node - linkType: hard - -"escalade@npm:^3.1.1": - version: 3.1.1 - resolution: "escalade@npm:3.1.1" - checksum: 10c0/afd02e6ca91ffa813e1108b5e7756566173d6bc0d1eb951cb44d6b21702ec17c1cf116cfe75d4a2b02e05acb0b808a7a9387d0d1ca5cf9c04ad03a8445c3e46d - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"exec-sh@npm:^0.2.0": - version: 0.2.2 - resolution: "exec-sh@npm:0.2.2" - dependencies: - merge: "npm:^1.2.0" - checksum: 10c0/2c2ea327775f839b872cd965dc3f48f2f600a86f795bf482f8de9db3737deca4119bbafae0d47d0093f36ce6031223174c39fb5b2850e58f9d935b5d8d6bc673 - languageName: node - linkType: hard - -"execa@npm:^0.7.0": - version: 0.7.0 - resolution: "execa@npm:0.7.0" - dependencies: - cross-spawn: "npm:^5.0.1" - get-stream: "npm:^3.0.0" - is-stream: "npm:^1.1.0" - npm-run-path: "npm:^2.0.0" - p-finally: "npm:^1.0.0" - signal-exit: "npm:^3.0.0" - strip-eof: "npm:^1.0.0" - checksum: 10c0/812f1776e2a6b2226532e43c1af87d8a12e26de03a06e7e043f653acf5565e0656f5f6c64d66726fefa17178ac129caaa419a50905934e7c4a846417abb25d4a - languageName: node - linkType: hard - -"execa@npm:^1.0.0": - version: 1.0.0 - resolution: "execa@npm:1.0.0" - dependencies: - cross-spawn: "npm:^6.0.0" - get-stream: "npm:^4.0.0" - is-stream: "npm:^1.1.0" - npm-run-path: "npm:^2.0.0" - p-finally: "npm:^1.0.0" - signal-exit: "npm:^3.0.0" - strip-eof: "npm:^1.0.0" - checksum: 10c0/cc71707c9aa4a2552346893ee63198bf70a04b5a1bc4f8a0ef40f1d03c319eae80932c59191f037990d7d102193e83a38ec72115fff814ec2fb3099f3661a590 - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.7": - version: 3.2.11 - resolution: "fast-glob@npm:3.2.11" - dependencies: - "@nodelib/fs.stat": "npm:^2.0.2" - "@nodelib/fs.walk": "npm:^1.2.3" - glob-parent: "npm:^5.1.2" - merge2: "npm:^1.3.0" - micromatch: "npm:^4.0.4" - checksum: 10c0/f726d4d6545ae9ade242eba78ae418cd8beac6c9291cdc36fc6b3b4e54f04fa0ecde5767256f2a600d6e14dc49a841adb3aa4b5f3f0c06b35dd4f3954965443d - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b - languageName: node - linkType: hard - -"fast-url-parser@npm:1.1.3": - version: 1.1.3 - resolution: "fast-url-parser@npm:1.1.3" - dependencies: - punycode: "npm:^1.3.2" - checksum: 10c0/d85c5c409cf0215417380f98a2d29c23a95004d93ff0d8bdf1af5f1a9d1fc608ac89ac6ffe863783d2c73efb3850dd35390feb1de3296f49877bfee0392eb5d3 - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.13.0 - resolution: "fastq@npm:1.13.0" - dependencies: - reusify: "npm:^1.0.4" - checksum: 10c0/76c7b5dafb93c7e74359a3e6de834ce7a7c2e3a3184050ed4cb652661de55cf8d4895178d8d3ccd23069395056c7bb15450660d38fb382ca88c142b22694d7c9 - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: "npm:^5.0.1" - checksum: 10c0/7cdad7d426ffbaadf45aeb5d15ec675bbd77f7597ad5399e3d2766987ed20bda24d5fac64b3ee79d93276f5865608bb22344a26b9b1ae6c4d00bd94bf611623f - languageName: node - linkType: hard - -"foreground-child@npm:^3.1.0": - version: 3.3.0 - resolution: "foreground-child@npm:3.3.0" - dependencies: - cross-spawn: "npm:^7.0.0" - signal-exit: "npm:^4.0.1" - checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 - languageName: node - linkType: hard - -"fraction.js@npm:^4.2.0": - version: 4.2.0 - resolution: "fraction.js@npm:4.2.0" - checksum: 10c0/b16c0a6a7f045b3416c1afbb174b7afca73bd7eb0c62598a0c734a8b1f888cb375684174daf170abfba314da9f366b7d6445e396359d5fae640883bdb2ed18cb - languageName: node - linkType: hard - -"fs-extra@npm:^10.0.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/5f579466e7109719d162a9249abbeffe7f426eb133ea486e020b89bc6d67a741134076bf439983f2eb79276ceaf6bd7b7c1e43c3fd67fe889863e69072fb0a5e - languageName: node - linkType: hard - -"fs-minipass@npm:^2.0.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" - dependencies: - node-gyp: "npm:latest" - checksum: 10c0/be78a3efa3e181cda3cf7a4637cb527bcebb0bd0ea0440105a3bb45b86f9245b307dc10a2507e8f4498a7d4ec349d1910f4d73e4d4495b16103106e07eee735b - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" - dependencies: - node-gyp: "npm:latest" - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: 10c0/60b74b2407e1942e1ed7f8c284f8ef714d0689dcfce5319985a5b7da3fc727f40b4a59ec72dc55aa83365ad7b8fa4fac3a30d93c850a2b452f29ae03dbc10a1e - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde - languageName: node - linkType: hard - -"get-stdin@npm:^9.0.0": - version: 9.0.0 - resolution: "get-stdin@npm:9.0.0" - checksum: 10c0/7ef2edc0c81a0644ca9f051aad8a96ae9373d901485abafaabe59fd347a1c378689d8a3d8825fb3067415d1d09dfcaa43cb9b9516ecac6b74b3138b65a8ccc6b - languageName: node - linkType: hard - -"get-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "get-stream@npm:3.0.0" - checksum: 10c0/003f5f3b8870da59c6aafdf6ed7e7b07b48c2f8629cd461bd3900726548b6b8cfa2e14d6b7814fbb08f07a42f4f738407fa70b989928b2783a76b278505bba22 - languageName: node - linkType: hard - -"get-stream@npm:^4.0.0": - version: 4.1.0 - resolution: "get-stream@npm:4.1.0" - dependencies: - pump: "npm:^3.0.0" - checksum: 10c0/294d876f667694a5ca23f0ca2156de67da950433b6fb53024833733975d32582896dbc7f257842d331809979efccf04d5e0b6b75ad4d45744c45f193fd497539 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: "npm:^4.0.1" - checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.1": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: "npm:^4.0.3" - checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 - languageName: node - linkType: hard - -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.4.5 - resolution: "glob@npm:10.4.5" - dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^3.1.2" - minimatch: "npm:^9.0.4" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^1.11.1" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e - languageName: node - linkType: hard - -"glob@npm:^7.1.3, glob@npm:^7.1.7": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: "npm:^1.0.0" - inflight: "npm:^1.0.4" - inherits: "npm:2" - minimatch: "npm:^3.1.1" - once: "npm:^1.3.0" - path-is-absolute: "npm:^1.0.0" - checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe - languageName: node - linkType: hard - -"globby@npm:^12.0.0": - version: 12.2.0 - resolution: "globby@npm:12.2.0" - dependencies: - array-union: "npm:^3.0.1" - dir-glob: "npm:^3.0.1" - fast-glob: "npm:^3.2.7" - ignore: "npm:^5.1.9" - merge2: "npm:^1.4.1" - slash: "npm:^4.0.0" - checksum: 10c0/121fee62bb9a43a35a32731cda9540241003ef578f9cee5ad87b27d3020b94857ff62f8d82cb99dbeedf6f26981c9fa62509d873392642ceb37674f3d6ec4e52 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 10c0/4223a833e38e1d0d2aea630c2433cfb94ddc07dfc11d511dbd6be1d16688c5be848acc31f9a5d0d0ddbfb56d2ee5a6ae0278aceeb0ca6a13f27e06b9956fb952 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.2.6": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 - languageName: node - linkType: hard - -"has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: "npm:^1.1.1" - checksum: 10c0/e1da0d2bd109f116b632f27782cf23182b42f14972ca9540e4c5aa7e52647407a0a4a76937334fddcb56befe94a3494825ec22b19b51f5e5507c3153fd1a5e1b - languageName: node - linkType: hard - -"hex-color-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "hex-color-regex@npm:1.1.0" - checksum: 10c0/43f0b8bbeb3906b6b2ddfb5ce6cbc28fb4f1e7b5129d0485e006ea20f92dc65f97b3b12591dd6a993de2ca10cb64a16a6a380a37481fc09432e7be0037be8f9c - languageName: node - linkType: hard - -"hsl-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "hsl-regex@npm:1.0.0" - checksum: 10c0/ddc29f4943c4a1768e611fadaebf6913d039640267f1fad2ac06f4dbdbe5cbe535d77dd19804898834671dd82751a4401c1b4d2ecade25d158ea23665d263e84 - languageName: node - linkType: hard - -"hsla-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "hsla-regex@npm:1.0.0" - checksum: 10c0/307874844a055af7a8f225e3908e1f7a2d96aa28e86abcb7ce1837cd86acf32d1f3c71ae105416d4c8623c8f9220b1bc799598851b0826274faa047710985f76 - languageName: node - linkType: hard - -"html-tags@npm:^3.1.0": - version: 3.2.0 - resolution: "html-tags@npm:3.2.0" - checksum: 10c0/fc8ac525e193354bf51b64f0e32a729a2e222b6c0f34cedab0259a35ddc5b7e31ddb556b516ea1a5725339a1085098a5f47ff385a3fa50291523d426b54012da - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: "npm:^7.1.0" - debug: "npm:^4.3.4" - checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.5 - resolution: "https-proxy-agent@npm:7.0.5" - dependencies: - agent-base: "npm:^7.0.2" - debug: "npm:4" - checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - -"ignore@npm:^5.1.9": - version: 5.2.0 - resolution: "ignore@npm:5.2.0" - checksum: 10c0/7fb7b4c4c52c2555113ff968f8a83b8ac21b076282bfcb3f468c3fb429be69bd56222306c31de95dd452c647fc6ae24339b8047ebe3ef34c02591abfec58da01 - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: "npm:^1.0.0" - resolve-from: "npm:^4.0.0" - checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: "npm:^1.3.0" - wrappy: "npm:1" - checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 - languageName: node - linkType: hard - -"inherits@npm:2": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 - languageName: node - linkType: hard - -"ini@npm:~1.3.0": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a - languageName: node - linkType: hard - -"ip-address@npm:^9.0.5": - version: 9.0.5 - resolution: "ip-address@npm:9.0.5" - dependencies: - jsbn: "npm:1.1.0" - sprintf-js: "npm:^1.1.3" - checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.3.1": - version: 0.3.2 - resolution: "is-arrayish@npm:0.3.2" - checksum: 10c0/f59b43dc1d129edb6f0e282595e56477f98c40278a2acdc8b0a5c57097c9eff8fe55470493df5775478cf32a4dc8eaf6d3a749f07ceee5bc263a78b2434f6a54 - languageName: node - linkType: hard - -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: "npm:^2.0.0" - checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 - languageName: node - linkType: hard - -"is-color-stop@npm:^1.1.0": - version: 1.1.0 - resolution: "is-color-stop@npm:1.1.0" - dependencies: - css-color-names: "npm:^0.0.4" - hex-color-regex: "npm:^1.1.0" - hsl-regex: "npm:^1.0.0" - hsla-regex: "npm:^1.0.0" - rgb-regex: "npm:^1.0.1" - rgba-regex: "npm:^1.0.0" - checksum: 10c0/12d9a9d6b3da07bd69f678d6dbe897fccbd573ead12057f60c4773129e34ea2b658f29c1fb8ef84c548e8ac62061c04c16e23ffcb00d01900fa1f72b7ab3b569 - languageName: node - linkType: hard - -"is-core-module@npm:^2.8.1": - version: 2.9.0 - resolution: "is-core-module@npm:2.9.0" - dependencies: - has: "npm:^1.0.3" - checksum: 10c0/056fe4c5f9f383dc1c1b0dc3250c300880b9b1e17e1885077d64a1667926ecc11ba696776597616bfd2fd7f87c7476c01b127a0c842b4821bee2414d0e296e6e - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^2.0.0": - version: 2.0.0 - resolution: "is-fullwidth-code-point@npm:2.0.0" - checksum: 10c0/e58f3e4a601fc0500d8b2677e26e9fe0cd450980e66adb29d85b6addf7969731e38f8e43ed2ec868a09c101a55ac3d8b78902209269f38c5286bc98f5bc1b4d9 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc - languageName: node - linkType: hard - -"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: "npm:^2.1.1" - checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 - languageName: node - linkType: hard - -"is-stream@npm:^1.1.0": - version: 1.1.0 - resolution: "is-stream@npm:1.1.0" - checksum: 10c0/b8ae7971e78d2e8488d15f804229c6eed7ed36a28f8807a1815938771f4adff0e705218b7dab968270433f67103e4fef98062a0beea55d64835f705ee72c7002 - languageName: node - linkType: hard - -"is-wsl@npm:^2.1.1": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: "npm:^2.0.0" - checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 - languageName: node - linkType: hard - -"jackspeak@npm:^3.1.2": - version: 3.4.3 - resolution: "jackspeak@npm:3.4.3" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - "@pkgjs/parseargs": "npm:^0.11.0" - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 - languageName: node - linkType: hard - -"js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed - languageName: node - linkType: hard - -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 - languageName: node - linkType: hard - -"klona@npm:^2.0.5": - version: 2.0.5 - resolution: "klona@npm:2.0.5" - checksum: 10c0/5b752c11ca8e2996612386699f52cc5aed802aa4116663d26239ac0b054fae25191dacb95587ecf1a167b039daa9fc3fa2da17dfd5d0821f3037de3821d9a9e5 - languageName: node - linkType: hard - -"lilconfig@npm:^2.0.5": - version: 2.0.5 - resolution: "lilconfig@npm:2.0.5" - checksum: 10c0/eed9afcecf1b864405f4b7299abefb87945edba250c70896de54b19b08b87333abc268cc6689539bc33f0e8d098139578704bf51af8077d358f1ac95d58beef0 - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d - languageName: node - linkType: hard - -"lodash.topath@npm:^4.5.2": - version: 4.5.2 - resolution: "lodash.topath@npm:4.5.2" - checksum: 10c0/f555a1459c11c807517be6c3a3e8030a9e92a291b2d6b598511e0bddbe99297e870b20e097019b613a3035d061bac63cb42621386c0b9dc22fd3d85e58459653 - languageName: node - linkType: hard - -"lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c - languageName: node - linkType: hard - -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": - version: 10.4.3 - resolution: "lru-cache@npm:10.4.3" - checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb - languageName: node - linkType: hard - -"lru-cache@npm:^4.0.1": - version: 4.1.5 - resolution: "lru-cache@npm:4.1.5" - dependencies: - pseudomap: "npm:^1.0.2" - yallist: "npm:^2.1.2" - checksum: 10c0/1ca5306814e5add9ec63556d6fd9b24a4ecdeaef8e9cea52cbf30301e6b88c8d8ddc7cab45b59b56eb763e6c45af911585dc89925a074ab65e1502e3fe8103cf - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^13.0.0": - version: 13.0.1 - resolution: "make-fetch-happen@npm:13.0.1" - dependencies: - "@npmcli/agent": "npm:^2.0.0" - cacache: "npm:^18.0.0" - http-cache-semantics: "npm:^4.1.1" - is-lambda: "npm:^1.0.1" - minipass: "npm:^7.0.2" - minipass-fetch: "npm:^3.0.0" - minipass-flush: "npm:^1.0.5" - minipass-pipeline: "npm:^1.2.4" - negotiator: "npm:^0.6.3" - proc-log: "npm:^4.2.0" - promise-retry: "npm:^2.0.1" - ssri: "npm:^10.0.0" - checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb - languageName: node - linkType: hard - -"merge@npm:^1.2.0": - version: 1.2.1 - resolution: "merge@npm:1.2.1" - checksum: 10c0/09f0ed1e85f336feb32d93d1243cb8930be22c7e6e4aa0c59a08a6f680d274dbe021c7d2a35ee8383cab2524efbb3f51985c3052e3dcf134951656511edf4693 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.4": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: "npm:^3.0.2" - picomatch: "npm:^2.3.1" - checksum: 10c0/3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff - languageName: node - linkType: hard - -"mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa - languageName: node - linkType: hard - -"mime-db@npm:~1.33.0": - version: 1.33.0 - resolution: "mime-db@npm:1.33.0" - checksum: 10c0/79172ce5468c8503b49dddfdddc18d3f5fe2599f9b5fe1bc321a8cbee14c96730fc6db22f907b23701b05b2936f865795f62ec3a78a7f3c8cb2450bb68c6763e - languageName: node - linkType: hard - -"mime-types@npm:2.1.18": - version: 2.1.18 - resolution: "mime-types@npm:2.1.18" - dependencies: - mime-db: "npm:~1.33.0" - checksum: 10c0/a96a8d12f4bb98bc7bfac6a8ccbd045f40368fc1030d9366050c3613825d3715d1c1f393e10a75a885d2cdc1a26cd6d5e11f3a2a0d5c4d361f00242139430a0f - languageName: node - linkType: hard - -"mime-types@npm:~2.1.34": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: "npm:1.52.0" - checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 - languageName: node - linkType: hard - -"minimatch@npm:3.0.4": - version: 3.0.4 - resolution: "minimatch@npm:3.0.4" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/d0a2bcd93ebec08a9eef3ca83ba33c9fb6feb93932e0b4dc6aa46c5f37a9404bea7ad9ff7cafe23ce6634f1fe3b206f5315ecbb05812da6e692c21d8ecfd3dae - languageName: node - linkType: hard - -"minimatch@npm:^3.1.1": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 - languageName: node - linkType: hard - -"minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed - languageName: node - linkType: hard - -"minimist@npm:^1.2.0, minimist@npm:^1.2.6": - version: 1.2.6 - resolution: "minimist@npm:1.2.6" - checksum: 10c0/d0b566204044481c4401abbd24cc75814e753b37268e7fe7ccc78612bf3e37bf1e45a6c43fb0b119445ea1c413c000bde013f320b7211974f2f49bcbec1d0dbf - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e - languageName: node - linkType: hard - -"minipass-fetch@npm:^3.0.0": - version: 3.0.5 - resolution: "minipass-fetch@npm:3.0.5" - dependencies: - encoding: "npm:^0.1.13" - minipass: "npm:^7.0.3" - minipass-sized: "npm:^1.0.3" - minizlib: "npm:^2.1.2" - dependenciesMeta: - encoding: - optional: true - checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: "npm:^3.0.0" - checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: "npm:^4.0.0" - checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c - languageName: node - linkType: hard - -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: "npm:^3.0.0" - yallist: "npm:^4.0.0" - checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf - languageName: node - linkType: hard - -"modern-normalize@npm:^1.1.0": - version: 1.1.0 - resolution: "modern-normalize@npm:1.1.0" - checksum: 10c0/7886fa57dc0fcb1021343c4dbec2f65e06e9ff25f727d51fa3a469b0b684b796e5b98554c643b8859bda8d09ea86f89e5cc70a067da91d23ad9bf7cfd545e36b - languageName: node - linkType: hard - -"ms@npm:2.0.0": - version: 2.0.0 - resolution: "ms@npm:2.0.0" - checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d - languageName: node - linkType: hard - -"ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 - languageName: node - linkType: hard - -"nanoid@npm:^3.3.4": - version: 3.3.4 - resolution: "nanoid@npm:3.3.4" - bin: - nanoid: bin/nanoid.cjs - checksum: 10c0/a0747d5c6021828fe8d38334e5afb05d3268d7d4b06024058ec894ccc47070e4e81d268a6b75488d2ff3485fa79a75c251d4b7c6f31051bb54bb662b6fd2a27d - languageName: node - linkType: hard - -"negotiator@npm:0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 - languageName: node - linkType: hard - -"negotiator@npm:^0.6.3": - version: 0.6.4 - resolution: "negotiator@npm:0.6.4" - checksum: 10c0/3e677139c7fb7628a6f36335bf11a885a62c21d5390204590a1a214a5631fcbe5ea74ef6a610b60afe84b4d975cbe0566a23f20ee17c77c73e74b80032108dea - languageName: node - linkType: hard - -"nice-try@npm:^1.0.4": - version: 1.0.5 - resolution: "nice-try@npm:1.0.5" - checksum: 10c0/95568c1b73e1d0d4069a3e3061a2102d854513d37bcfda73300015b7ba4868d3b27c198d1dbbd8ebdef4112fc2ed9e895d4a0f2e1cce0bd334f2a1346dc9205f - languageName: node - linkType: hard - -"node-emoji@npm:^1.11.0": - version: 1.11.0 - resolution: "node-emoji@npm:1.11.0" - dependencies: - lodash: "npm:^4.17.21" - checksum: 10c0/5dac6502dbef087092d041fcc2686d8be61168593b3a9baf964d62652f55a3a9c2277f171b81cccb851ccef33f2d070f45e633fab1fda3264f8e1ae9041c673f - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 10.2.0 - resolution: "node-gyp@npm:10.2.0" - dependencies: - env-paths: "npm:^2.2.0" - exponential-backoff: "npm:^3.1.1" - glob: "npm:^10.3.10" - graceful-fs: "npm:^4.2.6" - make-fetch-happen: "npm:^13.0.0" - nopt: "npm:^7.0.0" - proc-log: "npm:^4.1.0" - semver: "npm:^7.3.5" - tar: "npm:^6.2.1" - which: "npm:^4.0.0" - bin: - node-gyp: bin/node-gyp.js - checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b - languageName: node - linkType: hard - -"node-releases@npm:^2.0.5": - version: 2.0.5 - resolution: "node-releases@npm:2.0.5" - checksum: 10c0/3e098e80d9699b18f67089d2617532e7b26d1f385c7b3397e3789018f8fefc7da6478cd057b80df39ed4e307380332c1225f48bf14d16c54c3376afb673ff2f5 - languageName: node - linkType: hard - -"nopt@npm:^7.0.0": - version: 7.2.1 - resolution: "nopt@npm:7.2.1" - dependencies: - abbrev: "npm:^2.0.0" - bin: - nopt: bin/nopt.js - checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 - languageName: node - linkType: hard - -"normalize-range@npm:^0.1.2": - version: 0.1.2 - resolution: "normalize-range@npm:0.1.2" - checksum: 10c0/bf39b73a63e0a42ad1a48c2bd1bda5a07ede64a7e2567307a407674e595bcff0fa0d57e8e5f1e7fa5e91000797c7615e13613227aaaa4d6d6e87f5bd5cc95de6 - languageName: node - linkType: hard - -"npm-run-path@npm:^2.0.0": - version: 2.0.2 - resolution: "npm-run-path@npm:2.0.2" - dependencies: - path-key: "npm:^2.0.0" - checksum: 10c0/95549a477886f48346568c97b08c4fda9cdbf7ce8a4fbc2213f36896d0d19249e32d68d7451bdcbca8041b5fba04a6b2c4a618beaf19849505c05b700740f1de - languageName: node - linkType: hard - -"object-hash@npm:^2.2.0": - version: 2.2.0 - resolution: "object-hash@npm:2.2.0" - checksum: 10c0/1527de843926c5442ed61f8bdddfc7dc181b6497f725b0e89fcf50a55d9c803088763ed447cac85a5aa65345f1e99c2469ba679a54349ef3c4c0aeaa396a3eb9 - languageName: node - linkType: hard - -"on-headers@npm:~1.0.1": - version: 1.0.2 - resolution: "on-headers@npm:1.0.2" - checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f - languageName: node - linkType: hard - -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: "npm:1" - checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 - languageName: node - linkType: hard - -"p-finally@npm:^1.0.0": - version: 1.0.0 - resolution: "p-finally@npm:1.0.0" - checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: "npm:^3.0.0" - checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 - languageName: node - linkType: hard - -"package-json-from-dist@npm:^1.0.0": - version: 1.0.1 - resolution: "package-json-from-dist@npm:1.0.1" - checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: "npm:^3.0.0" - checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": "npm:^7.0.0" - error-ex: "npm:^1.3.1" - json-parse-even-better-errors: "npm:^2.3.0" - lines-and-columns: "npm:^1.1.6" - checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 - languageName: node - linkType: hard - -"path-is-inside@npm:1.0.2": - version: 1.0.2 - resolution: "path-is-inside@npm:1.0.2" - checksum: 10c0/7fdd4b41672c70461cce734fc222b33e7b447fa489c7c4377c95e7e6852d83d69741f307d88ec0cc3b385b41cb4accc6efac3c7c511cd18512e95424f5fa980c - languageName: node - linkType: hard - -"path-key@npm:^2.0.0, path-key@npm:^2.0.1": - version: 2.0.1 - resolution: "path-key@npm:2.0.1" - checksum: 10c0/dd2044f029a8e58ac31d2bf34c34b93c3095c1481942960e84dd2faa95bbb71b9b762a106aead0646695330936414b31ca0bd862bf488a937ad17c8c5d73b32b - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 - languageName: node - linkType: hard - -"path-scurry@npm:^1.11.1": - version: 1.11.1 - resolution: "path-scurry@npm:1.11.1" - dependencies: - lru-cache: "npm:^10.2.0" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d - languageName: node - linkType: hard - -"path-to-regexp@npm:2.2.1": - version: 2.2.1 - resolution: "path-to-regexp@npm:2.2.1" - checksum: 10c0/f4b51090a73dad5ce0720f13ce8528ac77914bc927d72cc4ba05ab32770ad3a8d2e431962734b688b9ed863d4098d858da6ff4746037e4e24259cbd3b2c32b79 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: 10c0/20a5b249e331c14479d94ec6817a182fd7a5680debae82705747b2db7ec50009a5f6648d0621c561b0572703f84dbef0858abcbd5856d3c5511426afcb1961f7 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be - languageName: node - linkType: hard - -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc - languageName: node - linkType: hard - -"postcss-cli@npm:^9.0.1": - version: 9.1.0 - resolution: "postcss-cli@npm:9.1.0" - dependencies: - chokidar: "npm:^3.3.0" - dependency-graph: "npm:^0.11.0" - fs-extra: "npm:^10.0.0" - get-stdin: "npm:^9.0.0" - globby: "npm:^12.0.0" - picocolors: "npm:^1.0.0" - postcss-load-config: "npm:^3.0.0" - postcss-reporter: "npm:^7.0.0" - pretty-hrtime: "npm:^1.0.3" - read-cache: "npm:^1.0.0" - slash: "npm:^4.0.0" - yargs: "npm:^17.0.0" - peerDependencies: - postcss: ^8.0.0 - bin: - postcss: index.js - checksum: 10c0/ae34e46217bf0317f93632263661f8296be3ee9f7859f5afb517a206197aa3abac6500814f00879702b7d372b64fea1b45cb36e00dd6ba37e021b79ab8bc67ee - languageName: node - linkType: hard - -"postcss-elm-tailwind@npm:^0.11.0": - version: 0.11.0 - resolution: "postcss-elm-tailwind@npm:0.11.0" - dependencies: - autoprefixer: "npm:^10.3.3" - tailwindcss: "npm:^2.2.9" - peerDependencies: - postcss: ^8.0.0 - checksum: 10c0/ea9f8ef4c756c0d5a597ef3d3e1cefab9113a40a6e7a4c18d57eb5d1d686707af6cde872fee500eba8ceaeca1c4819ef8e9ca3e965a8384ef9da5efca96a1ad7 - languageName: node - linkType: hard - -"postcss-js@npm:^3.0.3": - version: 3.0.3 - resolution: "postcss-js@npm:3.0.3" - dependencies: - camelcase-css: "npm:^2.0.1" - postcss: "npm:^8.1.6" - checksum: 10c0/bb569feb35bc4029072c259f52af4bf7b79e5dc2c680e3d6c7cedbb2b8d05114186832bef169abb76d601b75f83952fe0bb8c56b7c071d8f34c6ad8a0aead614 - languageName: node - linkType: hard - -"postcss-load-config@npm:^3.0.0, postcss-load-config@npm:^3.1.0": - version: 3.1.4 - resolution: "postcss-load-config@npm:3.1.4" - dependencies: - lilconfig: "npm:^2.0.5" - yaml: "npm:^1.10.2" - peerDependencies: - postcss: ">=8.0.9" - ts-node: ">=9.0.0" - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - checksum: 10c0/7d2cc6695c2fc063e4538316d651a687fdb55e48db453ff699de916a6ee55ab68eac2b120c28a6b8ca7aa746a588888351b810a215b5cd090eabea62c5762ede - languageName: node - linkType: hard - -"postcss-loader@npm:^6.1.1": - version: 6.2.1 - resolution: "postcss-loader@npm:6.2.1" - dependencies: - cosmiconfig: "npm:^7.0.0" - klona: "npm:^2.0.5" - semver: "npm:^7.3.5" - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - checksum: 10c0/736a1bf43a3e09e2351b5cc97cc26790a1c3261412c9dee063f3f6f2969a6ff7d8d194d9adcad01cee1afd1de071482318d9699e6157b67d46b3dccf3be1b58b - languageName: node - linkType: hard - -"postcss-nested@npm:5.0.6": - version: 5.0.6 - resolution: "postcss-nested@npm:5.0.6" - dependencies: - postcss-selector-parser: "npm:^6.0.6" - peerDependencies: - postcss: ^8.2.14 - checksum: 10c0/cff4f05b06ec752a90a36b329b4c1b620352458b3d8e02e2fc7efdfb5073945242573ec42c0dd2b7c4beccba21233e5f089903c3e5e8aea2bbceca09c406fb8f - languageName: node - linkType: hard - -"postcss-reporter@npm:^7.0.0": - version: 7.0.5 - resolution: "postcss-reporter@npm:7.0.5" - dependencies: - picocolors: "npm:^1.0.0" - thenby: "npm:^1.3.4" - peerDependencies: - postcss: ^8.1.0 - checksum: 10c0/5bd96e9681b0f1a557dbd8e8e802c112a220cd93951b7a3c4ddfd90be8910a9001ebef0a16c277f93c37f6710c73aeb22698165f7ec17b0d76892a691ddb38a4 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.6": - version: 6.0.10 - resolution: "postcss-selector-parser@npm:6.0.10" - dependencies: - cssesc: "npm:^3.0.0" - util-deprecate: "npm:^1.0.2" - checksum: 10c0/a0b27c5e3f7604c8dc7cd83f145fdd7b21448e0d86072da99e0d78e536ba27aa9db2d42024c50aa530408ee517c4bdc0260529e1afb56608f9a82e839c207e82 - languageName: node - linkType: hard - -"postcss-value-parser@npm:^3.3.0": - version: 3.3.1 - resolution: "postcss-value-parser@npm:3.3.1" - checksum: 10c0/23eed98d8eeadb1f9ef1db4a2757da0f1d8e7c1dac2a38d6b35d971aab9eb3c6d8a967d0e9f435558834ffcd966afbbe875a56bcc5bcdd09e663008c106b3e47 - languageName: node - linkType: hard - -"postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": - version: 4.2.0 - resolution: "postcss-value-parser@npm:4.2.0" - checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 - languageName: node - linkType: hard - -"postcss@npm:^8.1.6, postcss@npm:^8.3.5, postcss@npm:^8.3.8": - version: 8.4.14 - resolution: "postcss@npm:8.4.14" - dependencies: - nanoid: "npm:^3.3.4" - picocolors: "npm:^1.0.0" - source-map-js: "npm:^1.0.2" - checksum: 10c0/2a4cfa28e2f1bfd358313501f7771bd596e494487c7b735c492e2f8b1faf493d24fcb43e2e6ad825863fc65a77abb949ca8f228602ae46a022f02dc812c4ac8b - languageName: node - linkType: hard - -"pretty-hrtime@npm:^1.0.3": - version: 1.0.3 - resolution: "pretty-hrtime@npm:1.0.3" - checksum: 10c0/67cb3fc283a72252b49ac488647e6a01b78b7aa1b8f2061834aa1650691229081518ef3ca940f77f41cc8a8f02ba9eeb74b843481596670209e493062f2e89e0 - languageName: node - linkType: hard - -"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": - version: 4.2.0 - resolution: "proc-log@npm:4.2.0" - checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: "npm:^2.0.2" - retry: "npm:^0.12.0" - checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 - languageName: node - linkType: hard - -"pseudomap@npm:^1.0.2": - version: 1.0.2 - resolution: "pseudomap@npm:1.0.2" - checksum: 10c0/5a91ce114c64ed3a6a553aa7d2943868811377388bb31447f9d8028271bae9b05b340fe0b6961a64e45b9c72946aeb0a4ab635e8f7cb3715ffd0ff2beeb6a679 - languageName: node - linkType: hard - -"pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" - dependencies: - end-of-stream: "npm:^1.1.0" - once: "npm:^1.3.1" - checksum: 10c0/bbdeda4f747cdf47db97428f3a135728669e56a0ae5f354a9ac5b74556556f5446a46f720a8f14ca2ece5be9b4d5d23c346db02b555f46739934cc6c093a5478 - languageName: node - linkType: hard - -"punycode@npm:^1.3.2": - version: 1.4.1 - resolution: "punycode@npm:1.4.1" - checksum: 10c0/354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.1.1 - resolution: "punycode@npm:2.1.1" - checksum: 10c0/83815ca9b9177f055771f31980cbec7ffaef10257d50a95ab99b4a30f0404846e85fa6887ee1bbc0aaddb7bad6d96e2fa150a016051ff0f6b92be4ad613ddca8 - languageName: node - linkType: hard - -"purgecss@npm:^4.0.3": - version: 4.1.3 - resolution: "purgecss@npm:4.1.3" - dependencies: - commander: "npm:^8.0.0" - glob: "npm:^7.1.7" - postcss: "npm:^8.3.5" - postcss-selector-parser: "npm:^6.0.6" - bin: - purgecss: bin/purgecss.js - checksum: 10c0/9b29872298bc65a290c6ccf7ea862dd1c94f78ca593e78ae7d36c6341e113ddbe657bf1c0bf7bb3dad76f8d6c98a0667e6da1d126afa5702d3137db8547feaa2 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 - languageName: node - linkType: hard - -"quick-lru@npm:^5.1.1": - version: 5.1.1 - resolution: "quick-lru@npm:5.1.1" - checksum: 10c0/a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da - languageName: node - linkType: hard - -"range-parser@npm:1.2.0": - version: 1.2.0 - resolution: "range-parser@npm:1.2.0" - checksum: 10c0/c7aef4f6588eb974c475649c157f197d07437d8c6c8ff7e36280a141463fb5ab7a45918417334ebd7b665c6b8321cf31c763f7631dd5f5db9372249261b8b02a - languageName: node - linkType: hard - -"rc@npm:^1.0.1, rc@npm:^1.1.6": - version: 1.2.8 - resolution: "rc@npm:1.2.8" - dependencies: - deep-extend: "npm:^0.6.0" - ini: "npm:~1.3.0" - minimist: "npm:^1.2.0" - strip-json-comments: "npm:~2.0.1" - bin: - rc: ./cli.js - checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 - languageName: node - linkType: hard - -"read-cache@npm:^1.0.0": - version: 1.0.0 - resolution: "read-cache@npm:1.0.0" - dependencies: - pify: "npm:^2.3.0" - checksum: 10c0/90cb2750213c7dd7c80cb420654344a311fdec12944e81eb912cd82f1bc92aea21885fa6ce442e3336d9fccd663b8a7a19c46d9698e6ca55620848ab932da814 - languageName: node - linkType: hard - -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: "npm:^2.2.1" - checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b - languageName: node - linkType: hard - -"reduce-css-calc@npm:^2.1.8": - version: 2.1.8 - resolution: "reduce-css-calc@npm:2.1.8" - dependencies: - css-unit-converter: "npm:^1.1.1" - postcss-value-parser: "npm:^3.3.0" - checksum: 10c0/9f311cdb38d4a72d5dc9275b9558199e63a6ceff2892a309691e4281fe418730995910a2179a7dd1566c11138c834c6e5958203c629c9f4357600a478470b17b - languageName: node - linkType: hard - -"registry-auth-token@npm:3.3.2": - version: 3.3.2 - resolution: "registry-auth-token@npm:3.3.2" - dependencies: - rc: "npm:^1.1.6" - safe-buffer: "npm:^5.0.1" - checksum: 10c0/934b5d504ec6d94d78672dc5e74646c52793e74a6e400c1cffc78838bbb12c5f45e3ef3edba506f3295db794d4dda76f924f2948d48fe1f8e83b6500b0ba53c5 - languageName: node - linkType: hard - -"registry-url@npm:3.1.0": - version: 3.1.0 - resolution: "registry-url@npm:3.1.0" - dependencies: - rc: "npm:^1.0.1" - checksum: 10c0/345cf9638f99d95863d92800b3f595ac312c19d6865595e499fbeb33fcda04021a0dbdafbb5e61a838a89a558bc239d78752a1f90eb68cf53fdf0d91da816a7c - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 - languageName: node - linkType: hard - -"resolve@npm:^1.20.0": - version: 1.22.0 - resolution: "resolve@npm:1.22.0" - dependencies: - is-core-module: "npm:^2.8.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/efe07a7cd69015a95a5f4e6cc3d372354b93d67a70410ec686413b2054dfa0d5ef16ff52c057a83634debb17f278b99db6dbc60367a4475ae01dda29c6eaa6e4 - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": - version: 1.22.0 - resolution: "resolve@patch:resolve@npm%3A1.22.0#optional!builtin::version=1.22.0&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.8.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/ef8061e81f40c39070748e8e263c8767d8fcc7c34e9ee85211b29fbc2aedb1ae7cda7d735c2cdbe9367060e9f85ec11c2694e370c121c6bcbb472a7bd0b19555 - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 - languageName: node - linkType: hard - -"rgb-regex@npm:^1.0.1": - version: 1.0.1 - resolution: "rgb-regex@npm:1.0.1" - checksum: 10c0/ab43ea8b92c1e0c6d6bc811d7fff05927ae87473f9576363ae57213b1fd10605549a5cf89c79ccb7a02dd32e1f093c79891868ef31fd92cdb5378d7b180d73f5 - languageName: node - linkType: hard - -"rgba-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "rgba-regex@npm:1.0.0" - checksum: 10c0/4296e7dd41c0edf66c18c13824b746099af642e1b52de97addb6b22051398567090cf1df20bacd1d400cfc79aee6f3a428e0def623d358844495e3630189892c - languageName: node - linkType: hard - -"rimraf@npm:^3.0.0": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: "npm:^7.1.3" - bin: - rimraf: bin.js - checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 - languageName: node - linkType: hard - -"root-workspace-0b6124@workspace:.": - version: 0.0.0-use.local - resolution: "root-workspace-0b6124@workspace:." - dependencies: - autoprefixer: "npm:^10.3.6" - postcss: "npm:^8.3.8" - postcss-cli: "npm:^9.0.1" - postcss-elm-tailwind: "npm:^0.11.0" - postcss-loader: "npm:^6.1.1" - serve: "npm:^12.0.1" - tailwindcss: "npm:^2.2.16" - watch: "npm:^1.0.2" - yarn: "npm:^1.22.15" - languageName: unknown - linkType: soft - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: "npm:^1.2.2" - checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 - languageName: node - linkType: hard - -"safe-buffer@npm:5.1.2": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 - languageName: node - linkType: hard - -"safe-buffer@npm:^5.0.1": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 - languageName: node - linkType: hard - -"semver@npm:^5.5.0": - version: 5.7.1 - resolution: "semver@npm:5.7.1" - bin: - semver: ./bin/semver - checksum: 10c0/d4884f2aeca28bff35d0bd40ff0a9b2dfc4b36a883bf0ea5dc15d10d9a01bdc9041035b05f825d4b5ac8a56e490703dbf0d986d054de82cc5e9bad3f02ca6e00 - languageName: node - linkType: hard - -"semver@npm:^7.3.5": - version: 7.3.7 - resolution: "semver@npm:7.3.7" - dependencies: - lru-cache: "npm:^6.0.0" - bin: - semver: bin/semver.js - checksum: 10c0/cffd30102de68a9f8cac9ef57b43c2173dc999da4fc5189872b421f9c9e2660f70243b8e964781ac6dc48ba2542647bb672beeb4d756c89c4a9e05e1144fa40a - languageName: node - linkType: hard - -"serve-handler@npm:6.1.3": - version: 6.1.3 - resolution: "serve-handler@npm:6.1.3" - dependencies: - bytes: "npm:3.0.0" - content-disposition: "npm:0.5.2" - fast-url-parser: "npm:1.1.3" - mime-types: "npm:2.1.18" - minimatch: "npm:3.0.4" - path-is-inside: "npm:1.0.2" - path-to-regexp: "npm:2.2.1" - range-parser: "npm:1.2.0" - checksum: 10c0/ad9a98f50eceda4d16269361a0a7b4167cb4bd8636e22f3ef1a214bb4206d8b3abf2b44ece5ba9d1a6b719e00b78321d5b1777cff178559a24778db9a3998da9 - languageName: node - linkType: hard - -"serve@npm:^12.0.1": - version: 12.0.1 - resolution: "serve@npm:12.0.1" - dependencies: - "@zeit/schemas": "npm:2.6.0" - ajv: "npm:6.12.6" - arg: "npm:2.0.0" - boxen: "npm:1.3.0" - chalk: "npm:2.4.1" - clipboardy: "npm:2.3.0" - compression: "npm:1.7.3" - serve-handler: "npm:6.1.3" - update-check: "npm:1.5.2" - bin: - serve: bin/serve.js - checksum: 10c0/ec20d3bd94ce64170b83aa96b3061f0280aa64cf11282e2d686f9484f34e17f9d4d0ab792c272366a3f0fa664663f2349861d405634974be057963fa2049e25a - languageName: node - linkType: hard - -"shebang-command@npm:^1.2.0": - version: 1.2.0 - resolution: "shebang-command@npm:1.2.0" - dependencies: - shebang-regex: "npm:^1.0.0" - checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: "npm:^3.0.0" - checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e - languageName: node - linkType: hard - -"shebang-regex@npm:^1.0.0": - version: 1.0.0 - resolution: "shebang-regex@npm:1.0.0" - checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.0": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 - languageName: node - linkType: hard - -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 - languageName: node - linkType: hard - -"simple-swizzle@npm:^0.2.2": - version: 0.2.2 - resolution: "simple-swizzle@npm:0.2.2" - dependencies: - is-arrayish: "npm:^0.3.1" - checksum: 10c0/df5e4662a8c750bdba69af4e8263c5d96fe4cd0f9fe4bdfa3cbdeb45d2e869dff640beaaeb1ef0e99db4d8d2ec92f85508c269f50c972174851bc1ae5bd64308 - languageName: node - linkType: hard - -"slash@npm:^4.0.0": - version: 4.0.0 - resolution: "slash@npm:4.0.0" - checksum: 10c0/b522ca75d80d107fd30d29df0549a7b2537c83c4c4ecd12cd7d4ea6c8aaca2ab17ada002e7a1d78a9d736a0261509f26ea5b489082ee443a3a810586ef8eff18 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.4 - resolution: "socks-proxy-agent@npm:8.0.4" - dependencies: - agent-base: "npm:^7.1.1" - debug: "npm:^4.3.4" - socks: "npm:^2.8.3" - checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.3 - resolution: "socks@npm:2.8.3" - dependencies: - ip-address: "npm:^9.0.5" - smart-buffer: "npm:^4.2.0" - checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 - languageName: node - linkType: hard - -"source-map-js@npm:^1.0.2": - version: 1.0.2 - resolution: "source-map-js@npm:1.0.2" - checksum: 10c0/32f2dfd1e9b7168f9a9715eb1b4e21905850f3b50cf02cf476e47e4eebe8e6b762b63a64357896aa29b37e24922b4282df0f492e0d2ace572b43d15525976ff8 - languageName: node - linkType: hard - -"sprintf-js@npm:^1.1.3": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec - languageName: node - linkType: hard - -"ssri@npm:^10.0.0": - version: 10.0.6 - resolution: "ssri@npm:10.0.6" - dependencies: - minipass: "npm:^7.0.3" - checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: "npm:^8.0.0" - is-fullwidth-code-point: "npm:^3.0.0" - strip-ansi: "npm:^6.0.1" - checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b - languageName: node - linkType: hard - -"string-width@npm:^2.0.0, string-width@npm:^2.1.1": - version: 2.1.1 - resolution: "string-width@npm:2.1.1" - dependencies: - is-fullwidth-code-point: "npm:^2.0.0" - strip-ansi: "npm:^4.0.0" - checksum: 10c0/e5f2b169fcf8a4257a399f95d069522f056e92ec97dbdcb9b0cdf14d688b7ca0b1b1439a1c7b9773cd79446cbafd582727279d6bfdd9f8edd306ea5e90e5b610 - languageName: node - linkType: hard - -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: "npm:^0.2.0" - emoji-regex: "npm:^9.2.2" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca - languageName: node - linkType: hard - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: "npm:^5.0.1" - checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 - languageName: node - linkType: hard - -"strip-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-ansi@npm:4.0.0" - dependencies: - ansi-regex: "npm:^3.0.0" - checksum: 10c0/d75d9681e0637ea316ddbd7d4d3be010b1895a17e885155e0ed6a39755ae0fd7ef46e14b22162e66a62db122d3a98ab7917794e255532ab461bb0a04feb03e7d - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: "npm:^6.0.1" - checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 - languageName: node - linkType: hard - -"strip-eof@npm:^1.0.0": - version: 1.0.0 - resolution: "strip-eof@npm:1.0.0" - checksum: 10c0/f336beed8622f7c1dd02f2cbd8422da9208fae81daf184f73656332899978919d5c0ca84dc6cfc49ad1fc4dd7badcde5412a063cf4e0d7f8ed95a13a63f68f45 - languageName: node - linkType: hard - -"strip-json-comments@npm:~2.0.1": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: "npm:^3.0.0" - checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: "npm:^4.0.0" - checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 - languageName: node - linkType: hard - -"tailwindcss@npm:^2.2.16, tailwindcss@npm:^2.2.9": - version: 2.2.19 - resolution: "tailwindcss@npm:2.2.19" - dependencies: - arg: "npm:^5.0.1" - bytes: "npm:^3.0.0" - chalk: "npm:^4.1.2" - chokidar: "npm:^3.5.2" - color: "npm:^4.0.1" - cosmiconfig: "npm:^7.0.1" - detective: "npm:^5.2.0" - didyoumean: "npm:^1.2.2" - dlv: "npm:^1.1.3" - fast-glob: "npm:^3.2.7" - fs-extra: "npm:^10.0.0" - glob-parent: "npm:^6.0.1" - html-tags: "npm:^3.1.0" - is-color-stop: "npm:^1.1.0" - is-glob: "npm:^4.0.1" - lodash: "npm:^4.17.21" - lodash.topath: "npm:^4.5.2" - modern-normalize: "npm:^1.1.0" - node-emoji: "npm:^1.11.0" - normalize-path: "npm:^3.0.0" - object-hash: "npm:^2.2.0" - postcss-js: "npm:^3.0.3" - postcss-load-config: "npm:^3.1.0" - postcss-nested: "npm:5.0.6" - postcss-selector-parser: "npm:^6.0.6" - postcss-value-parser: "npm:^4.1.0" - pretty-hrtime: "npm:^1.0.3" - purgecss: "npm:^4.0.3" - quick-lru: "npm:^5.1.1" - reduce-css-calc: "npm:^2.1.8" - resolve: "npm:^1.20.0" - tmp: "npm:^0.2.1" - peerDependencies: - autoprefixer: ^10.0.2 - postcss: ^8.0.9 - bin: - tailwind: lib/cli.js - tailwindcss: lib/cli.js - checksum: 10c0/eaa0f6e251483271db28b67305f0ab6b1be6b39472ce5ec2baf0795cbe0b05fd4ec2009315e76890b9fcdadd605c12eb6dddcb659a14d993c54f2373dfd4519d - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.2.1": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: "npm:^2.0.0" - fs-minipass: "npm:^2.0.0" - minipass: "npm:^5.0.0" - minizlib: "npm:^2.1.1" - mkdirp: "npm:^1.0.3" - yallist: "npm:^4.0.0" - checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 - languageName: node - linkType: hard - -"term-size@npm:^1.2.0": - version: 1.2.0 - resolution: "term-size@npm:1.2.0" - dependencies: - execa: "npm:^0.7.0" - checksum: 10c0/2fbb2668cdd3b5e63038c28355145e98789d16143fc6754462cd4a194706c7153f15c2a6f05f579ffed27bcf2f35bdf752007927457128cc9a9ce3ec20075649 - languageName: node - linkType: hard - -"thenby@npm:^1.3.4": - version: 1.3.4 - resolution: "thenby@npm:1.3.4" - checksum: 10c0/8845b44db18e74885c7eb34ba8aed7950be5de4903c0e284425ee83ebb089cb8a8215c066e5fd161e4621b0a82f18dc8fb1f44dcc36522b3a4a1ac0190133087 - languageName: node - linkType: hard - -"tmp@npm:^0.2.1": - version: 0.2.1 - resolution: "tmp@npm:0.2.1" - dependencies: - rimraf: "npm:^3.0.0" - checksum: 10c0/67607aa012059c9ce697bee820ee51bc0f39b29a8766def4f92d3f764d67c7cf9205d537d24e0cb1ce9685c40d4c628ead010910118ea18348666b5c46ed9123 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: "npm:^7.0.0" - checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 - languageName: node - linkType: hard - -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: "npm:^4.0.0" - checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f - languageName: node - linkType: hard - -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: "npm:^0.1.4" - checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.0 - resolution: "universalify@npm:2.0.0" - checksum: 10c0/07092b9f46df61b823d8ab5e57f0ee5120c178b39609a95e4a15a98c42f6b0b8e834e66fbb47ff92831786193be42f1fd36347169b88ce8639d0f9670af24a71 - languageName: node - linkType: hard - -"update-check@npm:1.5.2": - version: 1.5.2 - resolution: "update-check@npm:1.5.2" - dependencies: - registry-auth-token: "npm:3.3.2" - registry-url: "npm:3.1.0" - checksum: 10c0/a2b0cf77d886cd461ced7e84a84f77cac860f37fde9d1f9205bc646fc322761415cd07309014293995aaa2953741419c59854c65b6b40b6c8e3c6ff547a426d5 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.2": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 - languageName: node - linkType: hard - -"vary@npm:~1.1.2": - version: 1.1.2 - resolution: "vary@npm:1.1.2" - checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f - languageName: node - linkType: hard - -"watch@npm:^1.0.2": - version: 1.0.2 - resolution: "watch@npm:1.0.2" - dependencies: - exec-sh: "npm:^0.2.0" - minimist: "npm:^1.2.0" - bin: - watch: ./cli.js - checksum: 10c0/6914c5cd44d6e3cb60c8ab7849ec03c51a07259d86410356630729a14c3f4ccb011865cdb33a052c75fb9ead2eaa646afa32d0fe7682b0b585e65a868b153eca - languageName: node - linkType: hard - -"which@npm:^1.2.9": - version: 1.3.1 - resolution: "which@npm:1.3.1" - dependencies: - isexe: "npm:^2.0.0" - bin: - which: ./bin/which - checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: "npm:^2.0.0" - bin: - node-which: ./bin/node-which - checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f - languageName: node - linkType: hard - -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" - dependencies: - isexe: "npm:^3.1.1" - bin: - node-which: bin/which.js - checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a - languageName: node - linkType: hard - -"widest-line@npm:^2.0.0": - version: 2.0.1 - resolution: "widest-line@npm:2.0.1" - dependencies: - string-width: "npm:^2.1.1" - checksum: 10c0/c8c908c737b522a8cf46254bc85b3b0c9e6934a054840d9b01ea7f36442aa11c8393579fa57bc9ef9a5c5ea69f49e78783ce27b8a8ebab4f855ca044efa584fa - languageName: node - linkType: hard - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: "npm:^4.0.0" - string-width: "npm:^4.1.0" - strip-ansi: "npm:^6.0.0" - checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: "npm:^6.1.0" - string-width: "npm:^5.0.1" - strip-ansi: "npm:^7.0.1" - checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 - languageName: node - linkType: hard - -"xtend@npm:^4.0.2": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 - languageName: node - linkType: hard - -"yallist@npm:^2.1.2": - version: 2.1.2 - resolution: "yallist@npm:2.1.2" - checksum: 10c0/0b9e25aa00adf19e01d2bcd4b208aee2b0db643d9927131797b7af5ff69480fc80f1c3db738cbf3946f0bddf39d8f2d0a5709c644fd42d4aa3a4e6e786c087b5 - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - -"yaml@npm:^1.10.0, yaml@npm:^1.10.2": - version: 1.10.2 - resolution: "yaml@npm:1.10.2" - checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f - languageName: node - linkType: hard - -"yargs-parser@npm:^21.0.0": - version: 21.0.1 - resolution: "yargs-parser@npm:21.0.1" - checksum: 10c0/384ca19e113a053bb7858cf47f891e630c10ea6ad91f9ad7cae84ea1cdfb09b155a2d0fa97b51116ee6f01e038faaa6c46964953afecd453fa64a761bb87475f - languageName: node - linkType: hard - -"yargs@npm:^17.0.0": - version: 17.5.1 - resolution: "yargs@npm:17.5.1" - dependencies: - cliui: "npm:^7.0.2" - escalade: "npm:^3.1.1" - get-caller-file: "npm:^2.0.5" - require-directory: "npm:^2.1.1" - string-width: "npm:^4.2.3" - y18n: "npm:^5.0.5" - yargs-parser: "npm:^21.0.0" - checksum: 10c0/349c823b772bc5383d56684bca8615020ae5cc0b81bacafe1ef268b281ade93528da1982b0f2dd898e0c678932d9147b8a2e93e341733622773caf7048196de4 - languageName: node - linkType: hard - -"yarn@npm:^1.22.15": - version: 1.22.19 - resolution: "yarn@npm:1.22.19" - bin: - yarn: bin/yarn.js - yarnpkg: bin/yarn.js - checksum: 10c0/a6f9cdf67cca7e11141a18ffc1736a24dd569885b2ec0838982fcf21e5138840c66d9ebfc1846b0b35bc7b415cb985c65d79fb43aa1721b865e4f60c5569062a - languageName: node - linkType: hard From 6afe658f032001a830a14d393c82f971f45663e9 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 27 Mar 2026 16:11:23 +0000 Subject: [PATCH 02/48] feat: re-add readme --- .gitignore | 3 ++- README.MD | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index ce6402f..e2f77e4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .elm-spa elm-stuff node_modules -dist \ No newline at end of file +dist +.devenv diff --git a/README.MD b/README.MD index 23d4401..1e9f5ee 100644 --- a/README.MD +++ b/README.MD @@ -1,4 +1,4 @@ -# my new project +# Devden website > 🌳 built with [elm-spa](https://elm-spa.dev) ## dependencies @@ -25,4 +25,20 @@ elm-spa watch # runs build as you code (without the server) ## learn more -You can learn more at [elm-spa.dev](https://elm-spa.dev) \ No newline at end of file +You can learn more at [elm-spa.dev](https://elm-spa.dev) + + +## TODO + +- [ ] Main page (index), shows information about the organisation with links to the discord server +- [ ] `/xp/leaderboard` - show the top N users in terms of XP and level (can query the API for this). + See https://lb.helpch.at/ for inspiration. Maybe allow parameters like `?size=10` to show the top 10 users. +- [ ] `/stats/` - Shows various graphs with stats about the servers. We can decide on exactly the data we show later, + but we have logs of all user joins, leaves and messages (with user IDs, timestamps, content, etc). +- [ ] `/projects/` - Show information about a various project we have. + Should follow a standard format and show github link, contributors (fetch from github?), and other information. +- [ ] `/faqs` - Show all the FAQs that you'd see in `ddfaq` +- [X] `/rules` - ~~pretty obvious, rules of the server. we can provide these in a json format if it helps~~ +- [ ] `/team` or `/staff` - Show a nice list of admins, mods, contributors to projects, etc +- [ ] `/moderation/` Once the bot gets moderation features it would be very very cool to have a panel + like Dyno or yagpdb have. This probably won't happen for a while. From 3ab7972d563e33a65b348bd6784ce9dab7a5f8a1 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 27 Mar 2026 17:21:07 +0000 Subject: [PATCH 03/48] chore: remove junk --- .devenv/load-exports | 1 - .devenv/profile | 1 - .devenv/root | 1 - .devenv/run | 1 - .devenv/state/files.json | 1 - .devenv/tasks.db | Bin 4096 -> 0 bytes .devenv/tasks.db-shm | Bin 32768 -> 0 bytes .devenv/tasks.db-wal | Bin 284312 -> 0 bytes .direnv/bin/nix-direnv-reload | 19 - .../12rd2bk68yfdn66pzcnwkgcyxf28y2fq-source | 1 - .../19n52d86cl95nj8jp5rgrh36sl762fba-source | 1 - .../2a9ylipb88x2sp2xn6cg58p5xm6qamai-source | 1 - .../59wm6wpldrgyplh2hjnmiba7zrq40slr-source | 1 - .../6sr5gjiqka9lw5pp65q65gsi4vwvykqd-source | 1 - .../8694kanhi1kzc34kg81l33pvn638qvnh-source | 1 - .../98mad1s6hrryyflb6qf6hd4xyb8r7cy4-source | 1 - .../9qa4c94rswp05pi33cw8djmr481xfmsb-source | 1 - .../a3lgxmqqn2hargk3zla9qwc7dk172pfd-source | 1 - .../a4vp2b9b5nypkhq15a2fjd436fhmcn1l-source | 1 - .../ah506d01i8mdjgwfzxisj0h6crv06h4d-source | 1 - .../ccsb5xyihjf7b377k5rzkqc16qc6pqd1-source | 1 - .../cp5dwcigb6sq67flr8z068sm272fqdwc-source | 1 - .../dn79d4hlja1h10w71g2dd9591bhb9gcm-source | 1 - .../g5v3sgqy6a0fsmas7mnapc196flrplix-source | 1 - .../gfsnfjvm197ha6c06n46shx5l56jr3v9-source | 1 - .../hh6i9rnxx1v6azzva6dc3ivglh9bxnzg-source | 1 - .../hs60rjkj4jf56x6ki09f3l3bjb3xmd4r-source | 1 - .../jzfmmjnq1cip816awnliw7ir69pcyg00-source | 1 - .../lscb3irg1bmxaywmpbcs1ix52519dwsv-source | 1 - .../n07s4r9cd44axqq4gzlvzckky2fiw3dv-source | 1 - .../s0bdxxy4gki016irflyqlxy5mzr96kin-source | 1 - .../sy3ism981f9xcbcmdc7gbk0yz28w6yjz-source | 1 - .../vfwqvh36nfahrhdx290ihhpgpnx68bv1-source | 1 - .../wygnldpfirbkskf6qpjbghvaqh3kkczb-source | 1 - .../xji4bckj16g6fvdwkzdlxivhwsjwk11m-source | 1 - .../yar8rblnwkp2mpk27capz695pgdbf74x-source | 1 - .../zmknnpbpzwg4s440xvwv6xww4fjgyyyb-source | 1 - ...e-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa | 1 - ...5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc | 2235 ----------------- .gitignore | 1 + flake.nix | 4 - 41 files changed, 1 insertion(+), 2292 deletions(-) delete mode 100755 .devenv/load-exports delete mode 120000 .devenv/profile delete mode 100644 .devenv/root delete mode 120000 .devenv/run delete mode 100644 .devenv/state/files.json delete mode 100644 .devenv/tasks.db delete mode 100644 .devenv/tasks.db-shm delete mode 100644 .devenv/tasks.db-wal delete mode 100755 .direnv/bin/nix-direnv-reload delete mode 120000 .direnv/flake-inputs/12rd2bk68yfdn66pzcnwkgcyxf28y2fq-source delete mode 120000 .direnv/flake-inputs/19n52d86cl95nj8jp5rgrh36sl762fba-source delete mode 120000 .direnv/flake-inputs/2a9ylipb88x2sp2xn6cg58p5xm6qamai-source delete mode 120000 .direnv/flake-inputs/59wm6wpldrgyplh2hjnmiba7zrq40slr-source delete mode 120000 .direnv/flake-inputs/6sr5gjiqka9lw5pp65q65gsi4vwvykqd-source delete mode 120000 .direnv/flake-inputs/8694kanhi1kzc34kg81l33pvn638qvnh-source delete mode 120000 .direnv/flake-inputs/98mad1s6hrryyflb6qf6hd4xyb8r7cy4-source delete mode 120000 .direnv/flake-inputs/9qa4c94rswp05pi33cw8djmr481xfmsb-source delete mode 120000 .direnv/flake-inputs/a3lgxmqqn2hargk3zla9qwc7dk172pfd-source delete mode 120000 .direnv/flake-inputs/a4vp2b9b5nypkhq15a2fjd436fhmcn1l-source delete mode 120000 .direnv/flake-inputs/ah506d01i8mdjgwfzxisj0h6crv06h4d-source delete mode 120000 .direnv/flake-inputs/ccsb5xyihjf7b377k5rzkqc16qc6pqd1-source delete mode 120000 .direnv/flake-inputs/cp5dwcigb6sq67flr8z068sm272fqdwc-source delete mode 120000 .direnv/flake-inputs/dn79d4hlja1h10w71g2dd9591bhb9gcm-source delete mode 120000 .direnv/flake-inputs/g5v3sgqy6a0fsmas7mnapc196flrplix-source delete mode 120000 .direnv/flake-inputs/gfsnfjvm197ha6c06n46shx5l56jr3v9-source delete mode 120000 .direnv/flake-inputs/hh6i9rnxx1v6azzva6dc3ivglh9bxnzg-source delete mode 120000 .direnv/flake-inputs/hs60rjkj4jf56x6ki09f3l3bjb3xmd4r-source delete mode 120000 .direnv/flake-inputs/jzfmmjnq1cip816awnliw7ir69pcyg00-source delete mode 120000 .direnv/flake-inputs/lscb3irg1bmxaywmpbcs1ix52519dwsv-source delete mode 120000 .direnv/flake-inputs/n07s4r9cd44axqq4gzlvzckky2fiw3dv-source delete mode 120000 .direnv/flake-inputs/s0bdxxy4gki016irflyqlxy5mzr96kin-source delete mode 120000 .direnv/flake-inputs/sy3ism981f9xcbcmdc7gbk0yz28w6yjz-source delete mode 120000 .direnv/flake-inputs/vfwqvh36nfahrhdx290ihhpgpnx68bv1-source delete mode 120000 .direnv/flake-inputs/wygnldpfirbkskf6qpjbghvaqh3kkczb-source delete mode 120000 .direnv/flake-inputs/xji4bckj16g6fvdwkzdlxivhwsjwk11m-source delete mode 120000 .direnv/flake-inputs/yar8rblnwkp2mpk27capz695pgdbf74x-source delete mode 120000 .direnv/flake-inputs/zmknnpbpzwg4s440xvwv6xww4fjgyyyb-source delete mode 120000 .direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa delete mode 100644 .direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc diff --git a/.devenv/load-exports b/.devenv/load-exports deleted file mode 100755 index 8b13789..0000000 --- a/.devenv/load-exports +++ /dev/null @@ -1 +0,0 @@ - diff --git a/.devenv/profile b/.devenv/profile deleted file mode 120000 index 360ce2d..0000000 --- a/.devenv/profile +++ /dev/null @@ -1 +0,0 @@ -/nix/store/24ccwhzzw2d1mq05cqyf9w0j2vzqrp8j-devenv-profile \ No newline at end of file diff --git a/.devenv/root b/.devenv/root deleted file mode 100644 index 7e364e1..0000000 --- a/.devenv/root +++ /dev/null @@ -1 +0,0 @@ -/Users/alex/workspace/website \ No newline at end of file diff --git a/.devenv/run b/.devenv/run deleted file mode 120000 index 8284d71..0000000 --- a/.devenv/run +++ /dev/null @@ -1 +0,0 @@ -/tmp/devenv-3226e91 \ No newline at end of file diff --git a/.devenv/state/files.json b/.devenv/state/files.json deleted file mode 100644 index b4c7443..0000000 --- a/.devenv/state/files.json +++ /dev/null @@ -1 +0,0 @@ -{"managedFiles":[]} diff --git a/.devenv/tasks.db b/.devenv/tasks.db deleted file mode 100644 index 7ee7c113a09428e4daafacb6e70a35d18573e608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WYDWB;00+HAlr;ljiVtj n8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O6ovo*4{!$i diff --git a/.devenv/tasks.db-shm b/.devenv/tasks.db-shm deleted file mode 100644 index 075b7290f098b9c40f30b68cff6c7ac8360adca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI)Nir-^6o>JT(iI-1FYoD_()T>C(JR|AwFF@WM&>NT9<0Dn7#JE5+*=`p5H&HB z_d5|MGV|t*oB97O;1q8ch*cN51`0>vnh)J_ce;Lj@>D8c-IpG3&Mz*X3)_9y4`;>#@SOsSTa`bRYk#K6FFq#?Vcn7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apg_h2YASOtG9J=+3RD%S4U<)VRDI*30$CTxRptj}J*D{+ zs3s6+X;})SDG;Z~Sqh{nkf)7Kdilu^W0aU>kyU>4j~x!uBr$a|0?oA3MIXNyW}GSJ zSYnM${dnCs8MZVNeAWP(T3%6i`3`1r$&~0R zOSYV(10zVwg@@ygxw{mGlmIt@kZS`oDNjdQ4yNhRnY(KO^lmOg845Wd<&KBr((q8Y z-`Y_k#THG8cOskjPNdko+Mj;=+Wp7B{qE-%xxVTKSL3gzxm;g%*-Pt=w`LxBVawK! zp8tmx?aNobFIKq=*GK)2KRA8$Z;vc*Uzo_40c&0V+Gr*a6nlF-u1f;}@mY^}RoMF+ zUF`j*s{HYZZ)Of;D^<6ZXl1&i92ceE^8dhA1i*0#%AIu~{XF6&&jtZi{e*RhX`?4BMl z3^Sb$%v-W#VOz`MWBZM4HP)EMwdsMifq4s;%sXM5Ib<3GcCWfJiM3|F`}xk*%(=u< zRlmH^?MkHL=8%9Af5Uf02Qur1fA2aGqf0(I0wLG&-IZ$6~ zuN)aluzzAf009ILKmY**5I_I{1Q0*~fypUgj}cVl>j-|i@w<<{bKiNn8v9ro7nq!9 zoTEYj0R#|0009ILKmY**5J2F#K+$sq7ccXC?@(e>=Jz~D;5)v%t5W>@xt}AbKI7Wq z=Ll-=s$2D?&f4f1Z-^Bv2q1s}0tg_000Ib1UV)9(-ujjq?p(ugv2P+i)Rm29L@{x^ z%Swo{=}a_zZC7tJv!-yZ?`W~~g2kJZ~I_JuU)$?p0E-^dblb(-)g=r+b-)i)}=CLD$}(lnjYETUYSUD#S{Ie zky+QjepE5|u_AKG{%Ggo1?`<}qu6WaM5?Olubfe;;=AymyX3;(yt!{wc>&i_=&a|Fj9U^s2h5&SCs^ufAU zF234+j==5T;S&E?5I_I{1Q0*~0R#|0009ILK;U!>bh^EjQ-i*w`>dXKE`R*#L@JR{ zBqiJ^1sjz}Kn^vlTC=R&-<4W*$9LLZ`f$|;eG6Z`BenhI&Cgcfrp@Z#STX&;^Sv)y zKUxzDPTzgjE%zO~t7=bR`={cthBE~7&k^kK{`BYVZ!ZYg&k?x&hh5?y3jzorfB*sr zAbZ)AKy9MW6{F z`{B*h3zXtwJpu?IfB*srAbPi*kz#|1pe*RGk{-twf*JI&sN{2 z&FbG+G5x^vy)RooS`!OS-+k6C_Z_^eYENK$<)%BuVHM>LD%;F^T&_QPab#RzwadTy z^d30hjsOA(Ab5*-9kMbhD8(qp5-3 zrc`36DVAg@URS2`fs(h{seT8da2_rAOqru4z^+5I_I{1Q0*~0R#|0psWRQ^&X$ADd#PCir-9S%>LzT%w)3Q5q`ZV z(w*9n9!hklx`*V!-rn_nYCPMcWuumq2wH3NkMJMg*@(py*)ViD5>+MD)GbBPbR`y! zg{+9C$AYrhuIl1heoM1t-4t))iGC}lhICC0%0XqKdp0URG+IHkb}kE8VhMfn2rURm|# zL(NUQM#cs9yZrk}7$~m`jNTxC00IagfB*srAbb!^BaENzWM0$_NV&1e#OMA z7bwaX=!?Eq^YusmX1bj(;PF4<^6wXKEC?Wg00IagfB*srAbz^+5I_I{1Q0*~0R#{jPXX!$3g#my$`=?ItpEBi zo=l!;=L@(+w19s#`2yp4<#AmH5i@K`5yc8?k}9j>Ytba zxka=<-C^BP4|ME3vGFgyY zp!Y<&QybDliSAVQkUZGiyS`72XM414)RGcGYi;Ame1eU~clL-zSJnE)nrE<}T_ZIV zPbiYwpOu1oNQr5K+3tv;^eD1r^={~s^6d`iDHPNT6y*zC^2p|=zw+*jKd$lb7xe-n zU*HMy1y1Lc%6B7x00IagfB*srAbjvy3|EKD0~TtR%=XTS3G z0%u*gY|oz7=^^R`##Cn|0tg_000IagfB*srAb`N65TIV5pkAOTUtqzW>(6hmX=t|d z1w3_oMZSP|V?h7`1Q0*~0R#|0009ILK%lGza`jVuuBM#Vm#eKFb+5dj)cy}I;WuJ2 zMK%mwjzm>SHFZl-G+l{>V<9V|>9L?JwyU~$mfzAWSvSR-c%t8msUclcgK|*GHB|Uq zVp7C{o{j6gh+)Z)!cxo}uY7^$cP()L^#j%}yI#N}q6Pdr$rmW=OP|gmfB*srAbslqu*U_8@&z8gZq`G=pZ@C` z)C)L!`e+>i1Q0*~0R#|0009ILK;U!=P%m(Fngn}XpeSG9KlQsm{iEhDe^l#VE#@iQ z>#EyJzQF0cQu%HK5I_I{1Q0*~0R#|00D+ScDBpYm(fe%^DPQ2?c~gDAjXv{Xjp(@B zzmt4{lezr(3<3xsfB*srAbbw){Kw0$-5ph{Hqx0R#|0009IL zKmY**zK{ac3l!7~6y*!-I$XQ^*$0BlYsGcp8O|3FK?5uZAb5!m);@4sT#3wZoXMZSP|V?h7`1Q0*~0R#|0009ILKwwe{ zI9D&=T+5Xml}$PC=&1&qQi-9abY@+@*`)VGx>Fm{Ly7KG_mDi;+q=F`jc0qbY}Aqx zL2GSe+#EDhgN?`MFSO?)D9RVO=QkI=du!j53r5BT_SyLY`zFkK=Tk2*87>lz z0RaRMKmY**5I_I{1Q0-AYys!)>O0r6WAy?>`2yD%od+upyr|gu0&Wp4;9pI?z}VLi zYY{*I0R#|0009ILKmY**%13~Ffp{n`OVLo+QZ-!*1yv~$R+NYlkEup9swhEAkH~Rd z)hsPyhD|A=SYb_4WmTL*uYDf#^#V_yxB9>vnW`f-{+(i6K;#Q7C10R?u5)^V00Iag zfB*srAb|=bEDx z1Q0*~0R#|0009ILKmY**#!;YDjzFpP_OQY^Be{dk#kqq;`2ru^wCUp;A5CtiUSJ&0 z6-^<400IagfB*srAbkFRFA%Fk^2q1s}0tg_000Ib{l7Mq}^_^?kk@*PhT7hbtGM_uR zdC@(YOZ&drIx;RG@&yi&FK|ki8apF^00IagfB*srAbiCyedk(stX`lf zU*M?&L;iCY?{Ba5uXedbv_Rcn@&(G{nxz*AAbL;wK<5I_I{1Q0*~0R+Cd0?yslcdli}>II7O11g2Jz6$uNr|AfwsB;h!bUTdG5eRVF_THVR-hz$sm4?2G^c2q1s}0tg_000IagfPg~+rE&yHt@lo?Xc|4JV2=y< z>{siKw`LxBVawL7XaD?)zneDqZR!OaI&UII7O1^(yW_wJk4TK%4#FW?r@0{+$H3zWeHOBWD8009ILKmY**5I_I{1U^%Me1Ui< zE=$o+*itoJ3k6jv5>}Lm5s#@xG^!{;OOMELUDYftVunpAqF7-~Qe{=JdTrW#y})h% zv7_~&mA`wq#=ldH3oLc{mx?zQ1Q0*~0R#|0009ILKmY**CY6A5clDiX+5Ypr)A4+P z+uOcBe`VsKY>oer7#9%v0{g@p3jzorfB*srAby!7 z2b+s?2aECr&baQ@AKbL!Mwxnn@;cr01_1;RKmY**5I_I{1Q0-AJO!M)tM6RPj@1hk z(yRTt0lTbd>7rg#%i^jk4C zq-$zW4l20@ug?|A)fV*3N+iv6vyn8Tse#^t&KaqpctVlX{;U+#LrP2=%yvf%rALu1 zt9L`6l%HjAc>l(u`-de%3QI9_yz&M9{3i#M^*5inn)wLI`hur(2q1s}0tg_000Iag zfB*ugB;ed#edk(sWIlpw!DzpZ ${!varName}"; - args+=("--subst-var" "$varName"); - done < <(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }') -} -_assignFirst () -{ - - local varName="$1"; - local _var; - local REMOVE=REMOVE; - shift; - for _var in "$@"; - do - if [ -n "${!_var-}" ]; then - eval "${varName}"="${_var}"; - return; - fi; - done; - echo; - echo "error: _assignFirst: could not find a non-empty variable whose name to assign to ${varName}."; - echo " The following variables were all unset or empty:"; - echo " $*"; - if [ -z "${out:-}" ]; then - echo ' If you do not want an "out" output in your derivation, make sure to define'; - echo ' the other specific required outputs. This can be achieved by picking one'; - echo " of the above as an output."; - echo ' You do not have to remove "out" if you want to have a different default'; - echo ' output, because the first output is taken as a default.'; - echo; - fi; - return 1 -} -_callImplicitHook () -{ - - local def="$1"; - local hookName="$2"; - if declare -F "$hookName" > /dev/null; then - nixTalkativeLog "calling implicit '$hookName' function hook"; - "$hookName"; - else - if type -p "$hookName" > /dev/null; then - nixTalkativeLog "sourcing implicit '$hookName' script hook"; - source "$hookName"; - else - if [ -n "${!hookName:-}" ]; then - nixTalkativeLog "evaling implicit '$hookName' string hook"; - eval "${!hookName}"; - else - return "$def"; - fi; - fi; - fi -} -_defaultUnpack () -{ - - local fn="$1"; - local destination; - if [ -d "$fn" ]; then - destination="$(stripHash "$fn")"; - if [ -e "$destination" ]; then - echo "Cannot copy $fn to $destination: destination already exists!"; - echo "Did you specify two \"srcs\" with the same \"name\"?"; - return 1; - fi; - cp -r --preserve=timestamps --reflink=auto -- "$fn" "$destination"; - else - case "$fn" in - *.tar.xz | *.tar.lzma | *.txz) - ( XZ_OPT="--threads=$NIX_BUILD_CORES" xz -d < "$fn"; - true ) | tar xf - --mode=+w --warning=no-timestamp - ;; - *.tar | *.tar.* | *.tgz | *.tbz2 | *.tbz) - tar xf "$fn" --mode=+w --warning=no-timestamp - ;; - *) - return 1 - ;; - esac; - fi -} -_doStrip () -{ - - local -ra flags=(dontStripHost dontStripTarget); - local -ra debugDirs=(stripDebugList stripDebugListTarget); - local -ra allDirs=(stripAllList stripAllListTarget); - local -ra stripCmds=(STRIP STRIP_FOR_TARGET); - local -ra ranlibCmds=(RANLIB RANLIB_FOR_TARGET); - stripDebugList=${stripDebugList[*]:-lib lib32 lib64 libexec bin sbin Applications Library/Frameworks}; - stripDebugListTarget=${stripDebugListTarget[*]:-}; - stripAllList=${stripAllList[*]:-}; - stripAllListTarget=${stripAllListTarget[*]:-}; - local i; - for i in ${!stripCmds[@]}; - do - local -n flag="${flags[$i]}"; - local -n debugDirList="${debugDirs[$i]}"; - local -n allDirList="${allDirs[$i]}"; - local -n stripCmd="${stripCmds[$i]}"; - local -n ranlibCmd="${ranlibCmds[$i]}"; - if [[ -n "${dontStrip-}" || -n "${flag-}" ]] || ! type -f "${stripCmd-}" 2> /dev/null 1>&2; then - continue; - fi; - stripDirs "$stripCmd" "$ranlibCmd" "$debugDirList" "${stripDebugFlags[*]:--S -p}"; - stripDirs "$stripCmd" "$ranlibCmd" "$allDirList" "${stripAllFlags[*]:--s -p}"; - done -} -_eval () -{ - - if declare -F "$1" > /dev/null 2>&1; then - "$@"; - else - eval "$1"; - fi -} -_logHook () -{ - - if [[ -z ${NIX_LOG_FD-} ]]; then - return; - fi; - local hookKind="$1"; - local hookExpr="$2"; - shift 2; - if declare -F "$hookExpr" > /dev/null 2>&1; then - nixTalkativeLog "calling '$hookKind' function hook '$hookExpr'" "$@"; - else - if type -p "$hookExpr" > /dev/null; then - nixTalkativeLog "sourcing '$hookKind' script hook '$hookExpr'"; - else - if [[ "$hookExpr" != "_callImplicitHook"* ]]; then - local exprToOutput; - if [[ ${NIX_DEBUG:-0} -ge 5 ]]; then - exprToOutput="$hookExpr"; - else - local hookExprLine; - while IFS= read -r hookExprLine; do - hookExprLine="${hookExprLine#"${hookExprLine%%[![:space:]]*}"}"; - if [[ -n "$hookExprLine" ]]; then - exprToOutput+="$hookExprLine\\n "; - fi; - done <<< "$hookExpr"; - exprToOutput="${exprToOutput%%\\n }"; - fi; - nixTalkativeLog "evaling '$hookKind' string hook '$exprToOutput'"; - fi; - fi; - fi -} -_makeSymlinksRelative () -{ - - local prefixes; - prefixes=(); - for output in $(getAllOutputNames); - do - [ ! -e "${!output}" ] && continue; - prefixes+=("${!output}"); - done; - find "${prefixes[@]}" -type l -printf '%H\0%p\0' | xargs -0 -n2 -r -P "$NIX_BUILD_CORES" sh -c ' - output="$1" - link="$2" - - linkTarget=$(readlink "$link") - - # only touch links that point inside the same output tree - [[ $linkTarget == "$output"/* ]] || exit 0 - - if [ ! -e "$linkTarget" ]; then - echo "the symlink $link is broken, it points to $linkTarget (which is missing)" - fi - - echo "making symlink relative: $link" - ln -snrf "$linkTarget" "$link" - ' _ -} -_moveLib64 () -{ - - if [ "${dontMoveLib64-}" = 1 ]; then - return; - fi; - if [ ! -e "$prefix/lib64" -o -L "$prefix/lib64" ]; then - return; - fi; - echo "moving $prefix/lib64/* to $prefix/lib"; - mkdir -p $prefix/lib; - shopt -s dotglob; - for i in $prefix/lib64/*; - do - mv --no-clobber "$i" $prefix/lib; - done; - shopt -u dotglob; - rmdir $prefix/lib64; - ln -s lib $prefix/lib64 -} -_moveSbin () -{ - - if [ "${dontMoveSbin-}" = 1 ]; then - return; - fi; - if [ ! -e "$prefix/sbin" -o -L "$prefix/sbin" ]; then - return; - fi; - echo "moving $prefix/sbin/* to $prefix/bin"; - mkdir -p $prefix/bin; - shopt -s dotglob; - for i in $prefix/sbin/*; - do - mv "$i" $prefix/bin; - done; - shopt -u dotglob; - rmdir $prefix/sbin; - ln -s bin $prefix/sbin -} -_moveSystemdUserUnits () -{ - - if [ "${dontMoveSystemdUserUnits:-0}" = 1 ]; then - return; - fi; - if [ ! -e "${prefix:?}/lib/systemd/user" ]; then - return; - fi; - local source="$prefix/lib/systemd/user"; - local target="$prefix/share/systemd/user"; - echo "moving $source/* to $target"; - mkdir -p "$target"; - ( shopt -s dotglob; - for i in "$source"/*; - do - mv "$i" "$target"; - done ); - rmdir "$source"; - ln -s "$target" "$source" -} -_moveToShare () -{ - - if [ -n "$__structuredAttrs" ]; then - if [ -z "${forceShare-}" ]; then - forceShare=(man doc info); - fi; - else - forceShare=(${forceShare:-man doc info}); - fi; - if [[ -z "$out" ]]; then - return; - fi; - for d in "${forceShare[@]}"; - do - if [ -d "$out/$d" ]; then - if [ -d "$out/share/$d" ]; then - echo "both $d/ and share/$d/ exist!"; - else - echo "moving $out/$d to $out/share/$d"; - mkdir -p $out/share; - mv $out/$d $out/share/; - fi; - fi; - done -} -_multioutConfig () -{ - - if [ "$(getAllOutputNames)" = "out" ] || [ -z "${setOutputFlags-1}" ]; then - return; - fi; - if [ -z "${shareDocName:-}" ]; then - local confScript="${configureScript:-}"; - if [ -z "$confScript" ] && [ -x ./configure ]; then - confScript=./configure; - fi; - if [ -f "$confScript" ]; then - local shareDocName="$(sed -n "s/^PACKAGE_TARNAME='\(.*\)'$/\1/p" < "$confScript")"; - fi; - if [ -z "$shareDocName" ] || echo "$shareDocName" | grep -q '[^a-zA-Z0-9_-]'; then - shareDocName="$(echo "$name" | sed 's/-[^a-zA-Z].*//')"; - fi; - fi; - prependToVar configureFlags --bindir="${!outputBin}"/bin --sbindir="${!outputBin}"/sbin --includedir="${!outputInclude}"/include --mandir="${!outputMan}"/share/man --infodir="${!outputInfo}"/share/info --docdir="${!outputDoc}"/share/doc/"${shareDocName}" --libdir="${!outputLib}"/lib --libexecdir="${!outputLib}"/libexec --localedir="${!outputLib}"/share/locale; - prependToVar installFlags pkgconfigdir="${!outputDev}"/lib/pkgconfig m4datadir="${!outputDev}"/share/aclocal aclocaldir="${!outputDev}"/share/aclocal -} -_multioutDevs () -{ - - if [ "$(getAllOutputNames)" = "out" ] || [ -z "${moveToDev-1}" ]; then - return; - fi; - moveToOutput include "${!outputInclude}"; - moveToOutput lib/pkgconfig "${!outputDev}"; - moveToOutput share/pkgconfig "${!outputDev}"; - moveToOutput lib/cmake "${!outputDev}"; - moveToOutput share/aclocal "${!outputDev}"; - for f in "${!outputDev}"/{lib,share}/pkgconfig/*.pc; - do - echo "Patching '$f' includedir to output ${!outputInclude}"; - sed -i "/^includedir=/s,=\${prefix},=${!outputInclude}," "$f"; - done -} -_multioutDocs () -{ - - local REMOVE=REMOVE; - moveToOutput share/info "${!outputInfo}"; - moveToOutput share/doc "${!outputDoc}"; - moveToOutput share/gtk-doc "${!outputDevdoc}"; - moveToOutput share/devhelp/books "${!outputDevdoc}"; - moveToOutput share/man "${!outputMan}"; - moveToOutput share/man/man3 "${!outputDevman}" -} -_multioutPropagateDev () -{ - - if [ "$(getAllOutputNames)" = "out" ]; then - return; - fi; - local outputFirst; - for outputFirst in $(getAllOutputNames); - do - break; - done; - local propagaterOutput="$outputDev"; - if [ -z "$propagaterOutput" ]; then - propagaterOutput="$outputFirst"; - fi; - if [ -z "${propagatedBuildOutputs+1}" ]; then - local po_dirty="$outputBin $outputInclude $outputLib"; - set +o pipefail; - propagatedBuildOutputs=`echo "$po_dirty" | tr -s ' ' '\n' | grep -v -F "$propagaterOutput" | sort -u | tr '\n' ' ' `; - set -o pipefail; - fi; - if [ -z "$propagatedBuildOutputs" ]; then - return; - fi; - mkdir -p "${!propagaterOutput}"/nix-support; - for output in $propagatedBuildOutputs; - do - echo -n " ${!output}" >> "${!propagaterOutput}"/nix-support/propagated-build-inputs; - done -} -_nixLogWithLevel () -{ - - [[ -z ${NIX_LOG_FD-} || ${NIX_DEBUG:-0} -lt ${1:?} ]] && return 0; - local logLevel; - case "${1:?}" in - 0) - logLevel=ERROR - ;; - 1) - logLevel=WARN - ;; - 2) - logLevel=NOTICE - ;; - 3) - logLevel=INFO - ;; - 4) - logLevel=TALKATIVE - ;; - 5) - logLevel=CHATTY - ;; - 6) - logLevel=DEBUG - ;; - 7) - logLevel=VOMIT - ;; - *) - echo "_nixLogWithLevel: called with invalid log level: ${1:?}" >&"$NIX_LOG_FD"; - return 1 - ;; - esac; - local callerName="${FUNCNAME[2]}"; - if [[ $callerName == "_callImplicitHook" ]]; then - callerName="${hookName:?}"; - fi; - printf "%s: %s: %s\n" "$logLevel" "$callerName" "${2:?}" >&"$NIX_LOG_FD" -} -_overrideFirst () -{ - - if [ -z "${!1-}" ]; then - _assignFirst "$@"; - fi -} -_pruneLibtoolFiles () -{ - - if [ "${dontPruneLibtoolFiles-}" ] || [ ! -e "$prefix" ]; then - return; - fi; - find "$prefix" -type f -name '*.la' -exec grep -q '^# Generated by .*libtool' {} \; -exec grep -q "^old_library=''" {} \; -exec sed -i {} -e "/^dependency_libs='[^']/ c dependency_libs='' #pruned" \; -} -_updateSourceDateEpochFromSourceRoot () -{ - - if [ -n "$sourceRoot" ]; then - updateSourceDateEpoch "$sourceRoot"; - fi -} -activatePackage () -{ - - local pkg="$1"; - local -r hostOffset="$2"; - local -r targetOffset="$3"; - (( hostOffset <= targetOffset )) || exit 1; - if [ -f "$pkg" ]; then - nixTalkativeLog "sourcing setup hook '$pkg'"; - source "$pkg"; - fi; - if [[ -z "${strictDeps-}" || "$hostOffset" -le -1 ]]; then - addToSearchPath _PATH "$pkg/bin"; - fi; - if (( hostOffset <= -1 )); then - addToSearchPath _XDG_DATA_DIRS "$pkg/share"; - fi; - if [[ "$hostOffset" -eq 0 && -d "$pkg/bin" ]]; then - addToSearchPath _HOST_PATH "$pkg/bin"; - fi; - if [[ -f "$pkg/nix-support/setup-hook" ]]; then - nixTalkativeLog "sourcing setup hook '$pkg/nix-support/setup-hook'"; - source "$pkg/nix-support/setup-hook"; - fi -} -addEnvHooks () -{ - - local depHostOffset="$1"; - shift; - local pkgHookVarsSlice="${pkgHookVarVars[$depHostOffset + 1]}[@]"; - local pkgHookVar; - for pkgHookVar in "${!pkgHookVarsSlice}"; - do - eval "${pkgHookVar}s"'+=("$@")'; - done -} -addToSearchPath () -{ - - addToSearchPathWithCustomDelimiter ":" "$@" -} -addToSearchPathWithCustomDelimiter () -{ - - local delimiter="$1"; - local varName="$2"; - local dir="$3"; - if [[ -d "$dir" && "${!varName:+${delimiter}${!varName}${delimiter}}" != *"${delimiter}${dir}${delimiter}"* ]]; then - export "${varName}=${!varName:+${!varName}${delimiter}}${dir}"; - fi -} -appendToVar () -{ - - local -n nameref="$1"; - local useArray type; - if [ -n "$__structuredAttrs" ]; then - useArray=true; - else - useArray=false; - fi; - if type=$(declare -p "$1" 2> /dev/null); then - case "${type#* }" in - -A*) - echo "appendToVar(): ERROR: trying to use appendToVar on an associative array, use variable+=([\"X\"]=\"Y\") instead." 1>&2; - return 1 - ;; - -a*) - useArray=true - ;; - *) - useArray=false - ;; - esac; - fi; - shift; - if $useArray; then - nameref=(${nameref+"${nameref[@]}"} "$@"); - else - nameref="${nameref-} $*"; - fi -} -auditTmpdir () -{ - - local dir="$1"; - [ -e "$dir" ] || return 0; - echo "checking for references to $TMPDIR/ in $dir..."; - local tmpdir elf_fifo script_fifo; - tmpdir="$(mktemp -d)"; - elf_fifo="$tmpdir/elf"; - script_fifo="$tmpdir/script"; - mkfifo "$elf_fifo" "$script_fifo"; - ( find "$dir" -type f -not -path '*/.build-id/*' -print0 | while IFS= read -r -d '' file; do - if isELF "$file"; then - printf '%s\0' "$file" 1>&3; - else - if isScript "$file"; then - filename=${file##*/}; - dir=${file%/*}; - if [ -e "$dir/.$filename-wrapped" ]; then - printf '%s\0' "$file" 1>&4; - fi; - fi; - fi; - done; - exec 3>&- 4>&- ) 3> "$elf_fifo" 4> "$script_fifo" & ( xargs -0 -r -P "$NIX_BUILD_CORES" -n 1 sh -c ' - if { printf :; patchelf --print-rpath "$1"; } | grep -q -F ":$TMPDIR/"; then - echo "RPATH of binary $1 contains a forbidden reference to $TMPDIR/" - exit 1 - fi - ' _ < "$elf_fifo" ) & local pid_elf=$!; - local pid_script; - ( xargs -0 -r -P "$NIX_BUILD_CORES" -n 1 sh -c ' - if grep -q -F "$TMPDIR/" "$1"; then - echo "wrapper script $1 contains a forbidden reference to $TMPDIR/" - exit 1 - fi - ' _ < "$script_fifo" ) & local pid_script=$!; - wait "$pid_elf" || { - echo "Some binaries contain forbidden references to $TMPDIR/. Check the error above!"; - exit 1 - }; - wait "$pid_script" || { - echo "Some scripts contain forbidden references to $TMPDIR/. Check the error above!"; - exit 1 - }; - rm -r "$tmpdir" -} -bintoolsWrapper_addLDVars () -{ - - local role_post; - getHostRoleEnvHook; - if [[ -d "$1/lib64" && ! -L "$1/lib64" ]]; then - export NIX_LDFLAGS${role_post}+=" -L$1/lib64"; - fi; - if [[ -d "$1/lib" ]]; then - local -a glob=($1/lib/lib*); - if [ "${#glob[*]}" -gt 0 ]; then - export NIX_LDFLAGS${role_post}+=" -L$1/lib"; - fi; - fi -} -buildPhase () -{ - - runHook preBuild; - if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then - echo "no Makefile or custom buildPhase, doing nothing"; - else - foundMakefile=1; - local flagsArray=(${enableParallelBuilding:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); - concatTo flagsArray makeFlags makeFlagsArray buildFlags buildFlagsArray; - echoCmd 'build flags' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - unset flagsArray; - fi; - runHook postBuild -} -ccWrapper_addCVars () -{ - - local role_post; - getHostRoleEnvHook; - local found=; - if [ -d "$1/include" ]; then - export NIX_CFLAGS_COMPILE${role_post}+=" -isystem $1/include"; - found=1; - fi; - if [ -d "$1/Library/Frameworks" ]; then - export NIX_CFLAGS_COMPILE${role_post}+=" -iframework $1/Library/Frameworks"; - found=1; - fi; - if [[ -n "1" && -n ${NIX_STORE:-} && -n $found ]]; then - local scrubbed="$NIX_STORE/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-${1#"$NIX_STORE"/*-}"; - export NIX_CFLAGS_COMPILE${role_post}+=" -fmacro-prefix-map=$1=$scrubbed"; - fi -} -checkPhase () -{ - - runHook preCheck; - if [[ -z "${foundMakefile:-}" ]]; then - echo "no Makefile or custom checkPhase, doing nothing"; - runHook postCheck; - return; - fi; - if [[ -z "${checkTarget:-}" ]]; then - if make -n ${makefile:+-f $makefile} check > /dev/null 2>&1; then - checkTarget="check"; - else - if make -n ${makefile:+-f $makefile} test > /dev/null 2>&1; then - checkTarget="test"; - fi; - fi; - fi; - if [[ -z "${checkTarget:-}" ]]; then - echo "no check/test target in ${makefile:-Makefile}, doing nothing"; - else - local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); - concatTo flagsArray makeFlags makeFlagsArray checkFlags=VERBOSE=y checkFlagsArray checkTarget; - echoCmd 'check flags' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - unset flagsArray; - fi; - runHook postCheck -} -compressManPages () -{ - - local dir="$1"; - if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]; then - return; - fi; - echo "gzipping man pages under $dir/share/man/"; - find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | xargs -0 -n1 -P "$NIX_BUILD_CORES" gzip -n -f; - find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | sort -z | while IFS= read -r -d '' f; do - local target; - target="$(readlink -f "$f")"; - if [ -f "$target".gz ]; then - ln -sf "$target".gz "$f".gz && rm "$f"; - fi; - done -} -concatStringsSep () -{ - - local sep="$1"; - local name="$2"; - local type oldifs; - if type=$(declare -p "$name" 2> /dev/null); then - local -n nameref="$name"; - case "${type#* }" in - -A*) - echo "concatStringsSep(): ERROR: trying to use concatStringsSep on an associative array." 1>&2; - return 1 - ;; - -a*) - local IFS="$(printf '\036')" - ;; - *) - local IFS=" " - ;; - esac; - local ifs_separated="${nameref[*]}"; - echo -n "${ifs_separated//"$IFS"/"$sep"}"; - fi -} -concatTo () -{ - - local -; - set -o noglob; - local -n targetref="$1"; - shift; - local arg default name type; - for arg in "$@"; - do - IFS="=" read -r name default <<< "$arg"; - local -n nameref="$name"; - if [[ -z "${nameref[*]}" && -n "$default" ]]; then - targetref+=("$default"); - else - if type=$(declare -p "$name" 2> /dev/null); then - case "${type#* }" in - -A*) - echo "concatTo(): ERROR: trying to use concatTo on an associative array." 1>&2; - return 1 - ;; - -a*) - targetref+=("${nameref[@]}") - ;; - *) - if [[ "$name" = *"Array" ]]; then - nixErrorLog "concatTo(): $name is not declared as array, treating as a singleton. This will become an error in future"; - targetref+=(${nameref+"${nameref[@]}"}); - else - targetref+=(${nameref-}); - fi - ;; - esac; - fi; - fi; - done -} -configurePhase () -{ - - runHook preConfigure; - : "${configureScript=}"; - if [[ -z "$configureScript" && -x ./configure ]]; then - configureScript=./configure; - fi; - if [ -z "${dontFixLibtool:-}" ]; then - export lt_cv_deplibs_check_method="${lt_cv_deplibs_check_method-pass_all}"; - local i; - find . -iname "ltmain.sh" -print0 | while IFS='' read -r -d '' i; do - echo "fixing libtool script $i"; - fixLibtool "$i"; - done; - CONFIGURE_MTIME_REFERENCE=$(mktemp configure.mtime.reference.XXXXXX); - find . -executable -type f -name configure -exec grep -l 'GNU Libtool is free software; you can redistribute it and/or modify' {} \; -exec touch -r {} "$CONFIGURE_MTIME_REFERENCE" \; -exec sed -i s_/usr/bin/file_file_g {} \; -exec touch -r "$CONFIGURE_MTIME_REFERENCE" {} \;; - rm -f "$CONFIGURE_MTIME_REFERENCE"; - fi; - if [[ -z "${dontAddPrefix:-}" && -n "$prefix" ]]; then - local -r prefixKeyOrDefault="${prefixKey:---prefix=}"; - if [ "${prefixKeyOrDefault: -1}" = " " ]; then - prependToVar configureFlags "$prefix"; - prependToVar configureFlags "${prefixKeyOrDefault::-1}"; - else - prependToVar configureFlags "$prefixKeyOrDefault$prefix"; - fi; - fi; - if [[ -f "$configureScript" ]]; then - if [ -z "${dontAddDisableDepTrack:-}" ]; then - if grep -q dependency-tracking "$configureScript"; then - prependToVar configureFlags --disable-dependency-tracking; - fi; - fi; - if [ -z "${dontDisableStatic:-}" ]; then - if grep -q enable-static "$configureScript"; then - prependToVar configureFlags --disable-static; - fi; - fi; - if [ -z "${dontPatchShebangsInConfigure:-}" ]; then - patchShebangs --build "$configureScript"; - fi; - fi; - if [ -n "$configureScript" ]; then - local -a flagsArray; - concatTo flagsArray configureFlags configureFlagsArray; - echoCmd 'configure flags' "${flagsArray[@]}"; - $configureScript "${flagsArray[@]}"; - unset flagsArray; - else - echo "no configure script, doing nothing"; - fi; - runHook postConfigure -} -consumeEntire () -{ - - if IFS='' read -r -d '' "$1"; then - echo "consumeEntire(): ERROR: Input null bytes, won't process" 1>&2; - return 1; - fi -} -definePhases () -{ - - if [ -z "${phases[*]:-}" ]; then - phases="${prePhases[*]:-} unpackPhase patchPhase ${preConfigurePhases[*]:-} configurePhase ${preBuildPhases[*]:-} buildPhase checkPhase ${preInstallPhases[*]:-} installPhase ${preFixupPhases[*]:-} fixupPhase installCheckPhase ${preDistPhases[*]:-} distPhase ${postPhases[*]:-}"; - fi -} -distPhase () -{ - - runHook preDist; - local flagsArray=(); - concatTo flagsArray distFlags distFlagsArray distTarget=dist; - echo 'dist flags: %q' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - if [ "${dontCopyDist:-0}" != 1 ]; then - mkdir -p "$out/tarballs"; - cp -pvd ${tarballs[*]:-*.tar.gz} "$out/tarballs"; - fi; - runHook postDist -} -dumpVars () -{ - - if [[ "${noDumpEnvVars:-0}" != 1 && -d "$NIX_BUILD_TOP" ]]; then - local old_umask; - old_umask=$(umask); - umask 0077; - export 2> /dev/null > "$NIX_BUILD_TOP/env-vars"; - umask "$old_umask"; - fi -} -echoCmd () -{ - - printf "%s:" "$1"; - shift; - printf ' %q' "$@"; - echo -} -exitHandler () -{ - - exitCode="$?"; - set +e; - if [ -n "${showBuildStats:-}" ]; then - read -r -d '' -a buildTimes < <(times); - echo "build times:"; - echo "user time for the shell ${buildTimes[0]}"; - echo "system time for the shell ${buildTimes[1]}"; - echo "user time for all child processes ${buildTimes[2]}"; - echo "system time for all child processes ${buildTimes[3]}"; - fi; - if (( "$exitCode" != 0 )); then - runHook failureHook; - if [ -n "${succeedOnFailure:-}" ]; then - echo "build failed with exit code $exitCode (ignored)"; - mkdir -p "$out/nix-support"; - printf "%s" "$exitCode" > "$out/nix-support/failed"; - exit 0; - fi; - else - runHook exitHook; - fi; - return "$exitCode" -} -findInputs () -{ - - local -r pkg="$1"; - local -r hostOffset="$2"; - local -r targetOffset="$3"; - (( hostOffset <= targetOffset )) || exit 1; - local varVar="${pkgAccumVarVars[hostOffset + 1]}"; - local varRef="$varVar[$((targetOffset - hostOffset))]"; - local var="${!varRef}"; - unset -v varVar varRef; - local varSlice="$var[*]"; - case " ${!varSlice-} " in - *" $pkg "*) - return 0 - ;; - esac; - unset -v varSlice; - eval "$var"'+=("$pkg")'; - if ! [ -e "$pkg" ]; then - echo "build input $pkg does not exist" 1>&2; - exit 1; - fi; - function mapOffset () - { - local -r inputOffset="$1"; - local -n outputOffset="$2"; - if (( inputOffset <= 0 )); then - outputOffset=$((inputOffset + hostOffset)); - else - outputOffset=$((inputOffset - 1 + targetOffset)); - fi - }; - local relHostOffset; - for relHostOffset in "${allPlatOffsets[@]}"; - do - local files="${propagatedDepFilesVars[relHostOffset + 1]}"; - local hostOffsetNext; - mapOffset "$relHostOffset" hostOffsetNext; - (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; - local relTargetOffset; - for relTargetOffset in "${allPlatOffsets[@]}"; - do - (( "$relHostOffset" <= "$relTargetOffset" )) || continue; - local fileRef="${files}[$relTargetOffset - $relHostOffset]"; - local file="${!fileRef}"; - unset -v fileRef; - local targetOffsetNext; - mapOffset "$relTargetOffset" targetOffsetNext; - (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; - [[ -f "$pkg/nix-support/$file" ]] || continue; - local pkgNext; - read -r -d '' pkgNext < "$pkg/nix-support/$file" || true; - for pkgNext in $pkgNext; - do - findInputs "$pkgNext" "$hostOffsetNext" "$targetOffsetNext"; - done; - done; - done -} -fixLibtool () -{ - - local search_path; - for flag in $NIX_LDFLAGS; - do - case $flag in - -L*) - search_path+=" ${flag#-L}" - ;; - esac; - done; - sed -i "$1" -e "s^eval \(sys_lib_search_path=\).*^\1'${search_path:-}'^" -e 's^eval sys_lib_.+search_path=.*^^' -} -fixupPhase () -{ - - local output; - for output in $(getAllOutputNames); - do - if [ -e "${!output}" ]; then - chmod -R u+w,u-s,g-s "${!output}"; - fi; - done; - runHook preFixup; - local output; - for output in $(getAllOutputNames); - do - prefix="${!output}" runHook fixupOutput; - done; - recordPropagatedDependencies; - if [ -n "${setupHook:-}" ]; then - mkdir -p "${!outputDev}/nix-support"; - substituteAll "$setupHook" "${!outputDev}/nix-support/setup-hook"; - fi; - if [ -n "${setupHooks:-}" ]; then - mkdir -p "${!outputDev}/nix-support"; - local hook; - for hook in ${setupHooks[@]}; - do - local content; - consumeEntire content < "$hook"; - substituteAllStream content "file '$hook'" >> "${!outputDev}/nix-support/setup-hook"; - unset -v content; - done; - unset -v hook; - fi; - if [ -n "${propagatedUserEnvPkgs[*]:-}" ]; then - mkdir -p "${!outputBin}/nix-support"; - printWords "${propagatedUserEnvPkgs[@]}" > "${!outputBin}/nix-support/propagated-user-env-packages"; - fi; - runHook postFixup -} -genericBuild () -{ - - export GZIP_NO_TIMESTAMPS=1; - if [ -f "${buildCommandPath:-}" ]; then - source "$buildCommandPath"; - return; - fi; - if [ -n "${buildCommand:-}" ]; then - eval "$buildCommand"; - return; - fi; - definePhases; - for curPhase in ${phases[*]}; - do - runPhase "$curPhase"; - done -} -getAllOutputNames () -{ - - if [ -n "$__structuredAttrs" ]; then - echo "${!outputs[*]}"; - else - echo "$outputs"; - fi -} -getHostRole () -{ - - getRole "$hostOffset" -} -getHostRoleEnvHook () -{ - - getRole "$depHostOffset" -} -getRole () -{ - - case $1 in - -1) - role_post='_FOR_BUILD' - ;; - 0) - role_post='' - ;; - 1) - role_post='_FOR_TARGET' - ;; - *) - echo "apple-sdk-14.4: used as improper sort of dependency" 1>&2; - return 1 - ;; - esac -} -getTargetRole () -{ - - getRole "$targetOffset" -} -getTargetRoleEnvHook () -{ - - getRole "$depTargetOffset" -} -getTargetRoleWrapper () -{ - - case $targetOffset in - -1) - export NIX_@wrapperName@_TARGET_BUILD_@suffixSalt@=1 - ;; - 0) - export NIX_@wrapperName@_TARGET_HOST_@suffixSalt@=1 - ;; - 1) - export NIX_@wrapperName@_TARGET_TARGET_@suffixSalt@=1 - ;; - *) - echo "apple-sdk-14.4: used as improper sort of dependency" 1>&2; - return 1 - ;; - esac -} -installCheckPhase () -{ - - runHook preInstallCheck; - if [[ -z "${foundMakefile:-}" ]]; then - echo "no Makefile or custom installCheckPhase, doing nothing"; - else - if [[ -z "${installCheckTarget:-}" ]] && ! make -n ${makefile:+-f $makefile} "${installCheckTarget:-installcheck}" > /dev/null 2>&1; then - echo "no installcheck target in ${makefile:-Makefile}, doing nothing"; - else - local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); - concatTo flagsArray makeFlags makeFlagsArray installCheckFlags installCheckFlagsArray installCheckTarget=installcheck; - echoCmd 'installcheck flags' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - unset flagsArray; - fi; - fi; - runHook postInstallCheck -} -installPhase () -{ - - runHook preInstall; - if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then - echo "no Makefile or custom installPhase, doing nothing"; - runHook postInstall; - return; - else - foundMakefile=1; - fi; - if [ -n "$prefix" ]; then - mkdir -p "$prefix"; - fi; - local flagsArray=(${enableParallelInstalling:+-j${NIX_BUILD_CORES}} SHELL="$SHELL"); - concatTo flagsArray makeFlags makeFlagsArray installFlags installFlagsArray installTargets=install; - echoCmd 'install flags' "${flagsArray[@]}"; - make ${makefile:+-f $makefile} "${flagsArray[@]}"; - unset flagsArray; - runHook postInstall -} -isELF () -{ - - local fn="$1"; - local fd; - local magic; - exec {fd}< "$fn"; - LANG=C read -r -n 4 -u "$fd" magic; - exec {fd}>&-; - if [ "$magic" = 'ELF' ]; then - return 0; - else - return 1; - fi -} -isMachO () -{ - - local fn="$1"; - local fd; - local magic; - exec {fd}< "$fn"; - LANG=C read -r -n 4 -u "$fd" magic; - exec {fd}>&-; - if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xcf") || "$magic" = $(echo -ne "\xcf\xfa\xed\xfe") ]]; then - return 0; - else - if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xce") || "$magic" = $(echo -ne "\xce\xfa\xed\xfe") ]]; then - return 0; - else - if [[ "$magic" = $(echo -ne "\xca\xfe\xba\xbe") || "$magic" = $(echo -ne "\xbe\xba\xfe\xca") ]]; then - return 0; - else - return 1; - fi; - fi; - fi -} -isScript () -{ - - local fn="$1"; - local fd; - local magic; - exec {fd}< "$fn"; - LANG=C read -r -n 2 -u "$fd" magic; - exec {fd}>&-; - if [[ "$magic" =~ \#! ]]; then - return 0; - else - return 1; - fi -} -mapOffset () -{ - - local -r inputOffset="$1"; - local -n outputOffset="$2"; - if (( inputOffset <= 0 )); then - outputOffset=$((inputOffset + hostOffset)); - else - outputOffset=$((inputOffset - 1 + targetOffset)); - fi -} -moveToOutput () -{ - - local patt="$1"; - local dstOut="$2"; - local output; - for output in $(getAllOutputNames); - do - if [ "${!output}" = "$dstOut" ]; then - continue; - fi; - local srcPath; - for srcPath in "${!output}"/$patt; - do - if [ ! -e "$srcPath" ] && [ ! -L "$srcPath" ]; then - continue; - fi; - if [ "$dstOut" = REMOVE ]; then - echo "Removing $srcPath"; - rm -r "$srcPath"; - else - local dstPath="$dstOut${srcPath#${!output}}"; - echo "Moving $srcPath to $dstPath"; - if [ -d "$dstPath" ] && [ -d "$srcPath" ]; then - rmdir "$srcPath" --ignore-fail-on-non-empty; - if [ -d "$srcPath" ]; then - mv -t "$dstPath" "$srcPath"/*; - rmdir "$srcPath"; - fi; - else - mkdir -p "$(readlink -m "$dstPath/..")"; - mv "$srcPath" "$dstPath"; - fi; - fi; - local srcParent="$(readlink -m "$srcPath/..")"; - if [ -n "$(find "$srcParent" -maxdepth 0 -type d -empty 2> /dev/null)" ]; then - echo "Removing empty $srcParent/ and (possibly) its parents"; - rmdir -p --ignore-fail-on-non-empty "$srcParent" 2> /dev/null || true; - fi; - done; - done -} -nixChattyLog () -{ - - _nixLogWithLevel 5 "$*" -} -nixDebugLog () -{ - - _nixLogWithLevel 6 "$*" -} -nixErrorLog () -{ - - _nixLogWithLevel 0 "$*" -} -nixInfoLog () -{ - - _nixLogWithLevel 3 "$*" -} -nixLog () -{ - - [[ -z ${NIX_LOG_FD-} ]] && return 0; - local callerName="${FUNCNAME[1]}"; - if [[ $callerName == "_callImplicitHook" ]]; then - callerName="${hookName:?}"; - fi; - printf "%s: %s\n" "$callerName" "$*" >&"$NIX_LOG_FD" -} -nixNoticeLog () -{ - - _nixLogWithLevel 2 "$*" -} -nixTalkativeLog () -{ - - _nixLogWithLevel 4 "$*" -} -nixVomitLog () -{ - - _nixLogWithLevel 7 "$*" -} -nixWarnLog () -{ - - _nixLogWithLevel 1 "$*" -} -noBrokenSymlinks () -{ - - local -r output="${1:?}"; - local path; - local pathParent; - local symlinkTarget; - local -i numDanglingSymlinks=0; - local -i numReflexiveSymlinks=0; - local -i numUnreadableSymlinks=0; - if [[ ! -e $output ]]; then - nixWarnLog "skipping non-existent output $output"; - return 0; - fi; - nixInfoLog "running on $output"; - while IFS= read -r -d '' path; do - pathParent="$(dirname "$path")"; - if ! symlinkTarget="$(readlink "$path")"; then - nixErrorLog "the symlink $path is unreadable"; - numUnreadableSymlinks+=1; - continue; - fi; - if [[ $symlinkTarget == /* ]]; then - nixInfoLog "symlink $path points to absolute target $symlinkTarget"; - else - nixInfoLog "symlink $path points to relative target $symlinkTarget"; - symlinkTarget="$(realpath --no-symlinks --canonicalize-missing "$pathParent/$symlinkTarget")"; - fi; - if [[ $symlinkTarget = "$TMPDIR"/* ]]; then - nixErrorLog "the symlink $path points to $TMPDIR directory: $symlinkTarget"; - numDanglingSymlinks+=1; - continue; - fi; - if [[ $symlinkTarget != "$NIX_STORE"/* ]]; then - nixInfoLog "symlink $path points outside the Nix store; ignoring"; - continue; - fi; - if [[ $path == "$symlinkTarget" ]]; then - nixErrorLog "the symlink $path is reflexive"; - numReflexiveSymlinks+=1; - else - if [[ ! -e $symlinkTarget ]]; then - nixErrorLog "the symlink $path points to a missing target: $symlinkTarget"; - numDanglingSymlinks+=1; - else - nixDebugLog "the symlink $path is irreflexive and points to a target which exists"; - fi; - fi; - done < <(find "$output" -type l -print0); - if ((numDanglingSymlinks > 0 || numReflexiveSymlinks > 0 || numUnreadableSymlinks > 0)); then - nixErrorLog "found $numDanglingSymlinks dangling symlinks, $numReflexiveSymlinks reflexive symlinks and $numUnreadableSymlinks unreadable symlinks"; - exit 1; - fi; - return 0 -} -noBrokenSymlinksInAllOutputs () -{ - - if [[ -z ${dontCheckForBrokenSymlinks-} ]]; then - for output in $(getAllOutputNames); - do - noBrokenSymlinks "${!output}"; - done; - fi -} -patchPhase () -{ - - runHook prePatch; - local -a patchesArray; - concatTo patchesArray patches; - local -a flagsArray; - concatTo flagsArray patchFlags=-p1; - for i in "${patchesArray[@]}"; - do - echo "applying patch $i"; - local uncompress=cat; - case "$i" in - *.gz) - uncompress="gzip -d" - ;; - *.bz2) - uncompress="bzip2 -d" - ;; - *.xz) - uncompress="xz -d" - ;; - *.lzma) - uncompress="lzma -d" - ;; - esac; - $uncompress < "$i" 2>&1 | patch "${flagsArray[@]}"; - done; - runHook postPatch -} -patchShebangs () -{ - - local pathName; - local update=false; - while [[ $# -gt 0 ]]; do - case "$1" in - --host) - pathName=HOST_PATH; - shift - ;; - --build) - pathName=PATH; - shift - ;; - --update) - update=true; - shift - ;; - --) - shift; - break - ;; - -* | --*) - echo "Unknown option $1 supplied to patchShebangs" 1>&2; - return 1 - ;; - *) - break - ;; - esac; - done; - echo "patching script interpreter paths in $@"; - local f; - local oldPath; - local newPath; - local arg0; - local args; - local oldInterpreterLine; - local newInterpreterLine; - if [[ $# -eq 0 ]]; then - echo "No arguments supplied to patchShebangs" 1>&2; - return 0; - fi; - local f; - while IFS= read -r -d '' f; do - isScript "$f" || continue; - read -r oldInterpreterLine < "$f" || [ "$oldInterpreterLine" ]; - read -r oldPath arg0 args <<< "${oldInterpreterLine:2}"; - if [[ -z "${pathName:-}" ]]; then - if [[ -n $strictDeps && $f == "$NIX_STORE"* ]]; then - pathName=HOST_PATH; - else - pathName=PATH; - fi; - fi; - if [[ "$oldPath" == *"/bin/env" ]]; then - if [[ $arg0 == "-S" ]]; then - arg0=${args%% *}; - [[ "$args" == *" "* ]] && args=${args#* } || args=; - newPath="$(PATH="${!pathName}" type -P "env" || true)"; - args="-S $(PATH="${!pathName}" type -P "$arg0" || true) $args"; - else - if [[ $arg0 == "-"* || $arg0 == *"="* ]]; then - echo "$f: unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)" 1>&2; - exit 1; - else - newPath="$(PATH="${!pathName}" type -P "$arg0" || true)"; - fi; - fi; - else - if [[ -z $oldPath ]]; then - oldPath="/bin/sh"; - fi; - newPath="$(PATH="${!pathName}" type -P "$(basename "$oldPath")" || true)"; - args="$arg0 $args"; - fi; - newInterpreterLine="$newPath $args"; - newInterpreterLine=${newInterpreterLine%${newInterpreterLine##*[![:space:]]}}; - if [[ -n "$oldPath" && ( "$update" == true || "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ) ]]; then - if [[ -n "$newPath" && "$newPath" != "$oldPath" ]]; then - echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\""; - escapedInterpreterLine=${newInterpreterLine//\\/\\\\}; - timestamp=$(stat --printf "%y" "$f"); - tmpFile=$(mktemp -t patchShebangs.XXXXXXXXXX); - sed -e "1 s|.*|#\!$escapedInterpreterLine|" "$f" > "$tmpFile"; - local restoreReadOnly; - if [[ ! -w "$f" ]]; then - chmod +w "$f"; - restoreReadOnly=true; - fi; - cat "$tmpFile" > "$f"; - rm "$tmpFile"; - if [[ -n "${restoreReadOnly:-}" ]]; then - chmod -w "$f"; - fi; - touch --date "$timestamp" "$f"; - fi; - fi; - done < <(find "$@" -type f -perm -0100 -print0) -} -patchShebangsAuto () -{ - - if [[ -z "${dontPatchShebangs-}" && -e "$prefix" ]]; then - if [[ "$output" != out && "$output" = "$outputDev" ]]; then - patchShebangs --build "$prefix"; - else - patchShebangs --host "$prefix"; - fi; - fi -} -pkgConfigWrapper_addPkgConfigPath () -{ - - local role_post; - getHostRoleEnvHook; - addToSearchPath "PKG_CONFIG_PATH${role_post}" "$1/lib/pkgconfig"; - addToSearchPath "PKG_CONFIG_PATH${role_post}" "$1/share/pkgconfig" -} -prependToVar () -{ - - local -n nameref="$1"; - local useArray type; - if [ -n "$__structuredAttrs" ]; then - useArray=true; - else - useArray=false; - fi; - if type=$(declare -p "$1" 2> /dev/null); then - case "${type#* }" in - -A*) - echo "prependToVar(): ERROR: trying to use prependToVar on an associative array." 1>&2; - return 1 - ;; - -a*) - useArray=true - ;; - *) - useArray=false - ;; - esac; - fi; - shift; - if $useArray; then - nameref=("$@" ${nameref+"${nameref[@]}"}); - else - nameref="$* ${nameref-}"; - fi -} -printLines () -{ - - (( "$#" > 0 )) || return 0; - printf '%s\n' "$@" -} -printPhases () -{ - - definePhases; - local phase; - for phase in ${phases[*]}; - do - printf '%s\n' "$phase"; - done -} -printWords () -{ - - (( "$#" > 0 )) || return 0; - printf '%s ' "$@" -} -recordPropagatedDependencies () -{ - - declare -ra flatVars=(depsBuildBuildPropagated propagatedNativeBuildInputs depsBuildTargetPropagated depsHostHostPropagated propagatedBuildInputs depsTargetTargetPropagated); - declare -ra flatFiles=("${propagatedBuildDepFiles[@]}" "${propagatedHostDepFiles[@]}" "${propagatedTargetDepFiles[@]}"); - local propagatedInputsIndex; - for propagatedInputsIndex in "${!flatVars[@]}"; - do - local propagatedInputsSlice="${flatVars[$propagatedInputsIndex]}[@]"; - local propagatedInputsFile="${flatFiles[$propagatedInputsIndex]}"; - [[ -n "${!propagatedInputsSlice}" ]] || continue; - mkdir -p "${!outputDev}/nix-support"; - printWords ${!propagatedInputsSlice} > "${!outputDev}/nix-support/$propagatedInputsFile"; - done -} -runHook () -{ - - local hookName="$1"; - shift; - local hooksSlice="${hookName%Hook}Hooks[@]"; - local hook; - for hook in "_callImplicitHook 0 $hookName" ${!hooksSlice+"${!hooksSlice}"}; - do - _logHook "$hookName" "$hook" "$@"; - _eval "$hook" "$@"; - done; - return 0 -} -runOneHook () -{ - - local hookName="$1"; - shift; - local hooksSlice="${hookName%Hook}Hooks[@]"; - local hook ret=1; - for hook in "_callImplicitHook 1 $hookName" ${!hooksSlice+"${!hooksSlice}"}; - do - _logHook "$hookName" "$hook" "$@"; - if _eval "$hook" "$@"; then - ret=0; - break; - fi; - done; - return "$ret" -} -runPhase () -{ - - local curPhase="$*"; - if [[ "$curPhase" = unpackPhase && -n "${dontUnpack:-}" ]]; then - return; - fi; - if [[ "$curPhase" = patchPhase && -n "${dontPatch:-}" ]]; then - return; - fi; - if [[ "$curPhase" = configurePhase && -n "${dontConfigure:-}" ]]; then - return; - fi; - if [[ "$curPhase" = buildPhase && -n "${dontBuild:-}" ]]; then - return; - fi; - if [[ "$curPhase" = checkPhase && -z "${doCheck:-}" ]]; then - return; - fi; - if [[ "$curPhase" = installPhase && -n "${dontInstall:-}" ]]; then - return; - fi; - if [[ "$curPhase" = fixupPhase && -n "${dontFixup:-}" ]]; then - return; - fi; - if [[ "$curPhase" = installCheckPhase && -z "${doInstallCheck:-}" ]]; then - return; - fi; - if [[ "$curPhase" = distPhase && -z "${doDist:-}" ]]; then - return; - fi; - showPhaseHeader "$curPhase"; - dumpVars; - local startTime endTime; - startTime=$(date +"%s"); - eval "${!curPhase:-$curPhase}"; - endTime=$(date +"%s"); - showPhaseFooter "$curPhase" "$startTime" "$endTime"; - if [ "$curPhase" = unpackPhase ]; then - [ -n "${sourceRoot:-}" ] && chmod +x -- "${sourceRoot}"; - cd -- "${sourceRoot:-.}"; - fi -} -showPhaseFooter () -{ - - local phase="$1"; - local startTime="$2"; - local endTime="$3"; - local delta=$(( endTime - startTime )); - (( delta < 30 )) && return; - local H=$((delta/3600)); - local M=$((delta%3600/60)); - local S=$((delta%60)); - echo -n "$phase completed in "; - (( H > 0 )) && echo -n "$H hours "; - (( M > 0 )) && echo -n "$M minutes "; - echo "$S seconds" -} -showPhaseHeader () -{ - - local phase="$1"; - echo "Running phase: $phase"; - if [[ -z ${NIX_LOG_FD-} ]]; then - return; - fi; - printf "@nix { \"action\": \"setPhase\", \"phase\": \"%s\" }\n" "$phase" >&"$NIX_LOG_FD" -} -stripDirs () -{ - - local cmd="$1"; - local ranlibCmd="$2"; - local paths="$3"; - local stripFlags="$4"; - local excludeFlags=(); - local pathsNew=; - [ -z "$cmd" ] && echo "stripDirs: Strip command is empty" 1>&2 && exit 1; - [ -z "$ranlibCmd" ] && echo "stripDirs: Ranlib command is empty" 1>&2 && exit 1; - local pattern; - if [ -n "${stripExclude:-}" ]; then - for pattern in "${stripExclude[@]}"; - do - excludeFlags+=(-a '!' '(' -name "$pattern" -o -wholename "$prefix/$pattern" ')'); - done; - fi; - local p; - for p in ${paths}; - do - if [ -e "$prefix/$p" ]; then - pathsNew="${pathsNew} $prefix/$p"; - fi; - done; - paths=${pathsNew}; - if [ -n "${paths}" ]; then - echo "stripping (with command $cmd and flags $stripFlags) in $paths"; - local striperr; - striperr="$(mktemp --tmpdir="$TMPDIR" 'striperr.XXXXXX')"; - find $paths -type f "${excludeFlags[@]}" -a '!' -path "$prefix/lib/debug/*" -printf '%D-%i,%p\0' | sort -t, -k1,1 -u -z | cut -d, -f2- -z | xargs -r -0 -n1 -P "$NIX_BUILD_CORES" -- $cmd $stripFlags 2> "$striperr" || exit_code=$?; - [[ "$exit_code" = 123 || -z "$exit_code" ]] || ( cat "$striperr" 1>&2 && exit 1 ); - rm "$striperr"; - find $paths -name '*.a' -type f -exec $ranlibCmd '{}' \; 2> /dev/null; - fi -} -stripHash () -{ - - local strippedName casematchOpt=0; - strippedName="$(basename -- "$1")"; - shopt -q nocasematch && casematchOpt=1; - shopt -u nocasematch; - if [[ "$strippedName" =~ ^[a-z0-9]{32}- ]]; then - echo "${strippedName:33}"; - else - echo "$strippedName"; - fi; - if (( casematchOpt )); then - shopt -s nocasematch; - fi -} -substitute () -{ - - local input="$1"; - local output="$2"; - shift 2; - if [ ! -f "$input" ]; then - echo "substitute(): ERROR: file '$input' does not exist" 1>&2; - return 1; - fi; - local content; - consumeEntire content < "$input"; - if [ -e "$output" ]; then - chmod +w "$output"; - fi; - substituteStream content "file '$input'" "$@" > "$output" -} -substituteAll () -{ - - local input="$1"; - local output="$2"; - local -a args=(); - _allFlags; - substitute "$input" "$output" "${args[@]}" -} -substituteAllInPlace () -{ - - local fileName="$1"; - shift; - substituteAll "$fileName" "$fileName" "$@" -} -substituteAllStream () -{ - - local -a args=(); - _allFlags; - substituteStream "$1" "$2" "${args[@]}" -} -substituteInPlace () -{ - - local -a fileNames=(); - for arg in "$@"; - do - if [[ "$arg" = "--"* ]]; then - break; - fi; - fileNames+=("$arg"); - shift; - done; - if ! [[ "${#fileNames[@]}" -gt 0 ]]; then - echo "substituteInPlace called without any files to operate on (files must come before options!)" 1>&2; - return 1; - fi; - for file in "${fileNames[@]}"; - do - substitute "$file" "$file" "$@"; - done -} -substituteStream () -{ - - local var=$1; - local description=$2; - shift 2; - while (( "$#" )); do - local replace_mode="$1"; - case "$1" in - --replace) - if ! "$_substituteStream_has_warned_replace_deprecation"; then - echo "substituteStream() in derivation $name: WARNING: '--replace' is deprecated, use --replace-{fail,warn,quiet}. ($description)" 1>&2; - _substituteStream_has_warned_replace_deprecation=true; - fi; - replace_mode='--replace-warn' - ;& - --replace-quiet | --replace-warn | --replace-fail) - pattern="$2"; - replacement="$3"; - shift 3; - if ! [[ "${!var}" == *"$pattern"* ]]; then - if [ "$replace_mode" == --replace-warn ]; then - printf "substituteStream() in derivation $name: WARNING: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2; - else - if [ "$replace_mode" == --replace-fail ]; then - printf "substituteStream() in derivation $name: ERROR: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2; - return 1; - fi; - fi; - fi; - eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}' - ;; - --subst-var) - local varName="$2"; - shift 2; - if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then - echo "substituteStream() in derivation $name: ERROR: substitution variables must be valid Bash names, \"$varName\" isn't." 1>&2; - return 1; - fi; - if [ -z ${!varName+x} ]; then - echo "substituteStream() in derivation $name: ERROR: variable \$$varName is unset" 1>&2; - return 1; - fi; - pattern="@$varName@"; - replacement="${!varName}"; - eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}' - ;; - --subst-var-by) - pattern="@$2@"; - replacement="$3"; - eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; - shift 3 - ;; - *) - echo "substituteStream() in derivation $name: ERROR: Invalid command line argument: $1" 1>&2; - return 1 - ;; - esac; - done; - printf "%s" "${!var}" -} -unpackFile () -{ - - curSrc="$1"; - echo "unpacking source archive $curSrc"; - if ! runOneHook unpackCmd "$curSrc"; then - echo "do not know how to unpack source archive $curSrc"; - exit 1; - fi -} -unpackPhase () -{ - - runHook preUnpack; - if [ -z "${srcs:-}" ]; then - if [ -z "${src:-}" ]; then - echo 'variable $src or $srcs should point to the source'; - exit 1; - fi; - srcs="$src"; - fi; - local -a srcsArray; - concatTo srcsArray srcs; - local dirsBefore=""; - for i in *; - do - if [ -d "$i" ]; then - dirsBefore="$dirsBefore $i "; - fi; - done; - for i in "${srcsArray[@]}"; - do - unpackFile "$i"; - done; - : "${sourceRoot=}"; - if [ -n "${setSourceRoot:-}" ]; then - runOneHook setSourceRoot; - else - if [ -z "$sourceRoot" ]; then - for i in *; - do - if [ -d "$i" ]; then - case $dirsBefore in - *\ $i\ *) - - ;; - *) - if [ -n "$sourceRoot" ]; then - echo "unpacker produced multiple directories"; - exit 1; - fi; - sourceRoot="$i" - ;; - esac; - fi; - done; - fi; - fi; - if [ -z "$sourceRoot" ]; then - echo "unpacker appears to have produced no directories"; - exit 1; - fi; - echo "source root is $sourceRoot"; - if [ "${dontMakeSourcesWritable:-0}" != 1 ]; then - chmod -R u+w -- "$sourceRoot"; - fi; - runHook postUnpack -} -updateAutotoolsGnuConfigScriptsPhase () -{ - - if [ -n "${dontUpdateAutotoolsGnuConfigScripts-}" ]; then - return; - fi; - for script in config.sub config.guess; - do - for f in $(find . -type f -name "$script"); - do - echo "Updating Autotools / GNU config script to a newer upstream version: $f"; - cp -f "/nix/store/xb4f90wzr6nca7a1wy9ry9p2hvlhhsxx-gnu-config-2024-01-01/$script" "$f"; - done; - done -} -updateSourceDateEpoch () -{ - - local path="$1"; - [[ $path == -* ]] && path="./$path"; - local -a res=($(find "$path" -type f -not -newer "$NIX_BUILD_TOP/.." -printf '%T@ "%p"\0' | sort -n --zero-terminated | tail -n1 --zero-terminated | head -c -1)); - local time="${res[0]//\.[0-9]*/}"; - local newestFile="${res[1]}"; - if [ "${time:-0}" -gt "$SOURCE_DATE_EPOCH" ]; then - echo "setting SOURCE_DATE_EPOCH to timestamp $time of file $newestFile"; - export SOURCE_DATE_EPOCH="$time"; - local now="$(date +%s)"; - if [ "$time" -gt $((now - 60)) ]; then - echo "warning: file $newestFile may be generated; SOURCE_DATE_EPOCH may be non-deterministic"; - fi; - fi -} -PATH="$PATH${nix_saved_PATH:+:$nix_saved_PATH}" -XDG_DATA_DIRS="$XDG_DATA_DIRS${nix_saved_XDG_DATA_DIRS:+:$nix_saved_XDG_DATA_DIRS}" -export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)" -export TMP="$NIX_BUILD_TOP" -export TMPDIR="$NIX_BUILD_TOP" -export TEMP="$NIX_BUILD_TOP" -export TEMPDIR="$NIX_BUILD_TOP" -eval "${shellHook:-}" diff --git a/.gitignore b/.gitignore index e2f77e4..f066e68 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ elm-stuff node_modules dist .devenv +.direnv \ No newline at end of file diff --git a/flake.nix b/flake.nix index 3d320f8..0dc7b1f 100644 --- a/flake.nix +++ b/flake.nix @@ -51,10 +51,6 @@ }; flake = { - # The usual flake attributes can be defined here, including system- - # agnostic ones like nixosModule and system-enumerating ones, although - # those are more easily expressed in perSystem. - }; }; } From 7ea254b2cff73aa83ca4b36e0823503245785cf2 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 27 Mar 2026 17:26:19 +0000 Subject: [PATCH 04/48] build: Add treefmt --- .envrc | 2 +- flake.lock | 973 +++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 61 +++- 3 files changed, 1017 insertions(+), 19 deletions(-) create mode 100644 flake.lock diff --git a/.envrc b/.envrc index 117c726..99a025c 100644 --- a/.envrc +++ b/.envrc @@ -12,6 +12,6 @@ watch_file flake.lock mkdir -p "$PWD/.devenv" DEVENV_ROOT_FILE="$PWD/.devenv/root" printf %s "$PWD" >"$DEVENV_ROOT_FILE" -if ! use flake . --override-input devenv-root "file+file://$DEVENV_ROOT_FILE"; then +if ! use flake . --override-input devenv-root "file+file://$DEVENV_ROOT_FILE" --accept-flake-config; then echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2 fi diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..6bdc84e --- /dev/null +++ b/flake.lock @@ -0,0 +1,973 @@ +{ + "nodes": { + "cachix": { + "inputs": { + "devenv": [ + "devenv" + ], + "flake-compat": [ + "devenv", + "flake-compat" + ], + "git-hooks": [ + "devenv", + "git-hooks" + ], + "nixpkgs": [ + "devenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767714506, + "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=", + "owner": "cachix", + "repo": "cachix", + "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "latest", + "repo": "cachix", + "type": "github" + } + }, + "cachix_2": { + "inputs": { + "devenv": [ + "devenv", + "crate2nix" + ], + "flake-compat": [ + "devenv", + "crate2nix" + ], + "git-hooks": "git-hooks", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1767714506, + "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=", + "owner": "cachix", + "repo": "cachix", + "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "latest", + "repo": "cachix", + "type": "github" + } + }, + "cachix_3": { + "inputs": { + "devenv": [ + "devenv", + "crate2nix", + "crate2nix_stable" + ], + "flake-compat": [ + "devenv", + "crate2nix", + "crate2nix_stable" + ], + "git-hooks": "git-hooks_2", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1767714506, + "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=", + "owner": "cachix", + "repo": "cachix", + "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "latest", + "repo": "cachix", + "type": "github" + } + }, + "crate2nix": { + "inputs": { + "cachix": "cachix_2", + "crate2nix_stable": "crate2nix_stable", + "devshell": "devshell_2", + "flake-compat": "flake-compat_2", + "flake-parts": "flake-parts_2", + "nix-test-runner": "nix-test-runner_2", + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "pre-commit-hooks": "pre-commit-hooks_2" + }, + "locked": { + "lastModified": 1773440526, + "narHash": "sha256-OcX1MYqUdoalY3/vU67PEx8m6RvqGxX0LwKonjzXn7I=", + "owner": "nix-community", + "repo": "crate2nix", + "rev": "e697d3049c909580128caa856ab8eb709556a97b", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "crate2nix", + "type": "github" + } + }, + "crate2nix_stable": { + "inputs": { + "cachix": "cachix_3", + "crate2nix_stable": [ + "devenv", + "crate2nix", + "crate2nix_stable" + ], + "devshell": "devshell", + "flake-compat": "flake-compat", + "flake-parts": "flake-parts", + "nix-test-runner": "nix-test-runner", + "nixpkgs": "nixpkgs_3", + "pre-commit-hooks": "pre-commit-hooks" + }, + "locked": { + "lastModified": 1769627083, + "narHash": "sha256-SUuruvw1/moNzCZosHaa60QMTL+L9huWdsCBN6XZIic=", + "owner": "nix-community", + "repo": "crate2nix", + "rev": "7c33e664668faecf7655fa53861d7a80c9e464a2", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "0.15.0", + "repo": "crate2nix", + "type": "github" + } + }, + "devenv": { + "inputs": { + "cachix": "cachix", + "crate2nix": "crate2nix", + "flake-compat": "flake-compat_3", + "flake-parts": "flake-parts_3", + "git-hooks": "git-hooks_3", + "nix": "nix", + "nixd": "nixd", + "nixpkgs": "nixpkgs_4", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1774574416, + "narHash": "sha256-lSDwajbwYOAXggD0EAs/pOaBcnSfRjX1ScPo4fk8+tI=", + "owner": "cachix", + "repo": "devenv", + "rev": "4dbca34da522d2169cffb62e56965e4b8ee2453d", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "devenv-root": { + "flake": false, + "locked": { + "narHash": "sha256-d6xi4mKdjkX2JFicDIv5niSzpyI0m/Hnm8GGAIU04kY=", + "type": "file", + "url": "file:///dev/null" + }, + "original": { + "type": "file", + "url": "file:///dev/null" + } + }, + "devshell": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768818222, + "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=", + "owner": "numtide", + "repo": "devshell", + "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "devshell_2": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768818222, + "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=", + "owner": "numtide", + "repo": "devshell", + "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "flake-compat": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "revCount": 69, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_2": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "revCount": 69, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768135262, + "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "devenv", + "crate2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1768135262, + "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "devenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { + "inputs": { + "nixpkgs-lib": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "devenv", + "crate2nix", + "cachix", + "flake-compat" + ], + "gitignore": "gitignore", + "nixpkgs": [ + "devenv", + "crate2nix", + "cachix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1765404074, + "narHash": "sha256-+ZDU2d+vzWkEJiqprvV5PR26DVFN2vgddwG5SnPZcUM=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "2d6f58930fbcd82f6f9fd59fb6d13e37684ca529", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "git-hooks_2": { + "inputs": { + "flake-compat": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "cachix", + "flake-compat" + ], + "gitignore": "gitignore_2", + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "cachix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1765404074, + "narHash": "sha256-+ZDU2d+vzWkEJiqprvV5PR26DVFN2vgddwG5SnPZcUM=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "2d6f58930fbcd82f6f9fd59fb6d13e37684ca529", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "git-hooks_3": { + "inputs": { + "flake-compat": [ + "devenv", + "flake-compat" + ], + "gitignore": "gitignore_5", + "nixpkgs": [ + "devenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772893680, + "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "cachix", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_2": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "cachix", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_3": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_4": { + "inputs": { + "nixpkgs": [ + "devenv", + "crate2nix", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore_5": { + "inputs": { + "nixpkgs": [ + "devenv", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "mk-shell-bin": { + "locked": { + "lastModified": 1677004959, + "narHash": "sha256-/uEkr1UkJrh11vD02aqufCxtbF5YnhRTIKlx5kyvf+I=", + "owner": "rrbutani", + "repo": "nix-mk-shell-bin", + "rev": "ff5d8bd4d68a347be5042e2f16caee391cd75887", + "type": "github" + }, + "original": { + "owner": "rrbutani", + "repo": "nix-mk-shell-bin", + "type": "github" + } + }, + "nix": { + "inputs": { + "flake-compat": [ + "devenv", + "flake-compat" + ], + "flake-parts": [ + "devenv", + "flake-parts" + ], + "git-hooks-nix": [ + "devenv", + "git-hooks" + ], + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "nixpkgs-23-11": [ + "devenv" + ], + "nixpkgs-regression": [ + "devenv" + ] + }, + "locked": { + "lastModified": 1774103430, + "narHash": "sha256-MRNVInSmvhKIg3y0UdogQJXe+omvKijGszFtYpd5r9k=", + "owner": "cachix", + "repo": "nix", + "rev": "e127c1c94cefe02d8ca4cca79ef66be4c527510e", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "devenv-2.32", + "repo": "nix", + "type": "github" + } + }, + "nix-test-runner": { + "flake": false, + "locked": { + "lastModified": 1588761593, + "narHash": "sha256-FKJykltAN/g3eIceJl4SfDnnyuH2jHImhMrXS2KvGIs=", + "owner": "stoeffel", + "repo": "nix-test-runner", + "rev": "c45d45b11ecef3eb9d834c3b6304c05c49b06ca2", + "type": "github" + }, + "original": { + "owner": "stoeffel", + "repo": "nix-test-runner", + "type": "github" + } + }, + "nix-test-runner_2": { + "flake": false, + "locked": { + "lastModified": 1588761593, + "narHash": "sha256-FKJykltAN/g3eIceJl4SfDnnyuH2jHImhMrXS2KvGIs=", + "owner": "stoeffel", + "repo": "nix-test-runner", + "rev": "c45d45b11ecef3eb9d834c3b6304c05c49b06ca2", + "type": "github" + }, + "original": { + "owner": "stoeffel", + "repo": "nix-test-runner", + "type": "github" + } + }, + "nix2container": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773987955, + "narHash": "sha256-vgxwF/GS9lRC9s211RnmJaGKHIUexMiRs7Eslh11E08=", + "owner": "nlewo", + "repo": "nix2container", + "rev": "20d339590c3c36252514a57b0241c47bcd8a08ce", + "type": "github" + }, + "original": { + "owner": "nlewo", + "repo": "nix2container", + "type": "github" + } + }, + "nixd": { + "inputs": { + "flake-parts": [ + "devenv", + "flake-parts" + ], + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1773634079, + "narHash": "sha256-49qb4QNMv77VOeEux+sMd0uBhPvvHgVc0r938Bulvbo=", + "owner": "nix-community", + "repo": "nixd", + "rev": "8ecf93d4d93745e05ea53534e8b94f5e9506e6bd", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixd", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1765186076, + "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-src": { + "flake": false, + "locked": { + "lastModified": 1773597492, + "narHash": "sha256-hQ284SkIeNaeyud+LS0WVLX+WL2rxcVZLFEaK0e03zg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a07d4ce6bee67d7c838a8a5796e75dff9caa21ef", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-src_2": { + "flake": false, + "locked": { + "lastModified": 1773840656, + "narHash": "sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9cf7092bdd603554bd8b63c216e8943cf9b12512", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1765186076, + "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1769433173, + "narHash": "sha256-Gf1dFYgD344WZ3q0LPlRoWaNdNQq8kSBDLEWulRQSEs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "13b0f9e6ac78abbbb736c635d87845c4f4bee51b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "inputs": { + "nixpkgs-src": "nixpkgs-src" + }, + "locked": { + "lastModified": 1773704619, + "narHash": "sha256-LKtmit8Sr81z8+N2vpIaN/fyiQJ8f7XJ6tMSKyDVQ9s=", + "owner": "cachix", + "repo": "devenv-nixpkgs", + "rev": "906534d75b0e2fe74a719559dfb1ad3563485f43", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "rolling", + "repo": "devenv-nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "inputs": { + "nixpkgs-src": "nixpkgs-src_2" + }, + "locked": { + "lastModified": 1774287239, + "narHash": "sha256-W3krsWcDwYuA3gPWsFA24YAXxOFUL6iIlT6IknAoNSE=", + "owner": "cachix", + "repo": "devenv-nixpkgs", + "rev": "fa7125ea7f1ae5430010a6e071f68375a39bd24c", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "rolling", + "repo": "devenv-nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1770107345, + "narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4533d9293756b63904b7238acb84ac8fe4c8c2c4", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "flake-compat" + ], + "gitignore": "gitignore_3", + "nixpkgs": [ + "devenv", + "crate2nix", + "crate2nix_stable", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769069492, + "narHash": "sha256-Efs3VUPelRduf3PpfPP2ovEB4CXT7vHf8W+xc49RL/U=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks_2": { + "inputs": { + "flake-compat": [ + "devenv", + "crate2nix", + "flake-compat" + ], + "gitignore": "gitignore_4", + "nixpkgs": [ + "devenv", + "crate2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769069492, + "narHash": "sha256-Efs3VUPelRduf3PpfPP2ovEB4CXT7vHf8W+xc49RL/U=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "devenv": "devenv", + "devenv-root": "devenv-root", + "flake-parts": "flake-parts_4", + "mk-shell-bin": "mk-shell-bin", + "nix2container": "nix2container", + "nixpkgs": "nixpkgs_5", + "treefmt-nix": "treefmt-nix_2" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "devenv", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773630837, + "narHash": "sha256-zJhgAGnbVKeBMJOb9ctZm4BGS/Rnrz+5lfSXTVah4HQ=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "f600ea449c7b5bb596fa1cf21c871cc5b9e31316", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "devenv", + "nixd", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772660329, + "narHash": "sha256-IjU1FxYqm+VDe5qIOxoW+pISBlGvVApRjiw/Y/ttJzY=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "3710e0e1218041bbad640352a0440114b1e10428", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1773297127, + "narHash": "sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "71b125cd05fbfd78cab3e070b73544abe24c5016", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix index 0dc7b1f..c24e05c 100644 --- a/flake.nix +++ b/flake.nix @@ -13,6 +13,7 @@ nix2container.url = "github:nlewo/nix2container"; nix2container.inputs.nixpkgs.follows = "nixpkgs"; mk-shell-bin.url = "github:rrbutani/nix-mk-shell-bin"; + treefmt-nix.url = "github:numtide/treefmt-nix"; }; nixConfig = { @@ -20,36 +21,60 @@ extra-substituters = "https://devenv.cachix.org"; }; - outputs = inputs@{ flake-parts, devenv-root, ... }: + outputs = + inputs@{ flake-parts, devenv-root, ... }: flake-parts.lib.mkFlake { inherit inputs; } { imports = [ inputs.devenv.flakeModule ]; - systems = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; + systems = [ + "x86_64-linux" + "i686-linux" + "x86_64-darwin" + "aarch64-linux" + "aarch64-darwin" + ]; - perSystem = { config, self', inputs', pkgs, system, ... }: { - # Per-system attributes can be defined here. The self' and inputs' - # module parameters provide easy access to attributes of the same - # system. + perSystem = + { + config, + self', + inputs', + pkgs, + system, + ... + }: + { + # Per-system attributes can be defined here. The self' and inputs' + # module parameters provide easy access to attributes of the same + # system. - # Equivalent to inputs'.nixpkgs.legacyPackages.hello; - packages.default = pkgs.hello; + # Equivalent to inputs'.nixpkgs.legacyPackages.hello; + packages.default = pkgs.hello; - devenv.shells.default = { - name = "devden-website"; + devenv.shells.default = { + name = "devden-website"; - imports = [ - ]; + imports = [ + ]; - # https://devenv.sh/reference/options/ - packages = [ config.packages.default ]; + # https://devenv.sh/reference/options/ + packages = [ config.packages.default ]; - languages.elm.enable = true; - languages.elm.lsp.enable = true; + languages.elm.enable = true; + languages.elm.lsp.enable = true; - }; + treefmt = { + enable = true; + config.programs = { + nixfmt.enable = true; + elm-format.enable = true; + }; + }; - }; + }; + + }; flake = { }; }; From 85a9c1502df9daf2e39724084bcdb25ff214eebb Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 27 Mar 2026 17:31:40 +0000 Subject: [PATCH 05/48] build: add process for elm-spa server --- README.MD | 8 ++++++++ flake.nix | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/README.MD b/README.MD index 1e9f5ee..de8f0c7 100644 --- a/README.MD +++ b/README.MD @@ -13,6 +13,8 @@ npm install -g elm elm-spa ```bash elm-spa server # starts this app at http:/localhost:1234 +devenv up # also starts the app, but automatically takes care of everything + ``` ### other commands @@ -23,6 +25,12 @@ elm-spa build # production build elm-spa watch # runs build as you code (without the server) ``` +**Formatting**: + +```bash +treefmt  # formats everything +``` + ## learn more You can learn more at [elm-spa.dev](https://elm-spa.dev) diff --git a/flake.nix b/flake.nix index c24e05c..ccf5bc6 100644 --- a/flake.nix +++ b/flake.nix @@ -61,6 +61,7 @@ # https://devenv.sh/reference/options/ packages = [ config.packages.default ]; + languages.javascript.bun.enable = true; languages.elm.enable = true; languages.elm.lsp.enable = true; @@ -72,6 +73,9 @@ }; }; + processes.spa-server = { + exec = "bunx elm-spa server"; + }; }; }; From 317943a49b76c9b29e3ad1211c3cff62cdc9734f Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 27 Mar 2026 17:43:26 +0000 Subject: [PATCH 06/48] build: Move to elm-land --- .gitignore | 8 +++++++- .vscode/settings.json | 3 --- elm-land.json | 27 +++++++++++++++++++++++++++ elm.json | 10 ++++------ flake.nix | 2 +- public/index.html | 11 ----------- src/Pages/Home_.elm | 6 +++--- 7 files changed, 42 insertions(+), 25 deletions(-) delete mode 100644 .vscode/settings.json create mode 100644 elm-land.json delete mode 100644 public/index.html diff --git a/.gitignore b/.gitignore index f066e68..029a26b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,10 @@ elm-stuff node_modules dist .devenv -.direnv \ No newline at end of file +.direnv +.vscode +dist +.elm-land +.env +.DS_Store +*.pem \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 69b361b..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "nixEnvSelector.nixFile": "${workspaceFolder}/flake.nix" -} \ No newline at end of file diff --git a/elm-land.json b/elm-land.json new file mode 100644 index 0000000..3d9c0d7 --- /dev/null +++ b/elm-land.json @@ -0,0 +1,27 @@ +{ + "app": { + "elm": { + "development": { "debugger": true }, + "production": { "debugger": false } + }, + "env": [], + "html": { + "attributes": { + "html": { "lang": "en" }, + "head": {} + }, + "title": "Elm Land", + "meta": [ + { "charset": "UTF-8" }, + { "http-equiv": "X-UA-Compatible", "content": "IE=edge" }, + { "name": "viewport", "content": "width=device-width, initial-scale=1.0" } + ], + "link": [], + "script": [] + }, + "router": { + "useHashRouting": false + }, + "proxy": null + } +} \ No newline at end of file diff --git a/elm.json b/elm.json index 2edf09c..5868b5e 100644 --- a/elm.json +++ b/elm.json @@ -2,8 +2,7 @@ "type": "application", "source-directories": [ "src", - ".elm-spa/defaults", - ".elm-spa/generated" + ".elm-land/src" ], "elm-version": "0.19.1", "dependencies": { @@ -12,16 +11,15 @@ "elm/core": "1.0.5", "elm/html": "1.0.0", "elm/json": "1.1.3", - "elm/url": "1.0.0", - "ryan-haskell/elm-spa": "1.0.0" + "elm/url": "1.0.0" }, "indirect": { "elm/time": "1.0.0", - "elm/virtual-dom": "1.0.2" + "elm/virtual-dom": "1.0.3" } }, "test-dependencies": { "direct": {}, "indirect": {} } -} \ No newline at end of file +} diff --git a/flake.nix b/flake.nix index ccf5bc6..917673d 100644 --- a/flake.nix +++ b/flake.nix @@ -74,7 +74,7 @@ }; processes.spa-server = { - exec = "bunx elm-spa server"; + exec = "bunx elm-land server"; }; }; diff --git a/public/index.html b/public/index.html deleted file mode 100644 index a113e35..0000000 --- a/public/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/src/Pages/Home_.elm b/src/Pages/Home_.elm index 7bf9761..945a2e3 100644 --- a/src/Pages/Home_.elm +++ b/src/Pages/Home_.elm @@ -1,11 +1,11 @@ -module Pages.Home_ exposing (view) +module Pages.Home_ exposing (page) import Html import View exposing (View) -view : View msg -view = +page : View msg +page = { title = "Homepage" , body = [ Html.text "Hello, world!" ] } From 8eb23af53a63b5b49578d1621256829f2e7c233c Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 27 Mar 2026 18:00:43 +0000 Subject: [PATCH 07/48] build: tailwind and stuff --- .gitignore | 5 +- README.MD | 23 +-- bun.lock | 500 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 17 ++ postcss.config.js | 5 + src/View.elm | 72 +++++++ 6 files changed, 599 insertions(+), 23 deletions(-) create mode 100644 bun.lock create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 src/View.elm diff --git a/.gitignore b/.gitignore index 029a26b..b3cd1bb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,12 +2,11 @@ .elm-spa elm-stuff node_modules -dist .devenv .direnv .vscode dist .elm-land .env -.DS_Store -*.pem \ No newline at end of file +*.pem +gen/Tailwind \ No newline at end of file diff --git a/README.MD b/README.MD index de8f0c7..c93163d 100644 --- a/README.MD +++ b/README.MD @@ -1,40 +1,23 @@ # Devden website -> 🌳 built with [elm-spa](https://elm-spa.dev) ## dependencies -This project requires the latest LTS version of [Node.js](https://nodejs.org/) - -```bash -npm install -g elm elm-spa -``` +It's easiest to use Nix/Devenv to get everything you need. ## running locally ```bash -elm-spa server # starts this app at http:/localhost:1234 +elm-land server # starts this app at http:/localhost:1234 devenv up # also starts the app, but automatically takes care of everything ``` -### other commands - -```bash -elm-spa add # add a new page to the application -elm-spa build # production build -elm-spa watch # runs build as you code (without the server) -``` - -**Formatting**: +### Formatting ```bash treefmt  # formats everything ``` -## learn more - -You can learn more at [elm-spa.dev](https://elm-spa.dev) - ## TODO diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..946bdb8 --- /dev/null +++ b/bun.lock @@ -0,0 +1,500 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "website", + "dependencies": { + "elm-tailwind-modules": "^0.5.0", + "postcss": "^8.4.0", + "tailwindcss": "^3.4.0", + }, + "devDependencies": { + "@types/bun": "latest", + "elm-land": "^0.20.1", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "packages": { + "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], + + "@elm_binaries/darwin_arm64": ["@elm_binaries/darwin_arm64@0.19.1-0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mjbsH7BNHEAmoE2SCJFcfk5fIHwFIpxtSgnEAqMsVLpBUFoEtAeX+LQ+N0vSFJB3WAh73+QYx/xSluxxLcL6dA=="], + + "@elm_binaries/darwin_x64": ["@elm_binaries/darwin_x64@0.19.1-0", "", { "os": "darwin", "cpu": "x64" }, "sha512-QGUtrZTPBzaxgi9al6nr+9313wrnUVHuijzUK39UsPS+pa+n6CmWyV/69sHZeX9qy6UfeugE0PzF3qcUiy2GDQ=="], + + "@elm_binaries/linux_x64": ["@elm_binaries/linux_x64@0.19.1-0", "", { "os": "linux", "cpu": "x64" }, "sha512-T1ZrWVhg2kKAsi8caOd3vp/1A3e21VuCpSG63x8rDie50fHbCytTway9B8WHEdnBFv4mYWiA68dzGxYCiFmU2w=="], + + "@elm_binaries/win32_x64": ["@elm_binaries/win32_x64@0.19.1-0", "", { "os": "win32", "cpu": "x64" }, "sha512-yDleiXqSE9EcqKtd9SkC/4RIW8I71YsXzMPL79ub2bBPHjWTcoyyeBbYjoOB9SxSlArJ74HaoBApzT6hY7Zobg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.20.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.20.2", "", { "os": "android", "cpu": "arm" }, "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.20.2", "", { "os": "android", "cpu": "arm64" }, "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.20.2", "", { "os": "android", "cpu": "x64" }, "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.20.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.20.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.20.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.20.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.20.2", "", { "os": "linux", "cpu": "arm" }, "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.20.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.20.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.20.2", "", { "os": "linux", "cpu": "none" }, "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.20.2", "", { "os": "linux", "cpu": "none" }, "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.20.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.20.2", "", { "os": "linux", "cpu": "none" }, "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.20.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.20.2", "", { "os": "linux", "cpu": "x64" }, "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.20.2", "", { "os": "none", "cpu": "x64" }, "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.20.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.20.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.20.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.20.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.20.2", "", { "os": "win32", "cpu": "x64" }, "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@lydell/elm": ["@lydell/elm@0.19.1-14", "", { "optionalDependencies": { "@lydell/elm_darwin_arm64": "0.19.1-3", "@lydell/elm_darwin_x64": "0.19.1-2", "@lydell/elm_linux_arm": "0.19.1-0", "@lydell/elm_linux_arm64": "0.19.1-4", "@lydell/elm_linux_x64": "0.19.1-1", "@lydell/elm_win32_x64": "0.19.1-1" }, "bin": { "elm": "bin/elm" } }, "sha512-otpGlYiNRvL7F9k6MJOTcuyIgHr+XWy/1NtHpGUgQi8lHrnuyCjwKFPPiimKpr3bcZTwpD4nebHuYR0bmPIKuA=="], + + "@lydell/elm_darwin_arm64": ["@lydell/elm_darwin_arm64@0.19.1-3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RuKTz5ck+RBx4urj1EL/r0xWZZqBMPEXzNBQTEBCAMWLSi4Ck3TVz5pkhBaK+cRZXI+cCgytm/1bIttbp2fFIg=="], + + "@lydell/elm_darwin_x64": ["@lydell/elm_darwin_x64@0.19.1-2", "", { "os": "darwin", "cpu": "x64" }, "sha512-MXfQwxdQfmuQ22iDCFlcXu5YTA0w6/ASzbxmWc+8DkgUkHTynjViGBVkQljAbYe4ZWgrYGWinZQQyhVnp/5oZw=="], + + "@lydell/elm_linux_arm": ["@lydell/elm_linux_arm@0.19.1-0", "", { "os": "linux", "cpu": "arm" }, "sha512-crKrLzuT6jn4OOS7PWKZGYFw6vHwPu3iNP7lg8rFkOog/HxlkRwX4S695aILBG8SGTLhEdfP9tg28SQ7vR4Lpg=="], + + "@lydell/elm_linux_arm64": ["@lydell/elm_linux_arm64@0.19.1-4", "", { "os": "linux", "cpu": "arm64" }, "sha512-JuUkkVBtJjUajtTriQFFANHDmwA14NhqNqgIcq5LCJ6vUQv5/LVd6NUOkl/Rdq7Ju/VN/XwBD1/vm7MGIMOTqA=="], + + "@lydell/elm_linux_x64": ["@lydell/elm_linux_x64@0.19.1-1", "", { "os": "linux", "cpu": "x64" }, "sha512-1Y8UAb+GfUqlSjUTX9CaaZhJqvhVcfNbYC0N9AEutlXf1CzFMvF4VsDeZdxzhNI4allPRWBD1IqtdlLhBTFacA=="], + + "@lydell/elm_win32_x64": ["@lydell/elm_win32_x64@0.19.1-1", "", { "os": "win32", "cpu": "x64" }, "sha512-3LMiJ+uUxDFLNnCd6HBmvVWSjSWjs/Z9dMXZWCMOcw3vrW9iOkRrsNGNxohRXun2YRd8wXOX8/DwVn8i2SJ3KA=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.0", "", { "os": "android", "cpu": "arm" }, "sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.0", "", { "os": "android", "cpu": "arm64" }, "sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.0", "", { "os": "linux", "cpu": "arm" }, "sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.0", "", { "os": "linux", "cpu": "x64" }, "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.0", "", { "os": "linux", "cpu": "x64" }, "sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.0", "", { "os": "none", "cpu": "arm64" }, "sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.0", "", { "os": "win32", "cpu": "x64" }, "sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.0", "", { "os": "win32", "cpu": "x64" }, "sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w=="], + + "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], + + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + + "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], + + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], + + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "chokidar": ["chokidar@3.5.3", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + + "cross-spawn": ["cross-spawn@7.0.3", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="], + + "css-what": ["css-what@5.1.0", "", {}, "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "deep-equal": ["deep-equal@2.2.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "isarray": "^2.0.5", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", "which-typed-array": "^1.1.13" } }, "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], + + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "elm": ["elm@0.19.1-6", "", { "optionalDependencies": { "@elm_binaries/darwin_arm64": "0.19.1-0", "@elm_binaries/darwin_x64": "0.19.1-0", "@elm_binaries/linux_x64": "0.19.1-0", "@elm_binaries/win32_x64": "0.19.1-0" }, "bin": { "elm": "bin/elm" } }, "sha512-mKYyierHICPdMx/vhiIacdPmTPnh889gjHOZ75ZAoCxo3lZmSWbGP8HMw78wyctJH0HwvTmeKhlYSWboQNYPeQ=="], + + "elm-land": ["elm-land@0.20.1", "", { "dependencies": { "@lydell/elm": "0.19.1-14", "chokidar": "3.5.3", "terser": "5.15.1", "typescript": "4.9.3", "vite": "5.2.8", "vite-plugin-elm-watch": "1.3.3" }, "bin": { "elm-land": "src/index.js" } }, "sha512-AY8BxYNT7mblaIO9SS2YQPdskZdMsLL6fqjAA5bORdkGIRDkMeaw+rXgiVSHUM2+TK0k/ld0TdQEAd24Moi5nw=="], + + "elm-tailwind-modules": ["elm-tailwind-modules@0.5.0", "", { "dependencies": { "chalk": "^4.1.1", "color-name": "^1.1.4", "commander": "^7.2.0", "css-what": "^5.0.0", "deep-equal": "^2.0.3", "fs-extra": "^9.1.0", "lodash": "^4.17.21", "rollup": "^2.45.2", "tslib": "^2.2.0" }, "peerDependencies": { "postcss": "^8.2.4", "tailwindcss": "^2.0.2 || ^3.1.6" }, "bin": { "elm-tailwind-modules": "dist/cli.js" } }, "sha512-Ad03E6lZwB2Fa+OoLTSzlRKOIzO+T5jTgTOHl53WREmNZPxcaJ+1acwdM/7RJrTkTfvoXi241pdfzzOBQX5r2A=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-get-iterator": ["es-get-iterator@1.1.3", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "is-arguments": "^1.1.1", "is-map": "^2.0.2", "is-set": "^2.0.2", "is-string": "^1.0.7", "isarray": "^2.0.5", "stop-iteration-iterator": "^1.0.0" } }, "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "esbuild": ["esbuild@0.20.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.20.2", "@esbuild/android-arm": "0.20.2", "@esbuild/android-arm64": "0.20.2", "@esbuild/android-x64": "0.20.2", "@esbuild/darwin-arm64": "0.20.2", "@esbuild/darwin-x64": "0.20.2", "@esbuild/freebsd-arm64": "0.20.2", "@esbuild/freebsd-x64": "0.20.2", "@esbuild/linux-arm": "0.20.2", "@esbuild/linux-arm64": "0.20.2", "@esbuild/linux-ia32": "0.20.2", "@esbuild/linux-loong64": "0.20.2", "@esbuild/linux-mips64el": "0.20.2", "@esbuild/linux-ppc64": "0.20.2", "@esbuild/linux-riscv64": "0.20.2", "@esbuild/linux-s390x": "0.20.2", "@esbuild/linux-x64": "0.20.2", "@esbuild/netbsd-x64": "0.20.2", "@esbuild/openbsd-x64": "0.20.2", "@esbuild/sunos-x64": "0.20.2", "@esbuild/win32-arm64": "0.20.2", "@esbuild/win32-ia32": "0.20.2", "@esbuild/win32-x64": "0.20.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + + "fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + + "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], + + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], + + "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], + + "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], + + "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], + + "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], + + "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], + + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], + + "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + + "launch-editor": ["launch-editor@2.6.1", "", { "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw=="], + + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "object-is": ["object-is@1.1.6", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" } }, "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q=="], + + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + + "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + + "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], + + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + + "postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], + + "postcss-js": ["postcss-js@4.1.0", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw=="], + + "postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="], + + "postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="], + + "postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + + "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], + + "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "tailwindcss": ["tailwindcss@3.4.19", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ=="], + + "terser": ["terser@5.15.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw=="], + + "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], + + "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], + + "tiny-decoders": ["tiny-decoders@7.0.1", "", {}, "sha512-P1LaHTLASl/lCrdtwgAAVwxt4bEAPmxpf9HMQrlCkAseaT8oH8oxm8ndy4nx5rLTcL5U/Qxp1a+FDoQfS/ZgQQ=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "vite": ["vite@5.2.8", "", { "dependencies": { "esbuild": "^0.20.1", "postcss": "^8.4.38", "rollup": "^4.13.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA=="], + + "vite-plugin-elm-watch": ["vite-plugin-elm-watch@1.3.3", "", { "dependencies": { "cross-spawn": "7.0.3", "elm": "0.19.1-6", "launch-editor": "2.6.1", "terser": "5.26.0", "tiny-decoders": "7.0.1" } }, "sha512-rR78gmeYp08E4CvtpnZuumsmNXaG/XOJ/xtOVfEG3TOJqDChXy1DzE1pnPsERohbELkov7ZZPHRLGV1z2iyxKg=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], + + "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], + + "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], + + "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "elm-land/typescript": ["typescript@4.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + + "tailwindcss/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + + "vite/rollup": ["rollup@4.60.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.0", "@rollup/rollup-android-arm64": "4.60.0", "@rollup/rollup-darwin-arm64": "4.60.0", "@rollup/rollup-darwin-x64": "4.60.0", "@rollup/rollup-freebsd-arm64": "4.60.0", "@rollup/rollup-freebsd-x64": "4.60.0", "@rollup/rollup-linux-arm-gnueabihf": "4.60.0", "@rollup/rollup-linux-arm-musleabihf": "4.60.0", "@rollup/rollup-linux-arm64-gnu": "4.60.0", "@rollup/rollup-linux-arm64-musl": "4.60.0", "@rollup/rollup-linux-loong64-gnu": "4.60.0", "@rollup/rollup-linux-loong64-musl": "4.60.0", "@rollup/rollup-linux-ppc64-gnu": "4.60.0", "@rollup/rollup-linux-ppc64-musl": "4.60.0", "@rollup/rollup-linux-riscv64-gnu": "4.60.0", "@rollup/rollup-linux-riscv64-musl": "4.60.0", "@rollup/rollup-linux-s390x-gnu": "4.60.0", "@rollup/rollup-linux-x64-gnu": "4.60.0", "@rollup/rollup-linux-x64-musl": "4.60.0", "@rollup/rollup-openbsd-x64": "4.60.0", "@rollup/rollup-openharmony-arm64": "4.60.0", "@rollup/rollup-win32-arm64-msvc": "4.60.0", "@rollup/rollup-win32-ia32-msvc": "4.60.0", "@rollup/rollup-win32-x64-gnu": "4.60.0", "@rollup/rollup-win32-x64-msvc": "4.60.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ=="], + + "vite-plugin-elm-watch/terser": ["terser@5.26.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ=="], + + "tailwindcss/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "vite-plugin-elm-watch/terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..07b7de9 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "website", + "type": "module", + "private": true, + "devDependencies": { + "@types/bun": "latest", + "elm-land": "^0.20.1" + }, + "peerDependencies": { + "typescript": "^5" + }, + "dependencies": { + "elm-tailwind-modules": "^0.5.0", + "postcss": "^8.4.0", + "tailwindcss": "^3.4.0" + } +} \ No newline at end of file diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..bce4855 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +export default { + plugins: { + "@tailwindcss/postcss": {}, + } +} \ No newline at end of file diff --git a/src/View.elm b/src/View.elm new file mode 100644 index 0000000..9f9eeed --- /dev/null +++ b/src/View.elm @@ -0,0 +1,72 @@ +module View exposing + ( View, map + , none, fromString + , toBrowserDocument + ) + +{-| + +@docs View, map +@docs none, fromString +@docs toBrowserDocument + +-} + +import Browser +import Html exposing (Html) +import Route exposing (Route) +import Shared.Model + + +type alias View msg = + { title : String + , body : List (Html msg) + } + + +{-| Used internally by Elm Land to create your application +so it works with Elm's expected `Browser.Document msg` type. +-} +toBrowserDocument : + { shared : Shared.Model.Model + , route : Route () + , view : View msg + } + -> Browser.Document msg +toBrowserDocument { view } = + { title = view.title + , body = view.body + } + + +{-| Used internally by Elm Land to connect your pages together. +-} +map : (msg1 -> msg2) -> View msg1 -> View msg2 +map fn view = + { title = view.title + , body = List.map (Html.map fn) view.body + } + + +{-| Used internally by Elm Land whenever transitioning between +authenticated pages. +-} +none : View msg +none = + { title = "" + , body = [] + } + + +{-| If you customize the `View` module, anytime you run `elm-land add page`, +the generated page will use this when adding your `view` function. + +That way your app will compile after adding new pages, and you can see +the new page working in the web browser! + +-} +fromString : String -> View msg +fromString moduleName = + { title = moduleName + , body = [ Html.text moduleName ] + } From 63411236940bd8ab408cb6d8e7c4b978d0e3aa51 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 27 Mar 2026 18:15:57 +0000 Subject: [PATCH 08/48] build: Add tailwind properly --- README.MD | 2 +- elm.json | 11 ++++++++--- flake.nix | 6 ++++-- src/Pages/Home_.elm | 31 +++++++++++++++++++++++++++++-- src/View.elm | 4 ++-- 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/README.MD b/README.MD index c93163d..a09363c 100644 --- a/README.MD +++ b/README.MD @@ -9,7 +9,7 @@ It's easiest to use Nix/Devenv to get everything you need. ```bash elm-land server # starts this app at http:/localhost:1234 devenv up # also starts the app, but automatically takes care of everything - +tw # rebuild tailwind definitions ``` ### Formatting diff --git a/elm.json b/elm.json index 5868b5e..bbfd89d 100644 --- a/elm.json +++ b/elm.json @@ -2,7 +2,8 @@ "type": "application", "source-directories": [ "src", - ".elm-land/src" + ".elm-land/src", + "./gen" ], "elm-version": "0.19.1", "dependencies": { @@ -11,11 +12,15 @@ "elm/core": "1.0.5", "elm/html": "1.0.0", "elm/json": "1.1.3", - "elm/url": "1.0.0" + "elm/url": "1.0.0", + "matheus23/elm-tailwind-modules-base": "1.0.0", + "rtfeldman/elm-css": "18.0.0" }, "indirect": { "elm/time": "1.0.0", - "elm/virtual-dom": "1.0.3" + "elm/virtual-dom": "1.0.3", + "robinheghan/murmur3": "1.0.0", + "rtfeldman/elm-hex": "1.0.0" } }, "test-dependencies": { diff --git a/flake.nix b/flake.nix index 917673d..551f757 100644 --- a/flake.nix +++ b/flake.nix @@ -73,8 +73,10 @@ }; }; - processes.spa-server = { - exec = "bunx elm-land server"; + scripts.tw.exec = "bunx elm-tailwind-modules --dir ./gen"; + + processes = { + spa-server.exec = "bunx elm-land server"; }; }; diff --git a/src/Pages/Home_.elm b/src/Pages/Home_.elm index 945a2e3..5e48ca2 100644 --- a/src/Pages/Home_.elm +++ b/src/Pages/Home_.elm @@ -1,11 +1,38 @@ module Pages.Home_ exposing (page) -import Html +import Css +import Css.Global +import Html.Styled as Html +import Html.Styled.Attributes as Attr +import Tailwind.Breakpoints as Breakpoints +import Tailwind.Theme as Tw +import Tailwind.Utilities as Tw import View exposing (View) page : View msg page = { title = "Homepage" - , body = [ Html.text "Hello, world!" ] + , body = + [ Html.a + [ Attr.css + [ Tw.inline_flex + , Tw.items_center + , Tw.justify_center + , Tw.px_5 + , Tw.py_3 + , Tw.border + , Tw.border_color Tw.transparent + , Tw.text_base + , Tw.font_medium + , Tw.rounded_md + , Tw.text_color Tw.white + , Tw.bg_color Tw.indigo_600 + + -- We can use hover styles via elm-css :) + , Css.hover [ Tw.bg_color Tw.indigo_700 ] + ] + ] + [ Html.text "Hello, world!" ] + ] } diff --git a/src/View.elm b/src/View.elm index 9f9eeed..e5fbb7b 100644 --- a/src/View.elm +++ b/src/View.elm @@ -13,7 +13,7 @@ module View exposing -} import Browser -import Html exposing (Html) +import Html.Styled as Html exposing (Html, toUnstyled) import Route exposing (Route) import Shared.Model @@ -35,7 +35,7 @@ toBrowserDocument : -> Browser.Document msg toBrowserDocument { view } = { title = view.title - , body = view.body + , body = List.map toUnstyled view.body } From 6b9e3735e91dd8888a43b246c20f884d9384491e Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sun, 10 May 2026 13:04:40 +0100 Subject: [PATCH 09/48] feat: wip learning resources and elm-land init --- .envrc | 18 +- .github/workflows/ci.yml | 36 ++ .github/workflows/deploy.yml | 56 ++ README.MD | 7 +- bun.lock | 85 +++ elm.json | 8 + flake.lock | 935 +------------------------------ flake.nix | 86 +-- package.json | 1 + src/Api.elm | 54 ++ src/Layouts/LearningInfo.elm | 123 ++++ src/LearningResources.elm | 176 ++++++ src/Pages/Home_.elm | 2 - src/Pages/Learning.elm | 84 +++ src/Pages/Learning/Resource_.elm | 68 +++ src/Shared.elm | 91 +++ src/Shared/Model.elm | 24 + src/Shared/Msg.elm | 19 + tests/LearningResourcesTest.elm | 122 ++++ 19 files changed, 1003 insertions(+), 992 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/deploy.yml create mode 100644 src/Api.elm create mode 100644 src/Layouts/LearningInfo.elm create mode 100644 src/LearningResources.elm create mode 100644 src/Pages/Learning.elm create mode 100644 src/Pages/Learning/Resource_.elm create mode 100644 src/Shared.elm create mode 100644 src/Shared/Model.elm create mode 100644 src/Shared/Msg.elm create mode 100644 tests/LearningResourcesTest.elm diff --git a/.envrc b/.envrc index 99a025c..07fd338 100644 --- a/.envrc +++ b/.envrc @@ -1,17 +1 @@ -#!/usr/bin/env bash - -if ! has nix_direnv_version || ! nix_direnv_version 3.1.0; then - source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.1.0/direnvrc" "sha256-yMJ2OVMzrFaDPn7q8nCBZFRYpL/f0RcHzhmw/i6btJM=" -fi - -export DEVENV_IN_DIRENV_SHELL=true - -watch_file flake.nix -watch_file flake.lock - -mkdir -p "$PWD/.devenv" -DEVENV_ROOT_FILE="$PWD/.devenv/root" -printf %s "$PWD" >"$DEVENV_ROOT_FILE" -if ! use flake . --override-input devenv-root "file+file://$DEVENV_ROOT_FILE" --accept-flake-config; then - echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2 -fi +use flake . \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1b06e32 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,36 @@ +name: CI + +on: + push: + branches: [master] + pull_request: + branches: [master] + +permissions: + contents: read + +jobs: + build: + name: Build & Lint + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: oven-sh/setup-bun@v2 + + - name: Cache Elm packages + uses: actions/cache@v4 + with: + path: ~/.elm + key: elm-${{ runner.os }}-${{ hashFiles('elm.json') }} + restore-keys: elm-${{ runner.os }}- + + - run: bun install --frozen-lockfile + + - name: Build + run: bunx elm-land build + + - name: Check Elm formatting + run: | + bunx elm-format --validate src/ diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..8e129d2 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,56 @@ +name: Deploy + +on: + push: + branches: [master] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: oven-sh/setup-bun@v2 + + - name: Cache Elm packages + uses: actions/cache@v4 + with: + path: ~/.elm + key: elm-${{ runner.os }}-${{ hashFiles('elm.json') }} + restore-keys: elm-${{ runner.os }}- + + - run: bun install --frozen-lockfile + + - name: Build + run: bunx elm-land build + + - name: Copy index.html as 404.html for SPA routing + run: cp dist/index.html dist/404.html + + - uses: actions/configure-pages@v5 + + - uses: actions/upload-pages-artifact@v3 + with: + path: ./dist + + deploy: + name: Deploy to GitHub Pages + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - id: deployment + uses: actions/deploy-pages@v4 diff --git a/README.MD b/README.MD index a09363c..0b0cc5a 100644 --- a/README.MD +++ b/README.MD @@ -7,11 +7,12 @@ It's easiest to use Nix/Devenv to get everything you need. ## running locally ```bash -elm-land server # starts this app at http:/localhost:1234 -devenv up # also starts the app, but automatically takes care of everything +bunx elm-land server # starts this app at http:/localhost:1234 tw # rebuild tailwind definitions ``` +The site should then be running at http://localhost:1234 + ### Formatting ```bash @@ -29,7 +30,7 @@ treefmt  # formats everything - [ ] `/projects/` - Show information about a various project we have. Should follow a standard format and show github link, contributors (fetch from github?), and other information. - [ ] `/faqs` - Show all the FAQs that you'd see in `ddfaq` -- [X] `/rules` - ~~pretty obvious, rules of the server. we can provide these in a json format if it helps~~ +- [ ] `/rules` - pretty obvious, rules of the server. we can provide these in a json format if it helps - [ ] `/team` or `/staff` - Show a nice list of admins, mods, contributors to projects, etc - [ ] `/moderation/` Once the bot gets moderation features it would be very very cool to have a panel like Dyno or yagpdb have. This probably won't happen for a while. diff --git a/bun.lock b/bun.lock index 946bdb8..fc77e25 100644 --- a/bun.lock +++ b/bun.lock @@ -5,6 +5,7 @@ "": { "name": "website", "dependencies": { + "@tailwindcss/postcss": "^4.3.0", "elm-tailwind-modules": "^0.5.0", "postcss": "^8.4.0", "tailwindcss": "^3.4.0", @@ -77,6 +78,8 @@ "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], @@ -155,6 +158,36 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.0", "", { "os": "win32", "cpu": "x64" }, "sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w=="], + "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], + + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.0", "@tailwindcss/oxide-darwin-arm64": "4.3.0", "@tailwindcss/oxide-darwin-x64": "4.3.0", "@tailwindcss/oxide-freebsd-x64": "4.3.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", "@tailwindcss/oxide-linux-x64-musl": "4.3.0", "@tailwindcss/oxide-wasm32-wasi": "4.3.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg=="], + + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.0", "", { "os": "android", "cpu": "arm64" }, "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng=="], + + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ=="], + + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA=="], + + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ=="], + + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0", "", { "os": "linux", "cpu": "arm" }, "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA=="], + + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg=="], + + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ=="], + + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ=="], + + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg=="], + + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.0", "", { "dependencies": { "@emnapi/core": "^1.10.0", "@emnapi/runtime": "^1.10.0", "@emnapi/wasi-threads": "^1.2.1", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA=="], + + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ=="], + + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA=="], + + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.0", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "postcss": "^8.5.10", "tailwindcss": "4.3.0" } }, "sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w=="], + "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], @@ -215,6 +248,8 @@ "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], @@ -227,6 +262,8 @@ "elm-tailwind-modules": ["elm-tailwind-modules@0.5.0", "", { "dependencies": { "chalk": "^4.1.1", "color-name": "^1.1.4", "commander": "^7.2.0", "css-what": "^5.0.0", "deep-equal": "^2.0.3", "fs-extra": "^9.1.0", "lodash": "^4.17.21", "rollup": "^2.45.2", "tslib": "^2.2.0" }, "peerDependencies": { "postcss": "^8.2.4", "tailwindcss": "^2.0.2 || ^3.1.6" }, "bin": { "elm-tailwind-modules": "dist/cli.js" } }, "sha512-Ad03E6lZwB2Fa+OoLTSzlRKOIzO+T5jTgTOHl53WREmNZPxcaJ+1acwdM/7RJrTkTfvoXi241pdfzzOBQX5r2A=="], + "enhanced-resolve": ["enhanced-resolve@5.21.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-xe9vQb5kReirPUxgQrXA3ihgbCqssmTiM7cOZ+Gzu+VeGWgpV98lLZvp0dl4yriyAePcewxGUs9UpKD8PET9KQ=="], + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], @@ -329,12 +366,38 @@ "launch-editor": ["launch-editor@2.6.1", "", { "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw=="], + "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], @@ -439,6 +502,8 @@ "tailwindcss": ["tailwindcss@3.4.19", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ=="], + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], + "terser": ["terser@5.15.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw=="], "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], @@ -475,6 +540,26 @@ "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], + "@tailwindcss/node/jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], + + "@tailwindcss/node/tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], + + "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "@tailwindcss/postcss/postcss": ["postcss@8.5.14", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg=="], + + "@tailwindcss/postcss/tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], + "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "elm-land/typescript": ["typescript@4.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA=="], diff --git a/elm.json b/elm.json index bbfd89d..2640b95 100644 --- a/elm.json +++ b/elm.json @@ -11,12 +11,20 @@ "elm/browser": "1.0.2", "elm/core": "1.0.5", "elm/html": "1.0.0", + "elm/http": "2.0.0", "elm/json": "1.1.3", "elm/url": "1.0.0", + "elm-explorations/test": "2.2.1", + "lovebug356/yaml": "1.0.5", "matheus23/elm-tailwind-modules-base": "1.0.0", "rtfeldman/elm-css": "18.0.0" }, "indirect": { + "elm/bytes": "1.0.8", + "elm/file": "1.0.5", + "elm/parser": "1.1.0", + "elm/random": "1.0.0", + "elm/regex": "1.0.0", "elm/time": "1.0.0", "elm/virtual-dom": "1.0.3", "robinheghan/murmur3": "1.0.0", diff --git a/flake.lock b/flake.lock index 6bdc84e..d06daa6 100644 --- a/flake.lock +++ b/flake.lock @@ -1,359 +1,15 @@ { "nodes": { - "cachix": { - "inputs": { - "devenv": [ - "devenv" - ], - "flake-compat": [ - "devenv", - "flake-compat" - ], - "git-hooks": [ - "devenv", - "git-hooks" - ], - "nixpkgs": [ - "devenv", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1767714506, - "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=", - "owner": "cachix", - "repo": "cachix", - "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9", - "type": "github" - }, - "original": { - "owner": "cachix", - "ref": "latest", - "repo": "cachix", - "type": "github" - } - }, - "cachix_2": { - "inputs": { - "devenv": [ - "devenv", - "crate2nix" - ], - "flake-compat": [ - "devenv", - "crate2nix" - ], - "git-hooks": "git-hooks", - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1767714506, - "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=", - "owner": "cachix", - "repo": "cachix", - "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9", - "type": "github" - }, - "original": { - "owner": "cachix", - "ref": "latest", - "repo": "cachix", - "type": "github" - } - }, - "cachix_3": { - "inputs": { - "devenv": [ - "devenv", - "crate2nix", - "crate2nix_stable" - ], - "flake-compat": [ - "devenv", - "crate2nix", - "crate2nix_stable" - ], - "git-hooks": "git-hooks_2", - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1767714506, - "narHash": "sha256-WaTs0t1CxhgxbIuvQ97OFhDTVUGd1HA+KzLZUZBhe0s=", - "owner": "cachix", - "repo": "cachix", - "rev": "894c649f0daaa38bbcfb21de64be47dfa7cd0ec9", - "type": "github" - }, - "original": { - "owner": "cachix", - "ref": "latest", - "repo": "cachix", - "type": "github" - } - }, - "crate2nix": { - "inputs": { - "cachix": "cachix_2", - "crate2nix_stable": "crate2nix_stable", - "devshell": "devshell_2", - "flake-compat": "flake-compat_2", - "flake-parts": "flake-parts_2", - "nix-test-runner": "nix-test-runner_2", - "nixpkgs": [ - "devenv", - "nixpkgs" - ], - "pre-commit-hooks": "pre-commit-hooks_2" - }, - "locked": { - "lastModified": 1773440526, - "narHash": "sha256-OcX1MYqUdoalY3/vU67PEx8m6RvqGxX0LwKonjzXn7I=", - "owner": "nix-community", - "repo": "crate2nix", - "rev": "e697d3049c909580128caa856ab8eb709556a97b", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "crate2nix", - "type": "github" - } - }, - "crate2nix_stable": { - "inputs": { - "cachix": "cachix_3", - "crate2nix_stable": [ - "devenv", - "crate2nix", - "crate2nix_stable" - ], - "devshell": "devshell", - "flake-compat": "flake-compat", - "flake-parts": "flake-parts", - "nix-test-runner": "nix-test-runner", - "nixpkgs": "nixpkgs_3", - "pre-commit-hooks": "pre-commit-hooks" - }, - "locked": { - "lastModified": 1769627083, - "narHash": "sha256-SUuruvw1/moNzCZosHaa60QMTL+L9huWdsCBN6XZIic=", - "owner": "nix-community", - "repo": "crate2nix", - "rev": "7c33e664668faecf7655fa53861d7a80c9e464a2", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "0.15.0", - "repo": "crate2nix", - "type": "github" - } - }, - "devenv": { - "inputs": { - "cachix": "cachix", - "crate2nix": "crate2nix", - "flake-compat": "flake-compat_3", - "flake-parts": "flake-parts_3", - "git-hooks": "git-hooks_3", - "nix": "nix", - "nixd": "nixd", - "nixpkgs": "nixpkgs_4", - "rust-overlay": "rust-overlay" - }, - "locked": { - "lastModified": 1774574416, - "narHash": "sha256-lSDwajbwYOAXggD0EAs/pOaBcnSfRjX1ScPo4fk8+tI=", - "owner": "cachix", - "repo": "devenv", - "rev": "4dbca34da522d2169cffb62e56965e4b8ee2453d", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "devenv", - "type": "github" - } - }, - "devenv-root": { - "flake": false, - "locked": { - "narHash": "sha256-d6xi4mKdjkX2JFicDIv5niSzpyI0m/Hnm8GGAIU04kY=", - "type": "file", - "url": "file:///dev/null" - }, - "original": { - "type": "file", - "url": "file:///dev/null" - } - }, - "devshell": { - "inputs": { - "nixpkgs": [ - "devenv", - "crate2nix", - "crate2nix_stable", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1768818222, - "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=", - "owner": "numtide", - "repo": "devshell", - "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "devshell", - "type": "github" - } - }, - "devshell_2": { - "inputs": { - "nixpkgs": [ - "devenv", - "crate2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1768818222, - "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=", - "owner": "numtide", - "repo": "devshell", - "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "devshell", - "type": "github" - } - }, - "flake-compat": { - "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", - "revCount": 69, - "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" - } - }, - "flake-compat_2": { - "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", - "revCount": 69, - "type": "tarball", - "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" - } - }, - "flake-compat_3": { - "flake": false, - "locked": { - "lastModified": 1767039857, - "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, "flake-parts": { "inputs": { - "nixpkgs-lib": [ - "devenv", - "crate2nix", - "crate2nix_stable", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1768135262, - "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_2": { - "inputs": { - "nixpkgs-lib": [ - "devenv", - "crate2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1768135262, - "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_3": { - "inputs": { - "nixpkgs-lib": [ - "devenv", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1772408722, - "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_4": { - "inputs": { - "nixpkgs-lib": [ - "nixpkgs" - ] + "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1772408722, - "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", + "lastModified": 1777988971, + "narHash": "sha256-qIoWPDs+0/8JecyYgE3gpKQxW/4bLW/gp45vow9ioCQ=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", + "rev": "0678d8986be1661af6bb555f3489f2fdfc31f6ff", "type": "github" }, "original": { @@ -362,603 +18,56 @@ "type": "github" } }, - "git-hooks": { - "inputs": { - "flake-compat": [ - "devenv", - "crate2nix", - "cachix", - "flake-compat" - ], - "gitignore": "gitignore", - "nixpkgs": [ - "devenv", - "crate2nix", - "cachix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1765404074, - "narHash": "sha256-+ZDU2d+vzWkEJiqprvV5PR26DVFN2vgddwG5SnPZcUM=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "2d6f58930fbcd82f6f9fd59fb6d13e37684ca529", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, - "git-hooks_2": { - "inputs": { - "flake-compat": [ - "devenv", - "crate2nix", - "crate2nix_stable", - "cachix", - "flake-compat" - ], - "gitignore": "gitignore_2", - "nixpkgs": [ - "devenv", - "crate2nix", - "crate2nix_stable", - "cachix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1765404074, - "narHash": "sha256-+ZDU2d+vzWkEJiqprvV5PR26DVFN2vgddwG5SnPZcUM=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "2d6f58930fbcd82f6f9fd59fb6d13e37684ca529", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, - "git-hooks_3": { - "inputs": { - "flake-compat": [ - "devenv", - "flake-compat" - ], - "gitignore": "gitignore_5", - "nixpkgs": [ - "devenv", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1772893680, - "narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "8baab586afc9c9b57645a734c820e4ac0a604af9", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "devenv", - "crate2nix", - "cachix", - "git-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, - "gitignore_2": { - "inputs": { - "nixpkgs": [ - "devenv", - "crate2nix", - "crate2nix_stable", - "cachix", - "git-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, - "gitignore_3": { - "inputs": { - "nixpkgs": [ - "devenv", - "crate2nix", - "crate2nix_stable", - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, - "gitignore_4": { - "inputs": { - "nixpkgs": [ - "devenv", - "crate2nix", - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, - "gitignore_5": { - "inputs": { - "nixpkgs": [ - "devenv", - "git-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, - "mk-shell-bin": { - "locked": { - "lastModified": 1677004959, - "narHash": "sha256-/uEkr1UkJrh11vD02aqufCxtbF5YnhRTIKlx5kyvf+I=", - "owner": "rrbutani", - "repo": "nix-mk-shell-bin", - "rev": "ff5d8bd4d68a347be5042e2f16caee391cd75887", - "type": "github" - }, - "original": { - "owner": "rrbutani", - "repo": "nix-mk-shell-bin", - "type": "github" - } - }, - "nix": { - "inputs": { - "flake-compat": [ - "devenv", - "flake-compat" - ], - "flake-parts": [ - "devenv", - "flake-parts" - ], - "git-hooks-nix": [ - "devenv", - "git-hooks" - ], - "nixpkgs": [ - "devenv", - "nixpkgs" - ], - "nixpkgs-23-11": [ - "devenv" - ], - "nixpkgs-regression": [ - "devenv" - ] - }, - "locked": { - "lastModified": 1774103430, - "narHash": "sha256-MRNVInSmvhKIg3y0UdogQJXe+omvKijGszFtYpd5r9k=", - "owner": "cachix", - "repo": "nix", - "rev": "e127c1c94cefe02d8ca4cca79ef66be4c527510e", - "type": "github" - }, - "original": { - "owner": "cachix", - "ref": "devenv-2.32", - "repo": "nix", - "type": "github" - } - }, - "nix-test-runner": { - "flake": false, - "locked": { - "lastModified": 1588761593, - "narHash": "sha256-FKJykltAN/g3eIceJl4SfDnnyuH2jHImhMrXS2KvGIs=", - "owner": "stoeffel", - "repo": "nix-test-runner", - "rev": "c45d45b11ecef3eb9d834c3b6304c05c49b06ca2", - "type": "github" - }, - "original": { - "owner": "stoeffel", - "repo": "nix-test-runner", - "type": "github" - } - }, - "nix-test-runner_2": { - "flake": false, - "locked": { - "lastModified": 1588761593, - "narHash": "sha256-FKJykltAN/g3eIceJl4SfDnnyuH2jHImhMrXS2KvGIs=", - "owner": "stoeffel", - "repo": "nix-test-runner", - "rev": "c45d45b11ecef3eb9d834c3b6304c05c49b06ca2", - "type": "github" - }, - "original": { - "owner": "stoeffel", - "repo": "nix-test-runner", - "type": "github" - } - }, - "nix2container": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1773987955, - "narHash": "sha256-vgxwF/GS9lRC9s211RnmJaGKHIUexMiRs7Eslh11E08=", - "owner": "nlewo", - "repo": "nix2container", - "rev": "20d339590c3c36252514a57b0241c47bcd8a08ce", - "type": "github" - }, - "original": { - "owner": "nlewo", - "repo": "nix2container", - "type": "github" - } - }, - "nixd": { - "inputs": { - "flake-parts": [ - "devenv", - "flake-parts" - ], - "nixpkgs": [ - "devenv", - "nixpkgs" - ], - "treefmt-nix": "treefmt-nix" - }, - "locked": { - "lastModified": 1773634079, - "narHash": "sha256-49qb4QNMv77VOeEux+sMd0uBhPvvHgVc0r938Bulvbo=", - "owner": "nix-community", - "repo": "nixd", - "rev": "8ecf93d4d93745e05ea53534e8b94f5e9506e6bd", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nixd", - "type": "github" - } - }, "nixpkgs": { "locked": { - "lastModified": 1765186076, - "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=", + "lastModified": 1778003029, + "narHash": "sha256-q/nkKLDtHIyLjZpKhWk3cSK5IYsFqtMd6UtXF3ddjgA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8", + "rev": "0c88e1f2bdb93d5999019e99cb0e61e1fe2af4c5", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-unstable", + "ref": "nixos-25.11", "repo": "nixpkgs", "type": "github" } }, - "nixpkgs-src": { - "flake": false, + "nixpkgs-lib": { "locked": { - "lastModified": 1773597492, - "narHash": "sha256-hQ284SkIeNaeyud+LS0WVLX+WL2rxcVZLFEaK0e03zg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "a07d4ce6bee67d7c838a8a5796e75dff9caa21ef", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-src_2": { - "flake": false, - "locked": { - "lastModified": 1773840656, - "narHash": "sha256-9tpvMGFteZnd3gRQZFlRCohVpqooygFuy9yjuyRL2C0=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "9cf7092bdd603554bd8b63c216e8943cf9b12512", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1765186076, - "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1769433173, - "narHash": "sha256-Gf1dFYgD344WZ3q0LPlRoWaNdNQq8kSBDLEWulRQSEs=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "13b0f9e6ac78abbbb736c635d87845c4f4bee51b", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "inputs": { - "nixpkgs-src": "nixpkgs-src" - }, - "locked": { - "lastModified": 1773704619, - "narHash": "sha256-LKtmit8Sr81z8+N2vpIaN/fyiQJ8f7XJ6tMSKyDVQ9s=", - "owner": "cachix", - "repo": "devenv-nixpkgs", - "rev": "906534d75b0e2fe74a719559dfb1ad3563485f43", - "type": "github" - }, - "original": { - "owner": "cachix", - "ref": "rolling", - "repo": "devenv-nixpkgs", - "type": "github" - } - }, - "nixpkgs_5": { - "inputs": { - "nixpkgs-src": "nixpkgs-src_2" - }, - "locked": { - "lastModified": 1774287239, - "narHash": "sha256-W3krsWcDwYuA3gPWsFA24YAXxOFUL6iIlT6IknAoNSE=", - "owner": "cachix", - "repo": "devenv-nixpkgs", - "rev": "fa7125ea7f1ae5430010a6e071f68375a39bd24c", - "type": "github" - }, - "original": { - "owner": "cachix", - "ref": "rolling", - "repo": "devenv-nixpkgs", - "type": "github" - } - }, - "nixpkgs_6": { - "locked": { - "lastModified": 1770107345, - "narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "4533d9293756b63904b7238acb84ac8fe4c8c2c4", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "pre-commit-hooks": { - "inputs": { - "flake-compat": [ - "devenv", - "crate2nix", - "crate2nix_stable", - "flake-compat" - ], - "gitignore": "gitignore_3", - "nixpkgs": [ - "devenv", - "crate2nix", - "crate2nix_stable", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1769069492, - "narHash": "sha256-Efs3VUPelRduf3PpfPP2ovEB4CXT7vHf8W+xc49RL/U=", - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "type": "github" - } - }, - "pre-commit-hooks_2": { - "inputs": { - "flake-compat": [ - "devenv", - "crate2nix", - "flake-compat" - ], - "gitignore": "gitignore_4", - "nixpkgs": [ - "devenv", - "crate2nix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1769069492, - "narHash": "sha256-Efs3VUPelRduf3PpfPP2ovEB4CXT7vHf8W+xc49RL/U=", - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23", + "lastModified": 1777894051, + "narHash": "sha256-gD93nlyAyOZOQ2BG1YE/xPid8eVPrwCD2UBMMjwJ1o4=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "cea90d52f99e874eb11689f4acd7951bcde3b7a0", "type": "github" }, "original": { - "owner": "cachix", - "repo": "pre-commit-hooks.nix", + "owner": "nix-community", + "repo": "nixpkgs.lib", "type": "github" } }, "root": { "inputs": { - "devenv": "devenv", - "devenv-root": "devenv-root", - "flake-parts": "flake-parts_4", - "mk-shell-bin": "mk-shell-bin", - "nix2container": "nix2container", - "nixpkgs": "nixpkgs_5", - "treefmt-nix": "treefmt-nix_2" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "devenv", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1773630837, - "narHash": "sha256-zJhgAGnbVKeBMJOb9ctZm4BGS/Rnrz+5lfSXTVah4HQ=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "f600ea449c7b5bb596fa1cf21c871cc5b9e31316", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "treefmt-nix": "treefmt-nix" } }, "treefmt-nix": { "inputs": { "nixpkgs": [ - "devenv", - "nixd", "nixpkgs" ] }, "locked": { - "lastModified": 1772660329, - "narHash": "sha256-IjU1FxYqm+VDe5qIOxoW+pISBlGvVApRjiw/Y/ttJzY=", - "owner": "numtide", - "repo": "treefmt-nix", - "rev": "3710e0e1218041bbad640352a0440114b1e10428", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "treefmt-nix", - "type": "github" - } - }, - "treefmt-nix_2": { - "inputs": { - "nixpkgs": "nixpkgs_6" - }, - "locked": { - "lastModified": 1773297127, - "narHash": "sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk=", + "lastModified": 1775636079, + "narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "71b125cd05fbfd78cab3e070b73544abe24c5016", + "rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 551f757..4782a13 100644 --- a/flake.nix +++ b/flake.nix @@ -1,87 +1,59 @@ { - description = "Description for the project"; + description = "DevDen Website Nix flake"; inputs = { - devenv-root = { - url = "file+file:///dev/null"; - flake = false; - }; - nixpkgs.url = "github:cachix/devenv-nixpkgs/rolling"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; flake-parts.url = "github:hercules-ci/flake-parts"; - flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs"; - devenv.url = "github:cachix/devenv"; - nix2container.url = "github:nlewo/nix2container"; - nix2container.inputs.nixpkgs.follows = "nixpkgs"; - mk-shell-bin.url = "github:rrbutani/nix-mk-shell-bin"; treefmt-nix.url = "github:numtide/treefmt-nix"; - }; - - nixConfig = { - extra-trusted-public-keys = "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="; - extra-substituters = "https://devenv.cachix.org"; + treefmt-nix.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = - inputs@{ flake-parts, devenv-root, ... }: + inputs@{ flake-parts, ... }: flake-parts.lib.mkFlake { inherit inputs; } { imports = [ - inputs.devenv.flakeModule + inputs.treefmt-nix.flakeModule ]; + systems = [ "x86_64-linux" - "i686-linux" - "x86_64-darwin" "aarch64-linux" + "x86_64-darwin" "aarch64-darwin" ]; perSystem = + { config, pkgs, ... }: { - config, - self', - inputs', - pkgs, - system, - ... - }: - { - # Per-system attributes can be defined here. The self' and inputs' - # module parameters provide easy access to attributes of the same - # system. - - # Equivalent to inputs'.nixpkgs.legacyPackages.hello; - packages.default = pkgs.hello; + treefmt = { + projectRootFile = "flake.nix"; + programs = { + nixfmt.enable = true; + elm-format.enable = true; + }; + }; - devenv.shells.default = { + devShells.default = pkgs.mkShell { name = "devden-website"; - imports = [ + nativeBuildInputs = with pkgs; [ + bun + elmPackages.elm + elmPackages.elm-format + elmPackages.elm-language-server + elmPackages.elm-test ]; - # https://devenv.sh/reference/options/ - packages = [ config.packages.default ]; - - languages.javascript.bun.enable = true; - languages.elm.enable = true; - languages.elm.lsp.enable = true; - - treefmt = { - enable = true; - config.programs = { - nixfmt.enable = true; - elm-format.enable = true; - }; - }; - - scripts.tw.exec = "bunx elm-tailwind-modules --dir ./gen"; + shellHook = '' + alias tw="bunx elm-tailwind-modules --dir ./gen" + alias spa-server="bunx elm-land server" - processes = { - spa-server.exec = "bunx elm-land server"; - }; + echo "Dev shell active." + echo "Commands: tw, spa-server" + ''; }; + packages.default = pkgs.hello; }; - flake = { - }; }; } diff --git a/package.json b/package.json index 07b7de9..f5ec709 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "typescript": "^5" }, "dependencies": { + "@tailwindcss/postcss": "^4.3.0", "elm-tailwind-modules": "^0.5.0", "postcss": "^8.4.0", "tailwindcss": "^3.4.0" diff --git a/src/Api.elm b/src/Api.elm new file mode 100644 index 0000000..22fd179 --- /dev/null +++ b/src/Api.elm @@ -0,0 +1,54 @@ +module Api exposing (..) + +import Effect exposing (Effect) +import Http +import Json.Decode as Json +import LearningResources + + +type Data value + = Loading + | Success value + | Failure Http.Error + + +getLearningResourcesIndex : + { onResponse : Result Http.Error (List LearningResources.ResourceIndexEntry) -> msg } + -> Effect msg +getLearningResourcesIndex { onResponse } = + Effect.sendCmd <| + Http.get + { url = "https://learningresources.developerden.org" + , expect = Http.expectJson onResponse resourceIndexDecoder + } + + +resourceIndexDecoder : Json.Decoder (List LearningResources.ResourceIndexEntry) +resourceIndexDecoder = + Json.list + (Json.map LearningResources.ResourceIndexEntry + (Json.field "name" Json.string) + ) + + +toUserFriendlyMessage : Http.Error -> String +toUserFriendlyMessage httpError = + case httpError of + Http.BadUrl _ -> + "This page requested a bad URL" + + Http.Timeout -> + "Request took too long to respond" + + Http.NetworkError -> + "Could not connect to the API" + + Http.BadStatus code -> + if code == 404 then + "Item not found" + + else + "API returned an error code" + + Http.BadBody _ -> + "Unexpected response from API" diff --git a/src/Layouts/LearningInfo.elm b/src/Layouts/LearningInfo.elm new file mode 100644 index 0000000..408ddb8 --- /dev/null +++ b/src/Layouts/LearningInfo.elm @@ -0,0 +1,123 @@ +module Layouts.LearningInfo exposing (LearningInfoMode(..), Model, Msg, Props, layout) + +import Api +import Effect exposing (Effect) +import Html.Styled as Html +import Html.Styled.Attributes as Attr +import Layout exposing (Layout) +import LearningResources +import Route exposing (Route) +import Shared +import Shared.Model as SharedModel +import View exposing (View) + + +type alias Props = + { mode : LearningInfoMode } + + +type LearningInfoMode + = CardsMode -- ^ Show the index of learning resources as cards + | SidebarMode -- ^ Show the index as a sidebar + + +layout : Props -> Shared.Model -> Route () -> Layout () Model Msg contentMsg +layout props shared _ = + Layout.new + { init = init + , update = update + , view = view props shared + , subscriptions = subscriptions + } + + + +-- MODEL + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init _ = + ( {} + , Effect.none + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + +subscriptions : Model -> Sub Msg +subscriptions _ = + Sub.none + + + +-- VIEW + + +view : Props -> Shared.Model -> { toContentMsg : Msg -> contentMsg, content : View contentMsg, model : Model } -> View contentMsg +view props shared { content } = + { title = content.title + , body = + case shared.learningIndex of + SharedModel.Loading -> + [ Html.text "Loading learning resources..." ] + + SharedModel.Failure error -> + [ Html.text "Failed to load learning resources :(" + , Html.div [] [ Html.text (Api.toUserFriendlyMessage error) ] + ] + + SharedModel.Success entries -> + case props.mode of + CardsMode -> + [ Html.div + [ Attr.class "learning-cards" ] + (List.map viewCard entries) + ] + + SidebarMode -> + [ Html.div + [ Attr.class "learning-layout" ] + [ Html.aside + [ Attr.class "learning-sidebar" ] + [ Html.h3 [] [ Html.text "Languages" ] + , Html.ul [] (List.map viewSidebarItem entries) + ] + , Html.main_ + [ Attr.class "learning-content" ] + content.body + ] + ] + } + + +viewCard : LearningResources.ResourceIndexEntry -> Html.Html msg +viewCard entry = + Html.article + [ Attr.class "learning-card" ] + [ Html.h3 [] [ Html.text entry.name ] + , Html.p [] [ Html.text "Click to browse resources" ] + ] + + +viewSidebarItem : LearningResources.ResourceIndexEntry -> Html.Html msg +viewSidebarItem entry = + Html.li [] [ Html.text entry.name ] diff --git a/src/LearningResources.elm b/src/LearningResources.elm new file mode 100644 index 0000000..d41dd77 --- /dev/null +++ b/src/LearningResources.elm @@ -0,0 +1,176 @@ +module LearningResources exposing + ( LearningResourcesSet + , Price(..) + , Resource + , ResourceIndexEntry + , learningResourcesSet + , learningResourcesSetToString + ) + +import Dict exposing (Dict) +import Yaml.Decode as Jdec +import Yaml.Encode as Jenc + + +type alias ResourceIndexEntry = + { name : String + } + + +{-| Set of resources that can be used for learning programming + +description: +A brief description of the language and its uses + +emoji: +A Unicode emoji glyph or Discord emoji ID to represent the resource, if applicable. The +emoji must be part of the main DevDen server, which isn't great design but there's not +really a better way of doing it. + +name: +The name of the language + +resources: +List of resources that can be used for learning / practicing the language + +-} +type alias LearningResourcesSet = + { description : String + , emoji : Maybe String + , name : String + , resources : List Resource + } + + +{-| cons: +Array of cons for using the resource, e.g. 'only teaches the basics rather than more +advanced concepts' + +description: +A brief description of the resource + +name: +The official name of the resource + +price: +The price of the resource, if it has one. If the resource is free, omit this field. + +pros: +Array of pros for using the resource, e.g. 'explains difficult concepts with good +analogies' + +url: +URL to the resource + +-} +type alias Resource = + { cons : List String + , description : Maybe String + , name : String + , price : Maybe Price + , pros : List String + , url : String + } + + +{-| The price of the resource, if it has one. If the resource is free, omit this field. +-} +type Price + = DoubleInPrice Float + | StringInPrice String + + + +-- decoders and encoders + + +learningResourcesSetToString : LearningResourcesSet -> String +learningResourcesSetToString r = + Jenc.toString 0 (encodeLearningResourcesSet r) + + +learningResourcesSet : Jdec.Decoder LearningResourcesSet +learningResourcesSet = + Jdec.map4 LearningResourcesSet + (Jdec.field "description" Jdec.string) + (optionalField "emoji" Jdec.string) + (Jdec.field "name" Jdec.string) + (Jdec.field "resources" (Jdec.list resource)) + + +encodeLearningResourcesSet : LearningResourcesSet -> Jenc.Encoder +encodeLearningResourcesSet x = + Jenc.record + [ ( "description", Jenc.string x.description ) + , ( "emoji", makeNullableEncoder Jenc.string x.emoji ) + , ( "name", Jenc.string x.name ) + , ( "resources", makeListEncoder encodeResource x.resources ) + ] + + +resource : Jdec.Decoder Resource +resource = + Jdec.map6 Resource + (Jdec.field "cons" (Jdec.list Jdec.string)) + (optionalField "description" Jdec.string) + (Jdec.field "name" Jdec.string) + (optionalField "price" price) + (Jdec.field "pros" (Jdec.list Jdec.string)) + (Jdec.field "url" Jdec.string) + + +encodeResource : Resource -> Jenc.Encoder +encodeResource x = + Jenc.record + [ ( "cons", makeListEncoder Jenc.string x.cons ) + , ( "description", makeNullableEncoder Jenc.string x.description ) + , ( "name", Jenc.string x.name ) + , ( "price", makeNullableEncoder encodePrice x.price ) + , ( "pros", makeListEncoder Jenc.string x.pros ) + , ( "url", Jenc.string x.url ) + ] + + +price : Jdec.Decoder Price +price = + Jdec.oneOf + [ Jdec.map StringInPrice Jdec.string + , Jdec.map DoubleInPrice Jdec.float + ] + + +optionalField : String -> Jdec.Decoder a -> Jdec.Decoder (Maybe a) +optionalField name decoder = + Jdec.oneOf + [ Jdec.field name (Jdec.nullable decoder) + , Jdec.succeed Nothing + ] + + +encodePrice : Price -> Jenc.Encoder +encodePrice x = + case x of + StringInPrice y -> + Jenc.string y + + DoubleInPrice y -> + Jenc.float y + + + +--- encoder helpers + + +makeListEncoder : (a -> Jenc.Encoder) -> List a -> Jenc.Encoder +makeListEncoder f arr = + Jenc.list f arr + + +makeNullableEncoder : (a -> Jenc.Encoder) -> Maybe a -> Jenc.Encoder +makeNullableEncoder f m = + case m of + Just x -> + f x + + Nothing -> + Jenc.null diff --git a/src/Pages/Home_.elm b/src/Pages/Home_.elm index 5e48ca2..ed70814 100644 --- a/src/Pages/Home_.elm +++ b/src/Pages/Home_.elm @@ -28,8 +28,6 @@ page = , Tw.rounded_md , Tw.text_color Tw.white , Tw.bg_color Tw.indigo_600 - - -- We can use hover styles via elm-css :) , Css.hover [ Tw.bg_color Tw.indigo_700 ] ] ] diff --git a/src/Pages/Learning.elm b/src/Pages/Learning.elm new file mode 100644 index 0000000..6d33cda --- /dev/null +++ b/src/Pages/Learning.elm @@ -0,0 +1,84 @@ +module Pages.Learning exposing (Model, Msg, page) + +import Api +import Effect exposing (Effect) +import Html.Styled as Html +import Html.Styled.Attributes as Attr +import LearningResources +import Page exposing (Page) +import Route exposing (Route) +import Shared +import Shared.Model as SharedModel +import View exposing (View) +import Route.Path + +page : Shared.Model -> Route () -> Page Model Msg +page shared _ = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view shared + } + + +type alias Model = + {} + + +type Msg + = NoOp + + +init : () -> ( Model, Effect Msg ) +init _ = + ( {} + , Effect.none + ) + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + +subscriptions : Model -> Sub Msg +subscriptions _ = + Sub.none + + +view : Shared.Model -> Model -> View Msg +view shared _ = + { title = "Learning" + , body = + case shared.learningIndex of + SharedModel.Loading -> + [ Html.text "Loading learning resources..." ] + + SharedModel.Failure error -> + [ Html.text "Failed to load learning resources :(" + , Html.div [] [ Html.text (Api.toUserFriendlyMessage error) ] + ] + + SharedModel.Success entries -> + [ Html.div + [ Attr.class "learning-cards" ] + (List.map viewCard entries) + ] + } + + +viewCard : LearningResources.ResourceIndexEntry -> Html.Html msg +viewCard entry = + Html.article + [ Attr.class "learning-card" ] + [ Html.h3 [] [ Html.text entry.name ] + , Html.a [ + Route.Path.href ( Route.Path.Learning_Resource_ { resource = entry.name }) + |> Attr.fromUnstyled + ] [ Html.text "Click to browse resources" ] + ] diff --git a/src/Pages/Learning/Resource_.elm b/src/Pages/Learning/Resource_.elm new file mode 100644 index 0000000..956701f --- /dev/null +++ b/src/Pages/Learning/Resource_.elm @@ -0,0 +1,68 @@ +module Pages.Learning.Resource_ exposing (Model, Msg, page) + +import Effect exposing (Effect) +import Route exposing (Route) +import Html +import Page exposing (Page) +import Shared +import View exposing (View) + + +page : Shared.Model -> Route { resource : String } -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view + } + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.none + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Shared.Model -> Model -> View Msg +view shared model = + View.fromString "Pages.Learning.Resource_" diff --git a/src/Shared.elm b/src/Shared.elm new file mode 100644 index 0000000..798a34f --- /dev/null +++ b/src/Shared.elm @@ -0,0 +1,91 @@ +module Shared exposing + ( Flags, decoder + , Model, Msg + , init, update, subscriptions + ) + +{-| + +@docs Flags, decoder +@docs Model, Msg +@docs init, update, subscriptions + +-} + +import Api +import Effect exposing (Effect) +import Json.Decode +import Route exposing (Route) +import Shared.Model +import Shared.Msg + + + +-- FLAGS + + +type alias Flags = + {} + + +decoder : Json.Decode.Decoder Flags +decoder = + Json.Decode.succeed {} + + + +-- INIT + + +type alias Model = + Shared.Model.Model + + +init : Result Json.Decode.Error Flags -> Route () -> ( Model, Effect Msg ) +init _ _ = + ( { learningIndex = Shared.Model.Loading } + , Api.getLearningResourcesIndex + { onResponse = Shared.Msg.LearningIndexResponded } + ) + + + +-- UPDATE + + +type alias Msg = + Shared.Msg.Msg + + +update : Route () -> Msg -> Model -> ( Model, Effect Msg ) +update _ msg model = + case msg of + Shared.Msg.LearningIndexResponded (Ok entries) -> + ( { model | learningIndex = Shared.Model.Success entries } + , Effect.none + ) + + Shared.Msg.LearningIndexResponded (Err error) -> + ( { model | learningIndex = Shared.Model.Failure error } + , Effect.none + ) + + Shared.Msg.RetryLearningIndex -> + ( { model | learningIndex = Shared.Model.Loading } + , Api.getLearningResourcesIndex + { onResponse = Shared.Msg.LearningIndexResponded } + ) + + Shared.Msg.NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Route () -> Model -> Sub Msg +subscriptions _ _ = + Sub.none diff --git a/src/Shared/Model.elm b/src/Shared/Model.elm new file mode 100644 index 0000000..ec3ef13 --- /dev/null +++ b/src/Shared/Model.elm @@ -0,0 +1,24 @@ +module Shared.Model exposing (LearningIndexStatus(..), Model) + +{-| -} + +import Http +import LearningResources + + +{-| Normally, this value would live in "Shared.elm" +but that would lead to a circular dependency import cycle. + +For that reason, both `Shared.Model` and `Shared.Msg` are in their +own file, so they can be imported by `Effect.elm` + +-} +type LearningIndexStatus + = Loading + | Success (List LearningResources.ResourceIndexEntry) + | Failure Http.Error + + +type alias Model = + { learningIndex : LearningIndexStatus + } diff --git a/src/Shared/Msg.elm b/src/Shared/Msg.elm new file mode 100644 index 0000000..7c5fa99 --- /dev/null +++ b/src/Shared/Msg.elm @@ -0,0 +1,19 @@ +module Shared.Msg exposing (Msg(..)) + +{-| -} + +import Http +import LearningResources + + +{-| Normally, this value would live in "Shared.elm" +but that would lead to a circular dependency import cycle. + +For that reason, both `Shared.Model` and `Shared.Msg` are in their +own file, so they can be imported by `Effect.elm` + +-} +type Msg + = LearningIndexResponded (Result Http.Error (List LearningResources.ResourceIndexEntry)) + | RetryLearningIndex + | NoOp diff --git a/tests/LearningResourcesTest.elm b/tests/LearningResourcesTest.elm new file mode 100644 index 0000000..b89dc8e --- /dev/null +++ b/tests/LearningResourcesTest.elm @@ -0,0 +1,122 @@ +module LearningResourcesTest exposing (all) + +import Expect +import LearningResources exposing (..) +import Test exposing (Test, describe, test) +import Yaml.Decode + + +yamlString : String +yamlString = + """name: Java +description: Java is an Object Oriented language designed by James Gosling in 1995 +emoji: '821822045187866625' +resources: +- name: Tutorial Spot + url: https://www.tutorialspoint.com/java/index.htm + pros: [ ] + cons: + - Slightly dated +- name: Alex Lee + url: https://www.youtube.com/channel/UC_fFL5jgoCOrwAVoM_fBYwA + pros: + - Video series + - Covers a wide range of concepts + cons: [ ] +- name: Bro Code + url: https://www.youtube.com/c/BroCodez + pros: + - Video series + - Has videos on many different languages and concepts + cons: [ ] +- name: Javatpoint + url: https://www.javatpoint.com/java-tutorial + pros: [ ] + cons: [ ] +- name: Mooc.fi + description: Comprehensive Java (and general programming) course provided by the University of Helsinki + url: https://java-programming.mooc.fi/ + pros: + - Very well respected + cons: [ ] +- name: TheNewBoston + url: https://www.youtube.com/@thenewboston + pros: + - Beginner and intermediate video series + - Short, but a lot of videos (146 videos combined in both playlists) + cons: + - Videos may be outdated (2009 - 2012)""" + + +all : Test +all = + describe "LearningResources" + [ test "decodes java.yaml successfully" <| + \_ -> + case Yaml.Decode.fromString coordinate yamlString of + Ok result -> + Expect.all + [ \r -> Expect.equal "Java" r.name + , \r -> Expect.equal (Just "821822045187866625") r.emoji + , \r -> Expect.equal 6 (List.length r.resources) + ] + result + + Err err -> + Expect.fail ("Decode failed: " ++ Yaml.Decode.errorToString err) + , test "decodes resource with optional description" <| + \_ -> + case Yaml.Decode.fromString coordinate yamlString of + Ok result -> + let + mooc = + List.filter (\r -> r.name == "Mooc.fi") result.resources + |> List.head + in + case mooc of + Just resource -> + Expect.equal + (Just "Comprehensive Java (and general programming) course provided by the University of Helsinki") + resource.description + + Nothing -> + Expect.fail "Could not find Mooc.fi resource" + + Err err -> + Expect.fail ("Decode failed: " ++ Yaml.Decode.errorToString err) + , test "decodes resource without description as Nothing" <| + \_ -> + case Yaml.Decode.fromString coordinate yamlString of + Ok result -> + let + tutorial = + List.filter (\r -> r.name == "Tutorial Spot") result.resources + |> List.head + in + case tutorial of + Just resource -> + Expect.equal Nothing resource.description + + Nothing -> + Expect.fail "Could not find Tutorial Spot resource" + + Err err -> + Expect.fail ("Decode failed: " ++ Yaml.Decode.errorToString err) + , test "round-trips through encode and decode" <| + \_ -> + case Yaml.Decode.fromString coordinate yamlString of + Ok original -> + let + encoded = + coordinateToString original + in + case Yaml.Decode.fromString coordinate encoded of + Ok roundTripped -> + Expect.equal original.name roundTripped.name + + Err err -> + Expect.fail ("Round-trip decode failed: " ++ Yaml.Decode.errorToString err) + + Err err -> + Expect.fail ("Initial decode failed: " ++ Yaml.Decode.errorToString err) + ] From 51ef3b76d486eb1d8188dd6de4148dc6a28c7432 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sun, 10 May 2026 13:42:34 +0100 Subject: [PATCH 10/48] feat: render LRs basically! --- src/Api.elm | 41 +++++++++++++++ src/Pages/Learning/Resource_.elm | 87 ++++++++++++++++++++++++++------ src/Shared.elm | 8 ++- src/Shared/Model.elm | 18 ++++++- src/Shared/Msg.elm | 1 + 5 files changed, 137 insertions(+), 18 deletions(-) diff --git a/src/Api.elm b/src/Api.elm index 22fd179..bd15c7a 100644 --- a/src/Api.elm +++ b/src/Api.elm @@ -4,6 +4,7 @@ import Effect exposing (Effect) import Http import Json.Decode as Json import LearningResources +import Yaml.Decode type Data value @@ -23,6 +24,46 @@ getLearningResourcesIndex { onResponse } = } +getLearningResource : + { name : String + , onResponse : Result Http.Error LearningResources.LearningResourcesSet -> msg + } + -> Effect msg +getLearningResource { name, onResponse } = + Effect.sendCmd <| + Http.get + { url = "https://learningresources.developerden.org/" ++ name + , expect = + expectYaml onResponse LearningResources.learningResourcesSet + } + +expectYaml : (Result Http.Error a -> msg) -> Yaml.Decode.Decoder a -> Http.Expect msg +expectYaml toMsg decoder = + Http.expectStringResponse toMsg <| resolve decoder + +resolve decoder = \response -> + case response of + Http.BadUrl_ url -> + Err (Http.BadUrl url) + + Http.Timeout_ -> + Err Http.Timeout + + Http.NetworkError_ -> + Err Http.NetworkError + + Http.BadStatus_ metadata body -> + Err (Http.BadStatus metadata.statusCode) + + Http.GoodStatus_ metadata body -> + case Yaml.Decode.fromString decoder body of + Ok value -> + Ok value + + Err err -> + Err (Http.BadBody (Yaml.Decode.errorToString err)) + + resourceIndexDecoder : Json.Decoder (List LearningResources.ResourceIndexEntry) resourceIndexDecoder = Json.list diff --git a/src/Pages/Learning/Resource_.elm b/src/Pages/Learning/Resource_.elm index 956701f..1d5eb93 100644 --- a/src/Pages/Learning/Resource_.elm +++ b/src/Pages/Learning/Resource_.elm @@ -1,20 +1,26 @@ module Pages.Learning.Resource_ exposing (Model, Msg, page) +import Api +import Dict import Effect exposing (Effect) -import Route exposing (Route) -import Html +import Html.Styled as Html +import Http +import LearningResources import Page exposing (Page) +import Route exposing (Route) import Shared +import Shared.Model as SharedModel +import Shared.Msg import View exposing (View) page : Shared.Model -> Route { resource : String } -> Page Model Msg page shared route = Page.new - { init = init + { init = \() -> init shared route.params , update = update , subscriptions = subscriptions - , view = view + , view = view shared route.params } @@ -23,14 +29,37 @@ page shared route = type alias Model = - {} + { resourceInfo : ResourceInfo } + + +type ResourceInfo + = NotFound + | Loading + | Found LearningResources.LearningResourcesSet + + +init : Shared.Model -> { resource : String } -> ( Model, Effect Msg ) +init model route = + case Dict.get route.resource model.learningResources of + Nothing -> + ( { resourceInfo = Loading } + , Api.getLearningResource { name = route.resource, onResponse = LearningResourceResponded } + ) + Just info -> + ( { resourceInfo = sharedResourceInfoToResourceInfo info } + , Effect.none + ) + + +sharedResourceInfoToResourceInfo : SharedModel.ResourceInfo -> ResourceInfo +sharedResourceInfoToResourceInfo model = + case model of + SharedModel.NotFound -> + NotFound -init : () -> ( Model, Effect Msg ) -init () = - ( {} - , Effect.none - ) + SharedModel.Found resourcesSet -> + Found resourcesSet @@ -38,14 +67,19 @@ init () = type Msg - = NoOp + = LearningResourceResponded (Result Http.Error LearningResources.LearningResourcesSet) update : Msg -> Model -> ( Model, Effect Msg ) update msg model = case msg of - NoOp -> - ( model + LearningResourceResponded (Ok resourcesSet) -> + ( { model | resourceInfo = Found resourcesSet } + , Effect.none + ) + + LearningResourceResponded (Err _) -> + ( { model | resourceInfo = NotFound } , Effect.none ) @@ -63,6 +97,27 @@ subscriptions model = -- VIEW -view : Shared.Model -> Model -> View Msg -view shared model = - View.fromString "Pages.Learning.Resource_" +view : Shared.Model -> { resource : String } -> Model -> View Msg +view shared route model = + case model.resourceInfo of + Loading -> + { title = "Loading resource..." + , body = + [ Html.text "Loading learning resource..." ] + } + + NotFound -> + { title = "Resource not found" + , body = + [ Html.text "The requested learning resource could not be found." ] + } + + Found resourcesSet -> + { title = "pee" + , body = + [ Html.div [] + [ Html.text resourcesSet.name + , Html.text resourcesSet.description + ] + ] + } diff --git a/src/Shared.elm b/src/Shared.elm index 798a34f..54796c1 100644 --- a/src/Shared.elm +++ b/src/Shared.elm @@ -18,6 +18,7 @@ import Json.Decode import Route exposing (Route) import Shared.Model import Shared.Msg +import Dict @@ -43,7 +44,7 @@ type alias Model = init : Result Json.Decode.Error Flags -> Route () -> ( Model, Effect Msg ) init _ _ = - ( { learningIndex = Shared.Model.Loading } + ( { learningIndex = Shared.Model.Loading, learningResources = Dict.empty } , Api.getLearningResourcesIndex { onResponse = Shared.Msg.LearningIndexResponded } ) @@ -70,6 +71,11 @@ update _ msg model = , Effect.none ) + Shared.Msg.CacheLearningResource (resource, resourcesSet) -> + ( { model | learningResources = (Dict.insert resource (Shared.Model.Found resourcesSet) model.learningResources) } + , Effect.none + ) + Shared.Msg.RetryLearningIndex -> ( { model | learningIndex = Shared.Model.Loading } , Api.getLearningResourcesIndex diff --git a/src/Shared/Model.elm b/src/Shared/Model.elm index ec3ef13..8cd247a 100644 --- a/src/Shared/Model.elm +++ b/src/Shared/Model.elm @@ -1,7 +1,13 @@ -module Shared.Model exposing (LearningIndexStatus(..), Model) +module Shared.Model exposing + ( LearningIndexStatus(..) + , LearningResourcesData + , ResourceInfo(..) + , Model + ) {-| -} +import Dict exposing (Dict) import Http import LearningResources @@ -19,6 +25,16 @@ type LearningIndexStatus | Failure Http.Error +type alias LearningResourcesData + = (Dict String ResourceInfo) + + +type ResourceInfo + = NotFound + | Found LearningResources.LearningResourcesSet + + type alias Model = { learningIndex : LearningIndexStatus + , learningResources : LearningResourcesData } diff --git a/src/Shared/Msg.elm b/src/Shared/Msg.elm index 7c5fa99..d9035da 100644 --- a/src/Shared/Msg.elm +++ b/src/Shared/Msg.elm @@ -15,5 +15,6 @@ own file, so they can be imported by `Effect.elm` -} type Msg = LearningIndexResponded (Result Http.Error (List LearningResources.ResourceIndexEntry)) + | CacheLearningResource (String, LearningResources.LearningResourcesSet) | RetryLearningIndex | NoOp From 7f477eccd6b6aaba1c30148304088d31cfa16fd4 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sun, 10 May 2026 13:50:03 +0100 Subject: [PATCH 11/48] fix: learning resource caching --- src/Effect.elm | 218 +++++++++++++++++++++++++++++++ src/Pages/Learning/Resource_.elm | 10 +- 2 files changed, 223 insertions(+), 5 deletions(-) create mode 100644 src/Effect.elm diff --git a/src/Effect.elm b/src/Effect.elm new file mode 100644 index 0000000..63f0cad --- /dev/null +++ b/src/Effect.elm @@ -0,0 +1,218 @@ +module Effect exposing + ( Effect + , none, batch + , sendCmd, sendMsg + , pushRoute, replaceRoute + , pushRoutePath, replaceRoutePath + , loadExternalUrl, back + , map, toCmd + , sendSharedMsg + ) + +{-| + +@docs Effect + +@docs none, batch +@docs sendCmd, sendMsg + +@docs pushRoute, replaceRoute +@docs pushRoutePath, replaceRoutePath +@docs loadExternalUrl, back + +@docs map, toCmd + +-} + +import Browser.Navigation +import Dict exposing (Dict) +import Route exposing (Route) +import Route.Path +import Shared.Model +import Shared.Msg +import Task +import Url exposing (Url) + + +type Effect msg + = -- BASICS + None + | Batch (List (Effect msg)) + | SendCmd (Cmd msg) + -- ROUTING + | PushUrl String + | ReplaceUrl String + | LoadExternalUrl String + | Back + -- SHARED + | SendSharedMsg Shared.Msg.Msg + + + +-- BASICS + + +{-| Don't send any effect. +-} +none : Effect msg +none = + None + + +{-| Send multiple effects at once. +-} +batch : List (Effect msg) -> Effect msg +batch = + Batch + + +{-| Send a normal `Cmd msg` as an effect, something like `Http.get` or `Random.generate`. +-} +sendCmd : Cmd msg -> Effect msg +sendCmd = + SendCmd + + +{-| Send a message as an effect. Useful when emitting events from UI components. +-} +sendMsg : msg -> Effect msg +sendMsg msg = + Task.succeed msg + |> Task.perform identity + |> SendCmd + + + +-- ROUTING + + +{-| Set the new route, and make the back button go back to the current route. +-} +pushRoute : + { path : Route.Path.Path + , query : Dict String String + , hash : Maybe String + } + -> Effect msg +pushRoute route = + PushUrl (Route.toString route) + + +{-| Same as `Effect.pushRoute`, but without `query` or `hash` support +-} +pushRoutePath : Route.Path.Path -> Effect msg +pushRoutePath path = + PushUrl (Route.Path.toString path) + + +{-| Set the new route, but replace the previous one, so clicking the back +button **won't** go back to the previous route. +-} +replaceRoute : + { path : Route.Path.Path + , query : Dict String String + , hash : Maybe String + } + -> Effect msg +replaceRoute route = + ReplaceUrl (Route.toString route) + + +{-| Same as `Effect.replaceRoute`, but without `query` or `hash` support +-} +replaceRoutePath : Route.Path.Path -> Effect msg +replaceRoutePath path = + ReplaceUrl (Route.Path.toString path) + + +{-| Redirect users to a new URL, somewhere external to your web application. +-} +loadExternalUrl : String -> Effect msg +loadExternalUrl = + LoadExternalUrl + + +{-| Navigate back one page +-} +back : Effect msg +back = + Back + + + +-- INTERNALS + + +{-| Elm Land depends on this function to connect pages and layouts +together into the overall app. +-} +map : (msg1 -> msg2) -> Effect msg1 -> Effect msg2 +map fn effect = + case effect of + None -> + None + + Batch list -> + Batch (List.map (map fn) list) + + SendCmd cmd -> + SendCmd (Cmd.map fn cmd) + + PushUrl url -> + PushUrl url + + ReplaceUrl url -> + ReplaceUrl url + + Back -> + Back + + LoadExternalUrl url -> + LoadExternalUrl url + + SendSharedMsg sharedMsg -> + SendSharedMsg sharedMsg + + +{-| Elm Land depends on this function to perform your effects. +-} +toCmd : + { key : Browser.Navigation.Key + , url : Url + , shared : Shared.Model.Model + , fromSharedMsg : Shared.Msg.Msg -> msg + , batch : List msg -> msg + , toCmd : msg -> Cmd msg + } + -> Effect msg + -> Cmd msg +toCmd options effect = + case effect of + None -> + Cmd.none + + Batch list -> + Cmd.batch (List.map (toCmd options) list) + + SendCmd cmd -> + cmd + + PushUrl url -> + Browser.Navigation.pushUrl options.key url + + ReplaceUrl url -> + Browser.Navigation.replaceUrl options.key url + + Back -> + Browser.Navigation.back options.key 1 + + LoadExternalUrl url -> + Browser.Navigation.load url + + SendSharedMsg sharedMsg -> + Task.succeed sharedMsg + |> Task.perform options.fromSharedMsg + +sendSharedMsg : Shared.Msg.Msg -> Effect msg +sendSharedMsg sharedMsg = + SendSharedMsg sharedMsg \ No newline at end of file diff --git a/src/Pages/Learning/Resource_.elm b/src/Pages/Learning/Resource_.elm index 1d5eb93..a2a930b 100644 --- a/src/Pages/Learning/Resource_.elm +++ b/src/Pages/Learning/Resource_.elm @@ -2,7 +2,7 @@ module Pages.Learning.Resource_ exposing (Model, Msg, page) import Api import Dict -import Effect exposing (Effect) +import Effect exposing (Effect, sendSharedMsg) import Html.Styled as Html import Http import LearningResources @@ -29,7 +29,7 @@ page shared route = type alias Model = - { resourceInfo : ResourceInfo } + { resourceInfo : ResourceInfo, resourceId : String } type ResourceInfo @@ -42,12 +42,12 @@ init : Shared.Model -> { resource : String } -> ( Model, Effect Msg ) init model route = case Dict.get route.resource model.learningResources of Nothing -> - ( { resourceInfo = Loading } + ( { resourceInfo = Loading, resourceId = route.resource } , Api.getLearningResource { name = route.resource, onResponse = LearningResourceResponded } ) Just info -> - ( { resourceInfo = sharedResourceInfoToResourceInfo info } + ( { resourceInfo = sharedResourceInfoToResourceInfo info, resourceId = route.resource } , Effect.none ) @@ -75,7 +75,7 @@ update msg model = case msg of LearningResourceResponded (Ok resourcesSet) -> ( { model | resourceInfo = Found resourcesSet } - , Effect.none + , Effect.sendSharedMsg (Shared.Msg.CacheLearningResource ( model.resourceId, resourcesSet )) ) LearningResourceResponded (Err _) -> From 2d8b1054041104dc8b1c6894f9fdc94311227bc8 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sun, 10 May 2026 16:44:08 +0100 Subject: [PATCH 12/48] feat: add colours, slightly nicer UI --- elm-land.json | 4 +- flake.nix | 2 +- src/Layouts/Global.elm | 89 ++++++++++++++++++++++ src/Layouts/LearningInfo.elm | 123 ------------------------------- src/Pages/Learning.elm | 80 +++++++++++++++++--- src/Pages/Learning/Resource_.elm | 2 + static/base.css | 22 ++++++ tailwind.config.ts | 19 +++++ 8 files changed, 205 insertions(+), 136 deletions(-) create mode 100644 src/Layouts/Global.elm delete mode 100644 src/Layouts/LearningInfo.elm create mode 100644 static/base.css create mode 100644 tailwind.config.ts diff --git a/elm-land.json b/elm-land.json index 3d9c0d7..010a8f1 100644 --- a/elm-land.json +++ b/elm-land.json @@ -16,7 +16,9 @@ { "http-equiv": "X-UA-Compatible", "content": "IE=edge" }, { "name": "viewport", "content": "width=device-width, initial-scale=1.0" } ], - "link": [], + "link": [ + { "rel": "stylesheet", "href": "/base.css" } + ], "script": [] }, "router": { diff --git a/flake.nix b/flake.nix index 4782a13..04050d4 100644 --- a/flake.nix +++ b/flake.nix @@ -45,7 +45,7 @@ ]; shellHook = '' - alias tw="bunx elm-tailwind-modules --dir ./gen" + alias tw="bunx elm-tailwind-modules --dir ./gen --tailwind-config tailwind.config.ts" alias spa-server="bunx elm-land server" echo "Dev shell active." diff --git a/src/Layouts/Global.elm b/src/Layouts/Global.elm new file mode 100644 index 0000000..9630517 --- /dev/null +++ b/src/Layouts/Global.elm @@ -0,0 +1,89 @@ +module Layouts.Global exposing (Model, Msg, Props, layout) + +import Effect exposing (Effect) +import Html.Styled as Html +import Html.Styled.Attributes as Attr +import Layout exposing (Layout) +import Route exposing (Route) +import Shared +import Tailwind.Theme as Tw +import Tailwind.Utilities as Tw +import View exposing (View) + + +type alias Props = + {} + + +layout : Props -> Shared.Model -> Route () -> Layout () Model Msg contentMsg +layout props shared route = + Layout.new + { init = init + , update = update + , view = view + , subscriptions = subscriptions + } + + + +-- MODEL + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init _ = + ( {} + , Effect.none + ) + + + +-- UPDATE + + +type Msg + = ReplaceMe + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + ReplaceMe -> + ( model + , Effect.none + ) + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : { toContentMsg : Msg -> contentMsg, content : View contentMsg, model : Model } -> View contentMsg +view { toContentMsg, model, content } = + { title = content.title ++ " | Developer Den" + , body = + [ Html.div + [ Attr.class "page" + , Attr.css + [ Tw.min_h_screen + , Tw.w_full + , Tw.bg_color Tw.dd_deepblue + , Tw.text_color Tw.white + , Tw.font_sans + , Tw.antialiased + ] + ] + [ Html.div + [ Attr.css [ Tw.max_w_7xl, Tw.mx_auto, Tw.px_8, Tw.py_12 ] ] + content.body + ] + ] + } diff --git a/src/Layouts/LearningInfo.elm b/src/Layouts/LearningInfo.elm deleted file mode 100644 index 408ddb8..0000000 --- a/src/Layouts/LearningInfo.elm +++ /dev/null @@ -1,123 +0,0 @@ -module Layouts.LearningInfo exposing (LearningInfoMode(..), Model, Msg, Props, layout) - -import Api -import Effect exposing (Effect) -import Html.Styled as Html -import Html.Styled.Attributes as Attr -import Layout exposing (Layout) -import LearningResources -import Route exposing (Route) -import Shared -import Shared.Model as SharedModel -import View exposing (View) - - -type alias Props = - { mode : LearningInfoMode } - - -type LearningInfoMode - = CardsMode -- ^ Show the index of learning resources as cards - | SidebarMode -- ^ Show the index as a sidebar - - -layout : Props -> Shared.Model -> Route () -> Layout () Model Msg contentMsg -layout props shared _ = - Layout.new - { init = init - , update = update - , view = view props shared - , subscriptions = subscriptions - } - - - --- MODEL - - -type alias Model = - {} - - -init : () -> ( Model, Effect Msg ) -init _ = - ( {} - , Effect.none - ) - - - --- UPDATE - - -type Msg - = NoOp - - -update : Msg -> Model -> ( Model, Effect Msg ) -update msg model = - case msg of - NoOp -> - ( model - , Effect.none - ) - - -subscriptions : Model -> Sub Msg -subscriptions _ = - Sub.none - - - --- VIEW - - -view : Props -> Shared.Model -> { toContentMsg : Msg -> contentMsg, content : View contentMsg, model : Model } -> View contentMsg -view props shared { content } = - { title = content.title - , body = - case shared.learningIndex of - SharedModel.Loading -> - [ Html.text "Loading learning resources..." ] - - SharedModel.Failure error -> - [ Html.text "Failed to load learning resources :(" - , Html.div [] [ Html.text (Api.toUserFriendlyMessage error) ] - ] - - SharedModel.Success entries -> - case props.mode of - CardsMode -> - [ Html.div - [ Attr.class "learning-cards" ] - (List.map viewCard entries) - ] - - SidebarMode -> - [ Html.div - [ Attr.class "learning-layout" ] - [ Html.aside - [ Attr.class "learning-sidebar" ] - [ Html.h3 [] [ Html.text "Languages" ] - , Html.ul [] (List.map viewSidebarItem entries) - ] - , Html.main_ - [ Attr.class "learning-content" ] - content.body - ] - ] - } - - -viewCard : LearningResources.ResourceIndexEntry -> Html.Html msg -viewCard entry = - Html.article - [ Attr.class "learning-card" ] - [ Html.h3 [] [ Html.text entry.name ] - , Html.p [] [ Html.text "Click to browse resources" ] - ] - - -viewSidebarItem : LearningResources.ResourceIndexEntry -> Html.Html msg -viewSidebarItem entry = - Html.li [] [ Html.text entry.name ] diff --git a/src/Pages/Learning.elm b/src/Pages/Learning.elm index 6d33cda..0369603 100644 --- a/src/Pages/Learning.elm +++ b/src/Pages/Learning.elm @@ -4,13 +4,18 @@ import Api import Effect exposing (Effect) import Html.Styled as Html import Html.Styled.Attributes as Attr +import Layouts import LearningResources import Page exposing (Page) import Route exposing (Route) +import Route.Path import Shared import Shared.Model as SharedModel +import Tailwind.Breakpoints as Breakpoints +import Tailwind.Theme as Tw +import Tailwind.Utilities as Tw import View exposing (View) -import Route.Path + page : Shared.Model -> Route () -> Page Model Msg page shared _ = @@ -20,6 +25,7 @@ page shared _ = , subscriptions = subscriptions , view = view shared } + |> Page.withLayout Layouts.Global type alias Model = @@ -65,20 +71,72 @@ view shared _ = ] SharedModel.Success entries -> - [ Html.div - [ Attr.class "learning-cards" ] - (List.map viewCard entries) + [ Html.div [] + [ Html.h1 [] [ Html.text "Learning Resources" ] + , Html.div + [ Attr.class "learning-cards" ] + (List.map viewCard entries) + ] ] } + +viewCardGrid = + Html.div + [ Attr.css + [ Tw.grid + , Tw.grid_cols_1 + , Tw.md__grid_cols_3 -- 3 columns on desktop + , Tw.gap_8 + , Tw.mt_12 + ] + ] + [ viewCard "Web Frontend" + , viewCard "Backend" + , viewCard "Systems" + ] + +viewCard : String -> Html msg +viewCard title = + div + [ css + [ Tw.flex + , Tw.flex_col + , Tw.rounded_xl + , Tw.overflow_hidden + , Tw.border + , Tw.border_slate_700 + ] + ] + [ -- Top white half + div [ css [ Tw.bg_white, Tw.h_32, Tw.w_full ] ] [] + -- Bottom dark half + , div [ css [ Tw.bg_slate_800, Tw.p_4, Tw.flex_grow ] ] + [ Html.h3 [ css [ Tw.font_bold, Tw.text_lg, Tw.mb_2 ] ] [ text title ] + , Html.p [ css [ Tw.text_xs, Tw.text_gray_400 ] ] + [ text "This is the front-end website that you are viewing right now..." ] + ] + ] + viewCard : LearningResources.ResourceIndexEntry -> Html.Html msg viewCard entry = - Html.article - [ Attr.class "learning-card" ] - [ Html.h3 [] [ Html.text entry.name ] - , Html.a [ - Route.Path.href ( Route.Path.Learning_Resource_ { resource = entry.name }) - |> Attr.fromUnstyled - ] [ Html.text "Click to browse resources" ] + Html.div + [ Attr.css + [ Tw.bg_color Tw.dd_deepblue + , Tw.text_color Tw.white + , Tw.border + , Tw.rounded_xl + , Tw.p_6 + ] + ] + [ Html.article + [ Attr.class "learning-card" ] + [ Html.h3 [] [ Html.text entry.name ] + , Html.a + [ Route.Path.href (Route.Path.Learning_Resource_ { resource = entry.name }) + |> Attr.fromUnstyled + ] + [ Html.text "Click to browse resources" ] + ] ] diff --git a/src/Pages/Learning/Resource_.elm b/src/Pages/Learning/Resource_.elm index a2a930b..b605825 100644 --- a/src/Pages/Learning/Resource_.elm +++ b/src/Pages/Learning/Resource_.elm @@ -5,6 +5,7 @@ import Dict import Effect exposing (Effect, sendSharedMsg) import Html.Styled as Html import Http +import Layouts import LearningResources import Page exposing (Page) import Route exposing (Route) @@ -22,6 +23,7 @@ page shared route = , subscriptions = subscriptions , view = view shared route.params } + |> Page.withLayout (\_ -> Layouts.Global {}) diff --git a/static/base.css b/static/base.css new file mode 100644 index 0000000..0ca377e --- /dev/null +++ b/static/base.css @@ -0,0 +1,22 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --color-den-deepblue: #171834; + --color-den-teal: #00AFC3; + --color-den-pink: #FF52F9; + --color-den-indigo: #8099FF; +} + +.theme-light { + --color-den-deepblue: #474A9F; + --color-den-teal: #007684; + --color-den-pink: #BF00B9; + --color-den-indigo: #005FF1; +} + +body { + background-color: var(--color-den-bg); + color: var(--color-den-text); +} \ No newline at end of file diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..89b8294 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,19 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.elm"], + theme: { + extend: { + colors: { + dd: { + deepblue: 'var(--color-den-deepblue)', + teal: 'var(--color-den-teal)', + pink: 'var(--color-den-pink)', + indigo: 'var(--color-den-indigo)', + } + } + }, + }, + variants: [], + plugins: [], +} + From b8d70ed49b79d9623e879191299905ada9d1a805 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Tue, 12 May 2026 12:27:34 +0100 Subject: [PATCH 13/48] feat: make schema to elm generation actually work --- bun.lock | 205 +++++++++++++ elm.json | 3 +- generate-elm-types.ts | 33 ++ package.json | 5 +- src/LearningResources.elm | 176 ----------- src/LearningResources/Json.elm | 513 ++++++++++++++++++++++++++++++++ src/LearningResources/Types.elm | 294 ++++++++++++++++++ src/OpenApi/Common.elm | 388 ++++++++++++++++++++++++ tsconfig.json | 30 ++ 9 files changed, 1469 insertions(+), 178 deletions(-) create mode 100644 generate-elm-types.ts delete mode 100644 src/LearningResources.elm create mode 100644 src/LearningResources/Json.elm create mode 100644 src/LearningResources/Types.elm create mode 100644 src/OpenApi/Common.elm create mode 100644 tsconfig.json diff --git a/bun.lock b/bun.lock index fc77e25..a2301d9 100644 --- a/bun.lock +++ b/bun.lock @@ -13,6 +13,9 @@ "devDependencies": { "@types/bun": "latest", "elm-land": "^0.20.1", + "elm-open-api": "^0.7.0", + "quicktype": "^23.2.6", + "quicktype-core": "^23.2.6", }, "peerDependencies": { "typescript": "^5", @@ -22,6 +25,8 @@ "packages": { "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], + "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], + "@elm_binaries/darwin_arm64": ["@elm_binaries/darwin_arm64@0.19.1-0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mjbsH7BNHEAmoE2SCJFcfk5fIHwFIpxtSgnEAqMsVLpBUFoEtAeX+LQ+N0vSFJB3WAh73+QYx/xSluxxLcL6dA=="], "@elm_binaries/darwin_x64": ["@elm_binaries/darwin_x64@0.19.1-0", "", { "os": "darwin", "cpu": "x64" }, "sha512-QGUtrZTPBzaxgi9al6nr+9313wrnUVHuijzUK39UsPS+pa+n6CmWyV/69sHZeX9qy6UfeugE0PzF3qcUiy2GDQ=="], @@ -76,6 +81,8 @@ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.20.2", "", { "os": "win32", "cpu": "x64" }, "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ=="], + "@glideapps/ts-necessities": ["@glideapps/ts-necessities@2.4.0", "", {}, "sha512-mDC+qosuNa4lxR3ioMBb6CD0XLRsQBplU+zRPUYiMLXKeVPZ6UYphdNG/EGReig0YyfnVlBKZEXl1wzTotYmPA=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], @@ -102,6 +109,8 @@ "@lydell/elm_win32_x64": ["@lydell/elm_win32_x64@0.19.1-1", "", { "os": "win32", "cpu": "x64" }, "sha512-3LMiJ+uUxDFLNnCd6HBmvVWSjSWjs/Z9dMXZWCMOcw3vrW9iOkRrsNGNxohRXun2YRd8wXOX8/DwVn8i2SJ3KA=="], + "@mark.probst/typescript-json-schema": ["@mark.probst/typescript-json-schema@0.55.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "@types/node": "^16.9.2", "glob": "^7.1.7", "path-equal": "^1.1.2", "safe-stable-stringify": "^2.2.0", "ts-node": "^10.9.1", "typescript": "4.9.4", "yargs": "^17.1.1" }, "bin": { "typescript-json-schema": "bin/typescript-json-schema" } }, "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ=="], + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], @@ -188,14 +197,30 @@ "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.0", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "postcss": "^8.5.10", "tailwindcss": "4.3.0" } }, "sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w=="], + "@tsconfig/node10": ["@tsconfig/node10@1.0.12", "", {}, "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ=="], + + "@tsconfig/node12": ["@tsconfig/node12@1.0.11", "", {}, "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="], + + "@tsconfig/node14": ["@tsconfig/node14@1.0.3", "", {}, "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="], + + "@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="], + "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + "acorn-walk": ["acorn-walk@8.3.5", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], @@ -204,16 +229,28 @@ "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], + "array-back": ["array-back@3.1.0", "", {}, "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q=="], + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + "brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + "browser-or-node": ["browser-or-node@3.0.0", "", {}, "sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ=="], + + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], @@ -228,14 +265,30 @@ "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "chalk-template": ["chalk-template@0.4.0", "", { "dependencies": { "chalk": "^4.1.2" } }, "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg=="], + "chokidar": ["chokidar@3.5.3", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="], + "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=="], + + "collection-utils": ["collection-utils@1.0.1", "", {}, "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg=="], + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "command-line-args": ["command-line-args@5.2.1", "", { "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", "lodash.camelcase": "^4.3.0", "typical": "^4.0.0" } }, "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg=="], + + "command-line-usage": ["command-line-usage@7.0.4", "", { "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", "table-layout": "^4.1.1", "typical": "^7.3.0" } }, "sha512-85UdvzTNx/+s5CkSgBm/0hzP80RFHAa7PsfeADE5ezZF3uHz3/Tqj9gIKGT9PTtpycc3Ua64T0oVulGfKxzfqg=="], + "commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="], + + "cross-fetch": ["cross-fetch@4.1.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw=="], + "cross-spawn": ["cross-spawn@7.0.3", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="], "css-what": ["css-what@5.1.0", "", {}, "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw=="], @@ -252,6 +305,8 @@ "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], + "diff": ["diff@4.0.4", "", {}, "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ=="], + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], @@ -260,8 +315,12 @@ "elm-land": ["elm-land@0.20.1", "", { "dependencies": { "@lydell/elm": "0.19.1-14", "chokidar": "3.5.3", "terser": "5.15.1", "typescript": "4.9.3", "vite": "5.2.8", "vite-plugin-elm-watch": "1.3.3" }, "bin": { "elm-land": "src/index.js" } }, "sha512-AY8BxYNT7mblaIO9SS2YQPdskZdMsLL6fqjAA5bORdkGIRDkMeaw+rXgiVSHUM2+TK0k/ld0TdQEAd24Moi5nw=="], + "elm-open-api": ["elm-open-api@0.7.0", "", { "bin": { "elm-open-api": "dist/elm-open-api.js" } }, "sha512-cp5/XHmSRz37ORgZDoaiXixb1vlZCZg+O9zi79qoHJXYm2NtWtmcOWhdnAexgX7gcrUvAWlZvckiwYHGXY5j3A=="], + "elm-tailwind-modules": ["elm-tailwind-modules@0.5.0", "", { "dependencies": { "chalk": "^4.1.1", "color-name": "^1.1.4", "commander": "^7.2.0", "css-what": "^5.0.0", "deep-equal": "^2.0.3", "fs-extra": "^9.1.0", "lodash": "^4.17.21", "rollup": "^2.45.2", "tslib": "^2.2.0" }, "peerDependencies": { "postcss": "^8.2.4", "tailwindcss": "^2.0.2 || ^3.1.6" }, "bin": { "elm-tailwind-modules": "dist/cli.js" } }, "sha512-Ad03E6lZwB2Fa+OoLTSzlRKOIzO+T5jTgTOHl53WREmNZPxcaJ+1acwdM/7RJrTkTfvoXi241pdfzzOBQX5r2A=="], + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "enhanced-resolve": ["enhanced-resolve@5.21.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-xe9vQb5kReirPUxgQrXA3ihgbCqssmTiM7cOZ+Gzu+VeGWgpV98lLZvp0dl4yriyAePcewxGUs9UpKD8PET9KQ=="], "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], @@ -274,6 +333,12 @@ "esbuild": ["esbuild@0.20.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.20.2", "@esbuild/android-arm": "0.20.2", "@esbuild/android-arm64": "0.20.2", "@esbuild/android-x64": "0.20.2", "@esbuild/darwin-arm64": "0.20.2", "@esbuild/darwin-x64": "0.20.2", "@esbuild/freebsd-arm64": "0.20.2", "@esbuild/freebsd-x64": "0.20.2", "@esbuild/linux-arm": "0.20.2", "@esbuild/linux-arm64": "0.20.2", "@esbuild/linux-ia32": "0.20.2", "@esbuild/linux-loong64": "0.20.2", "@esbuild/linux-mips64el": "0.20.2", "@esbuild/linux-ppc64": "0.20.2", "@esbuild/linux-riscv64": "0.20.2", "@esbuild/linux-s390x": "0.20.2", "@esbuild/linux-x64": "0.20.2", "@esbuild/netbsd-x64": "0.20.2", "@esbuild/openbsd-x64": "0.20.2", "@esbuild/sunos-x64": "0.20.2", "@esbuild/win32-arm64": "0.20.2", "@esbuild/win32-ia32": "0.20.2", "@esbuild/win32-x64": "0.20.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g=="], + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], + + "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], @@ -282,26 +347,36 @@ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + "find-replace": ["find-replace@3.0.0", "", { "dependencies": { "array-back": "^3.0.1" } }, "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ=="], + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], "fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "graphql": ["graphql@0.11.7", "", { "dependencies": { "iterall": "1.1.3" } }, "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw=="], + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], @@ -314,6 +389,12 @@ "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], @@ -334,6 +415,8 @@ "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], @@ -352,6 +435,8 @@ "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + "is-url": ["is-url@1.2.4", "", {}, "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="], + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], @@ -360,8 +445,12 @@ "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "iterall": ["iterall@1.1.3", "", {}, "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ=="], + "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], + "js-base64": ["js-base64@3.7.8", "", {}, "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow=="], + "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], "launch-editor": ["launch-editor@2.6.1", "", { "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw=="], @@ -396,18 +485,28 @@ "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + + "moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="], + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -422,6 +521,14 @@ "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + + "path-equal": ["path-equal@1.2.5", "", {}, "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], @@ -434,6 +541,8 @@ "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + "pluralize": ["pluralize@8.0.0", "", {}, "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="], + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], @@ -450,14 +559,28 @@ "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "quicktype": ["quicktype@23.2.6", "", { "dependencies": { "@glideapps/ts-necessities": "^2.2.3", "chalk": "^4.1.2", "collection-utils": "^1.0.1", "command-line-args": "^5.2.1", "command-line-usage": "^7.0.1", "cross-fetch": "^4.0.0", "graphql": "^0.11.7", "lodash": "^4.17.21", "moment": "^2.30.1", "quicktype-core": "23.2.6", "quicktype-graphql-input": "23.2.6", "quicktype-typescript-input": "23.2.6", "readable-stream": "^4.5.2", "stream-json": "1.8.0", "string-to-stream": "^3.0.1", "typescript": "~5.8.3" }, "bin": { "quicktype": "dist/index.js" } }, "sha512-rlD1jF71bOmDn6SQ/ToLuuRkMQ7maxo5oVTn5dPCl11ymqoJCFCvl7FzRfh+fkDFmWt2etl+JiIEdWImLxferA=="], + + "quicktype-core": ["quicktype-core@23.2.6", "", { "dependencies": { "@glideapps/ts-necessities": "2.2.3", "browser-or-node": "^3.0.0", "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", "is-url": "^1.2.4", "js-base64": "^3.7.7", "lodash": "^4.17.21", "pako": "^1.0.6", "pluralize": "^8.0.0", "readable-stream": "4.5.2", "unicode-properties": "^1.4.1", "urijs": "^1.19.1", "wordwrap": "^1.0.0", "yaml": "^2.4.1" } }, "sha512-asfeSv7BKBNVb9WiYhFRBvBZHcRutPRBwJMxW0pefluK4kkKu4lv0IvZBwFKvw2XygLcL1Rl90zxWDHYgkwCmA=="], + + "quicktype-graphql-input": ["quicktype-graphql-input@23.2.6", "", { "dependencies": { "collection-utils": "^1.0.1", "graphql": "^0.11.7", "quicktype-core": "23.2.6" } }, "sha512-jHQ8XrEaccZnWA7h/xqUQhfl+0mR5o91T6k3I4QhlnZSLdVnbycrMq4FHa9EaIFcai783JKwSUl1+koAdJq4pg=="], + + "quicktype-typescript-input": ["quicktype-typescript-input@23.2.6", "", { "dependencies": { "@mark.probst/typescript-json-schema": "0.55.0", "quicktype-core": "23.2.6", "typescript": "4.9.5" } }, "sha512-dCNMxR+7PGs9/9Tsth9H6LOQV1G+Tv4sUGT8ZUfDRJ5Hq371qOYLma5BnLX6VxkPu8JT7mAMpQ9VFlxstX6Qaw=="], + "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], + "readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], @@ -466,8 +589,12 @@ "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], @@ -494,12 +621,26 @@ "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], + "stream-chain": ["stream-chain@2.2.5", "", {}, "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA=="], + + "stream-json": ["stream-json@1.8.0", "", { "dependencies": { "stream-chain": "^2.2.5" } }, "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw=="], + + "string-to-stream": ["string-to-stream@3.0.1", "", { "dependencies": { "readable-stream": "^3.4.0" } }, "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + "table-layout": ["table-layout@4.1.1", "", { "dependencies": { "array-back": "^6.2.2", "wordwrapjs": "^5.1.0" } }, "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA=="], + "tailwindcss": ["tailwindcss@3.4.19", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ=="], "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], @@ -512,26 +653,46 @@ "tiny-decoders": ["tiny-decoders@7.0.1", "", {}, "sha512-P1LaHTLASl/lCrdtwgAAVwxt4bEAPmxpf9HMQrlCkAseaT8oH8oxm8ndy4nx5rLTcL5U/Qxp1a+FDoQfS/ZgQQ=="], + "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], + "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "typical": ["typical@4.0.0", "", {}, "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw=="], + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "unicode-properties": ["unicode-properties@1.4.1", "", { "dependencies": { "base64-js": "^1.3.0", "unicode-trie": "^2.0.0" } }, "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg=="], + + "unicode-trie": ["unicode-trie@2.0.0", "", { "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" } }, "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ=="], + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + "urijs": ["urijs@1.19.11", "", {}, "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="], + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="], + "vite": ["vite@5.2.8", "", { "dependencies": { "esbuild": "^0.20.1", "postcss": "^8.4.38", "rollup": "^4.13.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA=="], "vite-plugin-elm-watch": ["vite-plugin-elm-watch@1.3.3", "", { "dependencies": { "cross-spawn": "7.0.3", "elm": "0.19.1-6", "launch-editor": "2.6.1", "terser": "5.26.0", "tiny-decoders": "7.0.1" } }, "sha512-rR78gmeYp08E4CvtpnZuumsmNXaG/XOJ/xtOVfEG3TOJqDChXy1DzE1pnPsERohbELkov7ZZPHRLGV1z2iyxKg=="], + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], @@ -540,6 +701,30 @@ "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], + "wordwrap": ["wordwrap@1.0.0", "", {}, "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="], + + "wordwrapjs": ["wordwrapjs@5.1.1", "", {}, "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], + + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], + + "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], + + "@mark.probst/typescript-json-schema/@types/node": ["@types/node@16.18.126", "", {}, "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw=="], + + "@mark.probst/typescript-json-schema/typescript": ["typescript@4.9.4", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg=="], + "@tailwindcss/node/jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], "@tailwindcss/node/tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], @@ -562,18 +747,38 @@ "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "command-line-usage/array-back": ["array-back@6.2.3", "", {}, "sha512-SGDvmg6QTYiTxCBkYVmThcoa67uLl35pyzRHdpCGBOcqFy6BtwnphoFPk7LhJshD+Yk1Kt35WGWeZPTgwR4Fhw=="], + + "command-line-usage/typical": ["typical@7.3.0", "", {}, "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw=="], + "elm-land/typescript": ["typescript@4.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "quicktype/typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], + + "quicktype-core/@glideapps/ts-necessities": ["@glideapps/ts-necessities@2.2.3", "", {}, "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w=="], + + "quicktype-core/readable-stream": ["readable-stream@4.5.2", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g=="], + + "quicktype-typescript-input/typescript": ["typescript@4.9.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="], + + "string-to-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + "table-layout/array-back": ["array-back@6.2.3", "", {}, "sha512-SGDvmg6QTYiTxCBkYVmThcoa67uLl35pyzRHdpCGBOcqFy6BtwnphoFPk7LhJshD+Yk1Kt35WGWeZPTgwR4Fhw=="], + "tailwindcss/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], "tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + "ts-node/arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="], + + "unicode-trie/pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], + "vite/rollup": ["rollup@4.60.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.0", "@rollup/rollup-android-arm64": "4.60.0", "@rollup/rollup-darwin-arm64": "4.60.0", "@rollup/rollup-darwin-x64": "4.60.0", "@rollup/rollup-freebsd-arm64": "4.60.0", "@rollup/rollup-freebsd-x64": "4.60.0", "@rollup/rollup-linux-arm-gnueabihf": "4.60.0", "@rollup/rollup-linux-arm-musleabihf": "4.60.0", "@rollup/rollup-linux-arm64-gnu": "4.60.0", "@rollup/rollup-linux-arm64-musl": "4.60.0", "@rollup/rollup-linux-loong64-gnu": "4.60.0", "@rollup/rollup-linux-loong64-musl": "4.60.0", "@rollup/rollup-linux-ppc64-gnu": "4.60.0", "@rollup/rollup-linux-ppc64-musl": "4.60.0", "@rollup/rollup-linux-riscv64-gnu": "4.60.0", "@rollup/rollup-linux-riscv64-musl": "4.60.0", "@rollup/rollup-linux-s390x-gnu": "4.60.0", "@rollup/rollup-linux-x64-gnu": "4.60.0", "@rollup/rollup-linux-x64-musl": "4.60.0", "@rollup/rollup-openbsd-x64": "4.60.0", "@rollup/rollup-openharmony-arm64": "4.60.0", "@rollup/rollup-win32-arm64-msvc": "4.60.0", "@rollup/rollup-win32-ia32-msvc": "4.60.0", "@rollup/rollup-win32-x64-gnu": "4.60.0", "@rollup/rollup-win32-x64-msvc": "4.60.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ=="], "vite-plugin-elm-watch/terser": ["terser@5.26.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ=="], diff --git a/elm.json b/elm.json index 2640b95..07a8d15 100644 --- a/elm.json +++ b/elm.json @@ -8,7 +8,9 @@ "elm-version": "0.19.1", "dependencies": { "direct": { + "NoRedInk/elm-json-decode-pipeline": "1.0.1", "elm/browser": "1.0.2", + "elm/bytes": "1.0.8", "elm/core": "1.0.5", "elm/html": "1.0.0", "elm/http": "2.0.0", @@ -20,7 +22,6 @@ "rtfeldman/elm-css": "18.0.0" }, "indirect": { - "elm/bytes": "1.0.8", "elm/file": "1.0.5", "elm/parser": "1.1.0", "elm/random": "1.0.0", diff --git a/generate-elm-types.ts b/generate-elm-types.ts new file mode 100644 index 0000000..c3a186c --- /dev/null +++ b/generate-elm-types.ts @@ -0,0 +1,33 @@ +import { + quicktype, + InputData, + JSONSchemaInput, + FetchingJSONSchemaStore +} from "quicktype-core"; +import path from "path"; +import fs from "fs" +import { $ } from "bun"; + +const SCHEMA_URL = "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@master/openapi.schema.json"; +const OUTPUT_DIR = path.join(__dirname, "./src"); +const MODULE_NAME = "LearningResources"; + +async function generateElmTypes() { + + await $`bunx elm-open-api ${SCHEMA_URL} --output-dir ${OUTPUT_DIR} --module-name LearningResources`; + + // remove the generated Api.elm file since we only care about the types + const apiFilePath = path.join(OUTPUT_DIR, "LearningResources/Api.elm"); + try { + await fs.promises.unlink(apiFilePath); + } catch (e) { + // doesnt exist + } + + console.log(`Successfully generated Elm types in ${OUTPUT_DIR}/${MODULE_NAME}`); +} + +generateElmTypes().catch(error => { + console.error("Generation failed:", error); + process.exit(1); +}); \ No newline at end of file diff --git a/package.json b/package.json index f5ec709..c01830a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,10 @@ "private": true, "devDependencies": { "@types/bun": "latest", - "elm-land": "^0.20.1" + "elm-land": "^0.20.1", + "elm-open-api": "^0.7.0", + "quicktype": "^23.2.6", + "quicktype-core": "^23.2.6" }, "peerDependencies": { "typescript": "^5" diff --git a/src/LearningResources.elm b/src/LearningResources.elm deleted file mode 100644 index d41dd77..0000000 --- a/src/LearningResources.elm +++ /dev/null @@ -1,176 +0,0 @@ -module LearningResources exposing - ( LearningResourcesSet - , Price(..) - , Resource - , ResourceIndexEntry - , learningResourcesSet - , learningResourcesSetToString - ) - -import Dict exposing (Dict) -import Yaml.Decode as Jdec -import Yaml.Encode as Jenc - - -type alias ResourceIndexEntry = - { name : String - } - - -{-| Set of resources that can be used for learning programming - -description: -A brief description of the language and its uses - -emoji: -A Unicode emoji glyph or Discord emoji ID to represent the resource, if applicable. The -emoji must be part of the main DevDen server, which isn't great design but there's not -really a better way of doing it. - -name: -The name of the language - -resources: -List of resources that can be used for learning / practicing the language - --} -type alias LearningResourcesSet = - { description : String - , emoji : Maybe String - , name : String - , resources : List Resource - } - - -{-| cons: -Array of cons for using the resource, e.g. 'only teaches the basics rather than more -advanced concepts' - -description: -A brief description of the resource - -name: -The official name of the resource - -price: -The price of the resource, if it has one. If the resource is free, omit this field. - -pros: -Array of pros for using the resource, e.g. 'explains difficult concepts with good -analogies' - -url: -URL to the resource - --} -type alias Resource = - { cons : List String - , description : Maybe String - , name : String - , price : Maybe Price - , pros : List String - , url : String - } - - -{-| The price of the resource, if it has one. If the resource is free, omit this field. --} -type Price - = DoubleInPrice Float - | StringInPrice String - - - --- decoders and encoders - - -learningResourcesSetToString : LearningResourcesSet -> String -learningResourcesSetToString r = - Jenc.toString 0 (encodeLearningResourcesSet r) - - -learningResourcesSet : Jdec.Decoder LearningResourcesSet -learningResourcesSet = - Jdec.map4 LearningResourcesSet - (Jdec.field "description" Jdec.string) - (optionalField "emoji" Jdec.string) - (Jdec.field "name" Jdec.string) - (Jdec.field "resources" (Jdec.list resource)) - - -encodeLearningResourcesSet : LearningResourcesSet -> Jenc.Encoder -encodeLearningResourcesSet x = - Jenc.record - [ ( "description", Jenc.string x.description ) - , ( "emoji", makeNullableEncoder Jenc.string x.emoji ) - , ( "name", Jenc.string x.name ) - , ( "resources", makeListEncoder encodeResource x.resources ) - ] - - -resource : Jdec.Decoder Resource -resource = - Jdec.map6 Resource - (Jdec.field "cons" (Jdec.list Jdec.string)) - (optionalField "description" Jdec.string) - (Jdec.field "name" Jdec.string) - (optionalField "price" price) - (Jdec.field "pros" (Jdec.list Jdec.string)) - (Jdec.field "url" Jdec.string) - - -encodeResource : Resource -> Jenc.Encoder -encodeResource x = - Jenc.record - [ ( "cons", makeListEncoder Jenc.string x.cons ) - , ( "description", makeNullableEncoder Jenc.string x.description ) - , ( "name", Jenc.string x.name ) - , ( "price", makeNullableEncoder encodePrice x.price ) - , ( "pros", makeListEncoder Jenc.string x.pros ) - , ( "url", Jenc.string x.url ) - ] - - -price : Jdec.Decoder Price -price = - Jdec.oneOf - [ Jdec.map StringInPrice Jdec.string - , Jdec.map DoubleInPrice Jdec.float - ] - - -optionalField : String -> Jdec.Decoder a -> Jdec.Decoder (Maybe a) -optionalField name decoder = - Jdec.oneOf - [ Jdec.field name (Jdec.nullable decoder) - , Jdec.succeed Nothing - ] - - -encodePrice : Price -> Jenc.Encoder -encodePrice x = - case x of - StringInPrice y -> - Jenc.string y - - DoubleInPrice y -> - Jenc.float y - - - ---- encoder helpers - - -makeListEncoder : (a -> Jenc.Encoder) -> List a -> Jenc.Encoder -makeListEncoder f arr = - Jenc.list f arr - - -makeNullableEncoder : (a -> Jenc.Encoder) -> Maybe a -> Jenc.Encoder -makeNullableEncoder f m = - case m of - Just x -> - f x - - Nothing -> - Jenc.null diff --git a/src/LearningResources/Json.elm b/src/LearningResources/Json.elm new file mode 100644 index 0000000..6c89658 --- /dev/null +++ b/src/LearningResources/Json.elm @@ -0,0 +1,513 @@ +module LearningResources.Json exposing + ( encodeCompiledMeta, encodeDatabase, encodeEntityTag, encodeFreePricing, encodePaidPricing, encodePricing + , encodeResource, encodeResourceCategory + , decodeCompiledMeta, decodeDatabase, decodeEntityTag, decodeFreePricing, decodePaidPricing, decodePricing + , decodeResource, decodeResourceCategory + ) + +{-| + + +## Encoders + +@docs encodeCompiledMeta, encodeDatabase, encodeEntityTag, encodeFreePricing, encodePaidPricing, encodePricing +@docs encodeResource, encodeResourceCategory + + +## Decoders + +@docs decodeCompiledMeta, decodeDatabase, decodeEntityTag, decodeFreePricing, decodePaidPricing, decodePricing +@docs decodeResource, decodeResourceCategory + +-} + +import Json.Decode +import Json.Encode +import LearningResources.Types +import OpenApi.Common + + +decodeResourceCategory : Json.Decode.Decoder LearningResources.Types.ResourceCategory +decodeResourceCategory = + Json.Decode.value + + +encodeResourceCategory : LearningResources.Types.ResourceCategory -> Json.Encode.Value +encodeResourceCategory = + Basics.identity + + +decodeResource : Json.Decode.Decoder LearningResources.Types.Resource +decodeResource = + Json.Decode.succeed + (\cons description name pricing pros teaches type_ url -> + { cons = cons + , description = description + , name = name + , pricing = pricing + , pros = pros + , teaches = teaches + , type_ = type_ + , url = url + } + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "cons" + (Json.Decode.list Json.Decode.string) + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "description" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "name" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "pricing" + (Json.Decode.oneOf + [ Json.Decode.map + LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing + decodeFreePricing + , Json.Decode.map + LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing + decodePaidPricing + ] + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "pros" + (Json.Decode.list + Json.Decode.string + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "teaches" + (Json.Decode.list + decodeEntityTag + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "type" + (Json.Decode.list + Json.Decode.string + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "url" + Json.Decode.string + ) + + +encodeResource : LearningResources.Types.Resource -> Json.Encode.Value +encodeResource rec = + Json.Encode.object + (List.filterMap + Basics.identity + [ Maybe.map + (\mapUnpack -> + ( "cons", Json.Encode.list Json.Encode.string mapUnpack ) + ) + rec.cons + , Maybe.map + (\mapUnpack -> ( "description", Json.Encode.string mapUnpack )) + rec.description + , Just ( "name", Json.Encode.string rec.name ) + , Just + ( "pricing" + , case rec.pricing of + LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing content -> + encodeFreePricing content + + LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing content -> + encodePaidPricing content + ) + , Maybe.map + (\mapUnpack -> + ( "pros", Json.Encode.list Json.Encode.string mapUnpack ) + ) + rec.pros + , Just ( "teaches", Json.Encode.list encodeEntityTag rec.teaches ) + , Just ( "type", Json.Encode.list Json.Encode.string rec.type_ ) + , Just ( "url", Json.Encode.string rec.url ) + ] + ) + + +decodePricing : Json.Decode.Decoder LearningResources.Types.Pricing +decodePricing = + Json.Decode.oneOf + [ Json.Decode.map + LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing + decodeFreePricing + , Json.Decode.map + LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing + decodePaidPricing + ] + + +encodePricing : LearningResources.Types.Pricing -> Json.Encode.Value +encodePricing rec = + case rec of + LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing content -> + encodeFreePricing content + + LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing content -> + encodePaidPricing content + + +decodePaidPricing : Json.Decode.Decoder LearningResources.Types.PaidPricing +decodePaidPricing = + Json.Decode.succeed + (\amount model -> { amount = amount, model = model }) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "amount" Json.Decode.float) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "model" Json.Decode.string) + + +encodePaidPricing : LearningResources.Types.PaidPricing -> Json.Encode.Value +encodePaidPricing rec = + Json.Encode.object + [ ( "amount", Json.Encode.float rec.amount ) + , ( "model", Json.Encode.string rec.model ) + ] + + +decodeFreePricing : Json.Decode.Decoder LearningResources.Types.FreePricing +decodeFreePricing = + Json.Decode.succeed + (\model -> { model = model }) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "model" + Json.Decode.string + ) + + +encodeFreePricing : LearningResources.Types.FreePricing -> Json.Encode.Value +encodeFreePricing rec = + Json.Encode.object [ ( "model", Json.Encode.string rec.model ) ] + + +decodeEntityTag : Json.Decode.Decoder LearningResources.Types.EntityTag +decodeEntityTag = + Json.Decode.andThen + (\andThenUnpack -> + case LearningResources.Types.entityTagFromString andThenUnpack of + Maybe.Just a -> + Json.Decode.succeed a + + Maybe.Nothing -> + Json.Decode.fail + (andThenUnpack ++ " is not a valid EntityTag") + ) + Json.Decode.string + + +encodeEntityTag : LearningResources.Types.EntityTag -> Json.Encode.Value +encodeEntityTag rec = + Json.Encode.string (LearningResources.Types.entityTagToString rec) + + +decodeDatabase : Json.Decode.Decoder LearningResources.Types.Database +decodeDatabase = + Json.Decode.succeed + (\metadata resources -> { metadata = metadata, resources = resources }) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "metadata" + (Json.Decode.list + (Json.Decode.succeed + (\category description domains emoji id name -> + { category = category + , description = + description + , domains = domains + , emoji = emoji + , id = id + , name = name + } + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "category" + Json.Decode.value + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "description" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "domains" + (Json.Decode.list + Json.Decode.string + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "emoji" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "id" + decodeEntityTag + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "name" + Json.Decode.string + ) + ) + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "resources" + (Json.Decode.list + (Json.Decode.succeed + (\cons description name pricing pros teaches type_ url -> + { cons = + cons + , description = + description + , name = + name + , pricing = + pricing + , pros = + pros + , teaches = + teaches + , type_ = + type_ + , url = + url + } + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "cons" + (Json.Decode.list + Json.Decode.string + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "description" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "name" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "pricing" + (Json.Decode.oneOf + [ Json.Decode.map + LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing + decodeFreePricing + , Json.Decode.map + LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing + decodePaidPricing + ] + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "pros" + (Json.Decode.list + Json.Decode.string + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "teaches" + (Json.Decode.list + decodeEntityTag + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "type" + (Json.Decode.list + Json.Decode.string + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "url" + Json.Decode.string + ) + ) + ) + ) + + +encodeDatabase : LearningResources.Types.Database -> Json.Encode.Value +encodeDatabase rec = + Json.Encode.object + [ ( "metadata" + , Json.Encode.list + (\rec0 -> + Json.Encode.object + (List.filterMap + Basics.identity + [ Just + ( "category", Basics.identity rec0.category ) + , Just + ( "description" + , Json.Encode.string rec0.description + ) + , Just + ( "domains" + , Json.Encode.list + Json.Encode.string + rec0.domains + ) + , Maybe.map + (\mapUnpack -> + ( "emoji", Json.Encode.string mapUnpack ) + ) + rec0.emoji + , Just ( "id", encodeEntityTag rec0.id ) + , Just ( "name", Json.Encode.string rec0.name ) + ] + ) + ) + rec.metadata + ) + , ( "resources" + , Json.Encode.list + (\rec0 -> + Json.Encode.object + (List.filterMap + Basics.identity + [ Maybe.map + (\mapUnpack -> + ( "cons" + , Json.Encode.list + Json.Encode.string + mapUnpack + ) + ) + rec0.cons + , Maybe.map + (\mapUnpack -> + ( "description" + , Json.Encode.string mapUnpack + ) + ) + rec0.description + , Just ( "name", Json.Encode.string rec0.name ) + , Just + ( "pricing" + , case rec0.pricing of + LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing content -> + encodeFreePricing content + + LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing content -> + encodePaidPricing content + ) + , Maybe.map + (\mapUnpack -> + ( "pros" + , Json.Encode.list + Json.Encode.string + mapUnpack + ) + ) + rec0.pros + , Just + ( "teaches" + , Json.Encode.list + encodeEntityTag + rec0.teaches + ) + , Just + ( "type" + , Json.Encode.list + Json.Encode.string + rec0.type_ + ) + , Just ( "url", Json.Encode.string rec0.url ) + ] + ) + ) + rec.resources + ) + ] + + +decodeCompiledMeta : Json.Decode.Decoder LearningResources.Types.CompiledMeta +decodeCompiledMeta = + Json.Decode.succeed + (\category description domains emoji id name -> + { category = category + , description = description + , domains = domains + , emoji = emoji + , id = id + , name = name + } + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "category" Json.Decode.value) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "description" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "domains" + (Json.Decode.list + Json.Decode.string + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "emoji" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "id" + decodeEntityTag + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "name" + Json.Decode.string + ) + + +encodeCompiledMeta : LearningResources.Types.CompiledMeta -> Json.Encode.Value +encodeCompiledMeta rec = + Json.Encode.object + (List.filterMap + Basics.identity + [ Just ( "category", Basics.identity rec.category ) + , Just ( "description", Json.Encode.string rec.description ) + , Just + ( "domains", Json.Encode.list Json.Encode.string rec.domains ) + , Maybe.map + (\mapUnpack -> ( "emoji", Json.Encode.string mapUnpack )) + rec.emoji + , Just ( "id", encodeEntityTag rec.id ) + , Just ( "name", Json.Encode.string rec.name ) + ] + ) diff --git a/src/LearningResources/Types.elm b/src/LearningResources/Types.elm new file mode 100644 index 0000000..4010485 --- /dev/null +++ b/src/LearningResources/Types.elm @@ -0,0 +1,294 @@ +module LearningResources.Types exposing + ( CompiledMeta, Database, FreePricing, PaidPricing, Pricing, Resource, ResourceCategory + , EntityTag(..), entityTagFromString, entityTagToString, entityTagVariants + , FreePricing_Or_PaidPricing(..) + ) + +{-| + + +## Aliases + +@docs CompiledMeta, Database, FreePricing, PaidPricing, Pricing, Resource, ResourceCategory + + +## Enum + +@docs EntityTag, entityTagFromString, entityTagToString, entityTagVariants + + +## One of + +@docs FreePricing_Or_PaidPricing + +-} + +import Json.Encode + + +{-| The category of the resource +-} +type alias ResourceCategory = + Json.Encode.Value + + +{-| Fields: + + - cons: Array of cons for using the resource, e.g. 'only teaches the basics rather than more advanced concepts' + + - description: A brief description of the resource + + - name: The official name of the resource + + - pricing: Details about the cost of the resource. + + - pros: Array of pros for using the resource, e.g. 'explains difficult concepts with good analogies' + + - teaches: The topics that this resource teaches. + + - type: The type(s) of the resource, e.g. 'Video', 'Book', 'Course', etc. + + A list of: The type of the resource + + - url: URL to the resource + +-} +type alias Resource = + { cons : Maybe (List String) + , description : Maybe String + , name : String + , pricing : FreePricing_Or_PaidPricing + , pros : Maybe (List String) + , teaches : List EntityTag + , type_ : List String + , url : String + } + + +{-| Details about the cost of the resource. +-} +type alias Pricing = + FreePricing_Or_PaidPricing + + +{-| Fields: + + - amount: The price of this resource, in US Dollars. + - model: The Paid Pricing Model of this resource. 'Subscription' means the resource is paid on a recurring basis (e.g. monthly or yearly), while 'One Time' means the resource is paid with a single upfront payment. If the price varies or is not fixed, provide a close approximation. Note that the subscription renewal cycle is not specified, so if the price has different renewal cycles, provide the most common or default one (usually monthly). + +-} +type alias PaidPricing = + { amount : Float, model : String } + + +{-| Fields: + + - model: The Free(mium) Pricing Model of this resource. 'Free' should be used for resources where 100% (or close) of the content is free. 'Freemium' describes a pricing model where the core content is available for free, but features paid extensions. If the resource has a freemium model but the free portion is very limited, consider using 'Paid' instead and providing an estimated price for the full version. + +-} +type alias FreePricing = + { model : String } + + +type EntityTag + = EntityTag__Clojure + | EntityTag__Cpp + | EntityTag__General + | EntityTag__Git + | EntityTag__Haskell + | EntityTag__Java + | EntityTag__Kotlin + | EntityTag__Php + | EntityTag__ProgrammingLanguageDesign + | EntityTag__Python + | EntityTag__Rust + | EntityTag__Sql + + +entityTagToString : EntityTag -> String +entityTagToString value = + case value of + EntityTag__Clojure -> + "clojure" + + EntityTag__Cpp -> + "cpp" + + EntityTag__General -> + "general" + + EntityTag__Git -> + "git" + + EntityTag__Haskell -> + "haskell" + + EntityTag__Java -> + "java" + + EntityTag__Kotlin -> + "kotlin" + + EntityTag__Php -> + "php" + + EntityTag__ProgrammingLanguageDesign -> + "programming-language-design" + + EntityTag__Python -> + "python" + + EntityTag__Rust -> + "rust" + + EntityTag__Sql -> + "sql" + + +entityTagFromString : String -> Maybe EntityTag +entityTagFromString value = + case value of + "clojure" -> + Just EntityTag__Clojure + + "cpp" -> + Just EntityTag__Cpp + + "general" -> + Just EntityTag__General + + "git" -> + Just EntityTag__Git + + "haskell" -> + Just EntityTag__Haskell + + "java" -> + Just EntityTag__Java + + "kotlin" -> + Just EntityTag__Kotlin + + "php" -> + Just EntityTag__Php + + "programming-language-design" -> + Just EntityTag__ProgrammingLanguageDesign + + "python" -> + Just EntityTag__Python + + "rust" -> + Just EntityTag__Rust + + "sql" -> + Just EntityTag__Sql + + _ -> + Nothing + + +entityTagVariants : List EntityTag +entityTagVariants = + [ EntityTag__Clojure + , EntityTag__Cpp + , EntityTag__General + , EntityTag__Git + , EntityTag__Haskell + , EntityTag__Java + , EntityTag__Kotlin + , EntityTag__Php + , EntityTag__ProgrammingLanguageDesign + , EntityTag__Python + , EntityTag__Rust + , EntityTag__Sql + ] + + +{-| Fields: + + - metadata: List of all entities in the system + + A list of: + Fields: + + - category: The category of the resource + - description: A brief description of the language, tool, etc being described by this metadata. + - domains: The domain(s) that the entity is commonly used in, or best suited for. + + A list of: A domain that a programming language may be used in. + - emoji: A Unicode emoji glyph to represent the entity, if applicable. If there is no suitable (Unicode) emoji, omit this field. Consumers may choose to ignore this field, or replace it with a custom image. + - id: The unique identifier of the entity + - name: The name of the language, tool, etc being described by this metadata. + + - resources: List of all learning resources + + A list of: + Fields: + + - cons: Array of cons for using the resource, e.g. 'only teaches the basics rather than more advanced concepts' + - description: A brief description of the resource + - name: The official name of the resource + - pricing: Details about the cost of the resource. + - pros: Array of pros for using the resource, e.g. 'explains difficult concepts with good analogies' + - teaches: The topics that this resource teaches. + - type: The type(s) of the resource, e.g. 'Video', 'Book', 'Course', etc. + + A list of: The type of the resource + - url: URL to the resource + +-} +type alias Database = + { metadata : + List + { category : Json.Encode.Value + , description : String + , domains : List String + , emoji : Maybe String + , id : EntityTag + , name : String + } + , resources : + List + { cons : Maybe (List String) + , description : Maybe String + , name : String + , pricing : FreePricing_Or_PaidPricing + , pros : Maybe (List String) + , teaches : List EntityTag + , type_ : List String + , url : String + } + } + + +{-| Fields: + + - category: The category of the resource + + - description: A brief description of the language, tool, etc being described by this metadata. + + - domains: The domain(s) that the entity is commonly used in, or best suited for. + + A list of: A domain that a programming language may be used in. + + - emoji: A Unicode emoji glyph to represent the entity, if applicable. If there is no suitable (Unicode) emoji, omit this field. Consumers may choose to ignore this field, or replace it with a custom image. + + - id: The unique identifier of the entity + + - name: The name of the language, tool, etc being described by this metadata. + +-} +type alias CompiledMeta = + { category : Json.Encode.Value + , description : String + , domains : List String + , emoji : Maybe String + , id : EntityTag + , name : String + } + + +type FreePricing_Or_PaidPricing + = FreePricing_Or_PaidPricing__FreePricing FreePricing + | FreePricing_Or_PaidPricing__PaidPricing PaidPricing diff --git a/src/OpenApi/Common.elm b/src/OpenApi/Common.elm new file mode 100644 index 0000000..9f0b0ce --- /dev/null +++ b/src/OpenApi/Common.elm @@ -0,0 +1,388 @@ +module OpenApi.Common exposing + ( Nullable(..) + , decodeOptionalField, jsonDecodeAndMap + , Error(..), bytesResolverCustom, expectBytesCustom, expectJsonCustom, expectStringCustom, jsonResolverCustom + , stringResolverCustom + ) + +{-| + + +## Types + +@docs Nullable + + +## Decoders + +@docs decodeOptionalField, jsonDecodeAndMap + + +## Http + +@docs Error, bytesResolverCustom, expectBytesCustom, expectJsonCustom, expectStringCustom, jsonResolverCustom +@docs stringResolverCustom + +-} + +import Bytes +import Bytes.Decode +import Dict +import Http +import Json.Decode + + +expectJsonCustom : + (Result (Error err String) success -> msg) + -> Dict.Dict String (Json.Decode.Decoder err) + -> Json.Decode.Decoder success + -> Http.Expect msg +expectJsonCustom toMsg errorDecoders successDecoder = + Http.expectStringResponse + toMsg + (\expectStringResponseUnpack -> + case expectStringResponseUnpack of + Http.BadUrl_ stringString -> + Result.Err (BadUrl stringString) + + Http.Timeout_ -> + Result.Err Timeout + + Http.NetworkError_ -> + Result.Err NetworkError + + Http.BadStatus_ httpMetadata body -> + case + Dict.get + (String.fromInt httpMetadata.statusCode) + errorDecoders + of + Maybe.Just a -> + case Json.Decode.decodeString a body of + Result.Ok value -> + Result.Err + (KnownBadStatus + httpMetadata.statusCode + value + ) + + Result.Err error -> + Result.Err (BadErrorBody httpMetadata body) + + Maybe.Nothing -> + Result.Err (UnknownBadStatus httpMetadata body) + + Http.GoodStatus_ httpMetadata body -> + case Json.Decode.decodeString successDecoder body of + Result.Ok value -> + Result.Ok value + + Result.Err error -> + Result.Err (BadBody httpMetadata body) + ) + + +jsonResolverCustom : + Dict.Dict String (Json.Decode.Decoder err) + -> Json.Decode.Decoder success + -> Http.Resolver (Error err String) success +jsonResolverCustom errorDecoders successDecoder = + Http.stringResolver + (\stringResolverUnpack -> + case stringResolverUnpack of + Http.BadUrl_ stringString -> + Result.Err (BadUrl stringString) + + Http.Timeout_ -> + Result.Err Timeout + + Http.NetworkError_ -> + Result.Err NetworkError + + Http.BadStatus_ httpMetadata body -> + case + Dict.get + (String.fromInt httpMetadata.statusCode) + errorDecoders + of + Maybe.Just a -> + case Json.Decode.decodeString a body of + Result.Ok value -> + Result.Err + (KnownBadStatus + httpMetadata.statusCode + value + ) + + Result.Err error -> + Result.Err (BadErrorBody httpMetadata body) + + Maybe.Nothing -> + Result.Err (UnknownBadStatus httpMetadata body) + + Http.GoodStatus_ httpMetadata body -> + case Json.Decode.decodeString successDecoder body of + Result.Ok value -> + Result.Ok value + + Result.Err error -> + Result.Err (BadBody httpMetadata body) + ) + + +expectStringCustom : + (Result (Error err String) String -> msg) + -> Dict.Dict String (Json.Decode.Decoder err) + -> Http.Expect msg +expectStringCustom toMsg errorDecoders = + Http.expectStringResponse + toMsg + (\expectStringResponseUnpack -> + case expectStringResponseUnpack of + Http.BadUrl_ stringString -> + Result.Err (BadUrl stringString) + + Http.Timeout_ -> + Result.Err Timeout + + Http.NetworkError_ -> + Result.Err NetworkError + + Http.BadStatus_ httpMetadata body -> + case + Dict.get + (String.fromInt httpMetadata.statusCode) + errorDecoders + of + Maybe.Just a -> + case Json.Decode.decodeString a body of + Result.Ok value -> + Result.Err + (KnownBadStatus + httpMetadata.statusCode + value + ) + + Result.Err error -> + Result.Err (BadErrorBody httpMetadata body) + + Maybe.Nothing -> + Result.Err (UnknownBadStatus httpMetadata body) + + Http.GoodStatus_ httpMetadata body -> + Result.Ok body + ) + + +stringResolverCustom : + Dict.Dict String (Json.Decode.Decoder err) + -> Http.Resolver (Error err String) String +stringResolverCustom errorDecoders = + Http.stringResolver + (\stringResolverUnpack -> + case stringResolverUnpack of + Http.BadUrl_ stringString -> + Result.Err (BadUrl stringString) + + Http.Timeout_ -> + Result.Err Timeout + + Http.NetworkError_ -> + Result.Err NetworkError + + Http.BadStatus_ httpMetadata body -> + case + Dict.get + (String.fromInt httpMetadata.statusCode) + errorDecoders + of + Maybe.Just a -> + case Json.Decode.decodeString a body of + Result.Ok value -> + Result.Err + (KnownBadStatus + httpMetadata.statusCode + value + ) + + Result.Err error -> + Result.Err (BadErrorBody httpMetadata body) + + Maybe.Nothing -> + Result.Err (UnknownBadStatus httpMetadata body) + + Http.GoodStatus_ httpMetadata body -> + Result.Ok body + ) + + +expectBytesCustom : + (Result (Error err Bytes.Bytes) Bytes.Bytes -> msg) + -> Dict.Dict String (Json.Decode.Decoder err) + -> Http.Expect msg +expectBytesCustom toMsg errorDecoders = + Http.expectBytesResponse + toMsg + (\expectBytesResponseUnpack -> + case expectBytesResponseUnpack of + Http.BadUrl_ stringString -> + Result.Err (BadUrl stringString) + + Http.Timeout_ -> + Result.Err Timeout + + Http.NetworkError_ -> + Result.Err NetworkError + + Http.BadStatus_ httpMetadata body -> + case + Dict.get + (String.fromInt httpMetadata.statusCode) + errorDecoders + of + Maybe.Just a -> + case + Json.Decode.decodeString + a + (Maybe.withDefault + "" + (Bytes.Decode.decode + (Bytes.Decode.string + (Bytes.width body) + ) + body + ) + ) + of + Result.Ok value -> + Result.Err + (KnownBadStatus + httpMetadata.statusCode + value + ) + + Result.Err error -> + Result.Err (BadErrorBody httpMetadata body) + + Maybe.Nothing -> + Result.Err (UnknownBadStatus httpMetadata body) + + Http.GoodStatus_ httpMetadata body -> + Result.Ok body + ) + + +bytesResolverCustom : + Dict.Dict String (Json.Decode.Decoder err) + -> Http.Resolver (Error err Bytes.Bytes) Bytes.Bytes +bytesResolverCustom errorDecoders = + Http.bytesResolver + (\bytesResolverUnpack -> + case bytesResolverUnpack of + Http.BadUrl_ stringString -> + Result.Err (BadUrl stringString) + + Http.Timeout_ -> + Result.Err Timeout + + Http.NetworkError_ -> + Result.Err NetworkError + + Http.BadStatus_ httpMetadata body -> + case + Dict.get + (String.fromInt httpMetadata.statusCode) + errorDecoders + of + Maybe.Just a -> + case + Json.Decode.decodeString + a + (Maybe.withDefault + "" + (Bytes.Decode.decode + (Bytes.Decode.string + (Bytes.width body) + ) + body + ) + ) + of + Result.Ok value -> + Result.Err + (KnownBadStatus + httpMetadata.statusCode + value + ) + + Result.Err error -> + Result.Err (BadErrorBody httpMetadata body) + + Maybe.Nothing -> + Result.Err (UnknownBadStatus httpMetadata body) + + Http.GoodStatus_ httpMetadata body -> + Result.Ok body + ) + + +{-| Decode an optional field + + decodeString (decodeOptionalField "x" int) "{ "x": 3 }" + --> Ok (Just 3) + + decodeString (decodeOptionalField "x" int) "{ "x": true }" + --> Err ... + + decodeString (decodeOptionalField "x" int) "{ "y": 4 }" + --> Ok Nothing + +-} +decodeOptionalField : String -> Json.Decode.Decoder t -> Json.Decode.Decoder (Maybe t) +decodeOptionalField key fieldDecoder = + Json.Decode.andThen + (\andThenUnpack -> + if andThenUnpack then + Json.Decode.field + key + (Json.Decode.oneOf + [ Json.Decode.map Just fieldDecoder + , Json.Decode.null Nothing + ] + ) + + else + Json.Decode.succeed Nothing + ) + (Json.Decode.oneOf + [ Json.Decode.map + (\_ -> True) + (Json.Decode.field key Json.Decode.value) + , Json.Decode.succeed False + ] + ) + + +{-| Chain JSON decoders, when `Json.Decode.map8` isn't enough. +-} +jsonDecodeAndMap : + Json.Decode.Decoder a + -> Json.Decode.Decoder (a -> value) + -> Json.Decode.Decoder value +jsonDecodeAndMap = + Json.Decode.map2 (|>) + + +type Error err body + = BadUrl String + | Timeout + | NetworkError + | KnownBadStatus Int err + | UnknownBadStatus Http.Metadata body + | BadErrorBody Http.Metadata body + | BadBody Http.Metadata body + + +type Nullable value + = Null + | Present value diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..5a30381 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + // Environment setup & latest features + "lib": ["ESNext"], + "target": "ESNext", + "module": "Preserve", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + "types": ["bun"], + + // Bundler mode + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + // Best practices + "strict": true, + "skipLibCheck": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Some stricter flags (disabled by default) + "noUnusedLocals": false, + "noUnusedParameters": false, + "noPropertyAccessFromIndexSignature": false + } +} From b49e51a69b463aad0148f701d7fd98afc77542bb Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Wed, 13 May 2026 15:43:09 +0100 Subject: [PATCH 14/48] feat: basic learning impl! --- bun.lock | 4 +- generate-elm-types.ts | 2 +- package.json | 2 +- src/Api.elm | 80 +----- src/LearningResources.elm | 11 + src/LearningResources/Json.elm | 474 +++++++++++++++---------------- src/LearningResources/Types.elm | 341 ++++++++++++++++------ src/Pages/Learning.elm | 224 ++++++++++----- src/Pages/Learning/Resource_.elm | 247 ++++++++++------ src/Shared.elm | 13 +- src/Shared/Model.elm | 21 +- src/Shared/Msg.elm | 5 +- 12 files changed, 818 insertions(+), 606 deletions(-) create mode 100644 src/LearningResources.elm diff --git a/bun.lock b/bun.lock index a2301d9..0032db5 100644 --- a/bun.lock +++ b/bun.lock @@ -13,7 +13,7 @@ "devDependencies": { "@types/bun": "latest", "elm-land": "^0.20.1", - "elm-open-api": "^0.7.0", + "elm-open-api": "git+https://github.com/wolfadex/elm-open-api-cli.git#main", "quicktype": "^23.2.6", "quicktype-core": "^23.2.6", }, @@ -315,7 +315,7 @@ "elm-land": ["elm-land@0.20.1", "", { "dependencies": { "@lydell/elm": "0.19.1-14", "chokidar": "3.5.3", "terser": "5.15.1", "typescript": "4.9.3", "vite": "5.2.8", "vite-plugin-elm-watch": "1.3.3" }, "bin": { "elm-land": "src/index.js" } }, "sha512-AY8BxYNT7mblaIO9SS2YQPdskZdMsLL6fqjAA5bORdkGIRDkMeaw+rXgiVSHUM2+TK0k/ld0TdQEAd24Moi5nw=="], - "elm-open-api": ["elm-open-api@0.7.0", "", { "bin": { "elm-open-api": "dist/elm-open-api.js" } }, "sha512-cp5/XHmSRz37ORgZDoaiXixb1vlZCZg+O9zi79qoHJXYm2NtWtmcOWhdnAexgX7gcrUvAWlZvckiwYHGXY5j3A=="], + "elm-open-api": ["elm-open-api@github:wolfadex/elm-open-api-cli#f77df0b", { "bin": "dist/elm-open-api.js" }, "wolfadex-elm-open-api-cli-f77df0b"], "elm-tailwind-modules": ["elm-tailwind-modules@0.5.0", "", { "dependencies": { "chalk": "^4.1.1", "color-name": "^1.1.4", "commander": "^7.2.0", "css-what": "^5.0.0", "deep-equal": "^2.0.3", "fs-extra": "^9.1.0", "lodash": "^4.17.21", "rollup": "^2.45.2", "tslib": "^2.2.0" }, "peerDependencies": { "postcss": "^8.2.4", "tailwindcss": "^2.0.2 || ^3.1.6" }, "bin": { "elm-tailwind-modules": "dist/cli.js" } }, "sha512-Ad03E6lZwB2Fa+OoLTSzlRKOIzO+T5jTgTOHl53WREmNZPxcaJ+1acwdM/7RJrTkTfvoXi241pdfzzOBQX5r2A=="], diff --git a/generate-elm-types.ts b/generate-elm-types.ts index c3a186c..7c470a9 100644 --- a/generate-elm-types.ts +++ b/generate-elm-types.ts @@ -8,7 +8,7 @@ import path from "path"; import fs from "fs" import { $ } from "bun"; -const SCHEMA_URL = "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@master/openapi.schema.json"; +const SCHEMA_URL = "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@cb31652/openapi.schema.json"; const OUTPUT_DIR = path.join(__dirname, "./src"); const MODULE_NAME = "LearningResources"; diff --git a/package.json b/package.json index c01830a..3198338 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "devDependencies": { "@types/bun": "latest", "elm-land": "^0.20.1", - "elm-open-api": "^0.7.0", + "elm-open-api": "git+https://github.com/wolfadex/elm-open-api-cli.git#main", "quicktype": "^23.2.6", "quicktype-core": "^23.2.6" }, diff --git a/src/Api.elm b/src/Api.elm index bd15c7a..4b9d4de 100644 --- a/src/Api.elm +++ b/src/Api.elm @@ -3,7 +3,8 @@ module Api exposing (..) import Effect exposing (Effect) import Http import Json.Decode as Json -import LearningResources +import LearningResources.Types as LearningResources +import LearningResources.Json as LearningResources import Yaml.Decode @@ -14,82 +15,11 @@ type Data value getLearningResourcesIndex : - { onResponse : Result Http.Error (List LearningResources.ResourceIndexEntry) -> msg } + { onResponse : Result Http.Error LearningResources.Database -> msg } -> Effect msg getLearningResourcesIndex { onResponse } = Effect.sendCmd <| Http.get - { url = "https://learningresources.developerden.org" - , expect = Http.expectJson onResponse resourceIndexDecoder + { url = "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@master/database.json" + , expect = Http.expectJson onResponse LearningResources.decodeDatabase } - - -getLearningResource : - { name : String - , onResponse : Result Http.Error LearningResources.LearningResourcesSet -> msg - } - -> Effect msg -getLearningResource { name, onResponse } = - Effect.sendCmd <| - Http.get - { url = "https://learningresources.developerden.org/" ++ name - , expect = - expectYaml onResponse LearningResources.learningResourcesSet - } - -expectYaml : (Result Http.Error a -> msg) -> Yaml.Decode.Decoder a -> Http.Expect msg -expectYaml toMsg decoder = - Http.expectStringResponse toMsg <| resolve decoder - -resolve decoder = \response -> - case response of - Http.BadUrl_ url -> - Err (Http.BadUrl url) - - Http.Timeout_ -> - Err Http.Timeout - - Http.NetworkError_ -> - Err Http.NetworkError - - Http.BadStatus_ metadata body -> - Err (Http.BadStatus metadata.statusCode) - - Http.GoodStatus_ metadata body -> - case Yaml.Decode.fromString decoder body of - Ok value -> - Ok value - - Err err -> - Err (Http.BadBody (Yaml.Decode.errorToString err)) - - -resourceIndexDecoder : Json.Decoder (List LearningResources.ResourceIndexEntry) -resourceIndexDecoder = - Json.list - (Json.map LearningResources.ResourceIndexEntry - (Json.field "name" Json.string) - ) - - -toUserFriendlyMessage : Http.Error -> String -toUserFriendlyMessage httpError = - case httpError of - Http.BadUrl _ -> - "This page requested a bad URL" - - Http.Timeout -> - "Request took too long to respond" - - Http.NetworkError -> - "Could not connect to the API" - - Http.BadStatus code -> - if code == 404 then - "Item not found" - - else - "API returned an error code" - - Http.BadBody _ -> - "Unexpected response from API" diff --git a/src/LearningResources.elm b/src/LearningResources.elm new file mode 100644 index 0000000..3dcfe45 --- /dev/null +++ b/src/LearningResources.elm @@ -0,0 +1,11 @@ +module LearningResources exposing (..) + +import LearningResources.Types exposing (..) + +getResourcesByTag : EntityTag -> Database -> List Resource +getResourcesByTag tag database = + List.filter (\resource -> List.member tag resource.teaches) database.resources + +getMetadata : EntityTag -> Database -> Maybe CompiledMeta +getMetadata tag database = + List.head <| List.filter (\meta -> meta.id == tag) database.metadata \ No newline at end of file diff --git a/src/LearningResources/Json.elm b/src/LearningResources/Json.elm index 6c89658..4f6eafa 100644 --- a/src/LearningResources/Json.elm +++ b/src/LearningResources/Json.elm @@ -1,8 +1,10 @@ module LearningResources.Json exposing - ( encodeCompiledMeta, encodeDatabase, encodeEntityTag, encodeFreePricing, encodePaidPricing, encodePricing - , encodeResource, encodeResourceCategory - , decodeCompiledMeta, decodeDatabase, decodeEntityTag, decodeFreePricing, decodePaidPricing, decodePricing - , decodeResource, decodeResourceCategory + ( encodeCategoryLanguage, encodeCategoryPlatform, encodeCategoryTool, encodeCompiledMeta, encodeDatabase + , encodeEntityTag, encodeFreePricing, encodeLanguageDomain, encodeMeta, encodePaidPricing, encodePricing + , encodeProgrammingParadigm, encodeResource, encodeResourceCategory, encodeResourceType + , decodeCategoryLanguage, decodeCategoryPlatform, decodeCategoryTool, decodeCompiledMeta, decodeDatabase + , decodeEntityTag, decodeFreePricing, decodeLanguageDomain, decodeMeta, decodePaidPricing, decodePricing + , decodeProgrammingParadigm, decodeResource, decodeResourceCategory, decodeResourceType ) {-| @@ -10,14 +12,16 @@ module LearningResources.Json exposing ## Encoders -@docs encodeCompiledMeta, encodeDatabase, encodeEntityTag, encodeFreePricing, encodePaidPricing, encodePricing -@docs encodeResource, encodeResourceCategory +@docs encodeCategoryLanguage, encodeCategoryPlatform, encodeCategoryTool, encodeCompiledMeta, encodeDatabase +@docs encodeEntityTag, encodeFreePricing, encodeLanguageDomain, encodeMeta, encodePaidPricing, encodePricing +@docs encodeProgrammingParadigm, encodeResource, encodeResourceCategory, encodeResourceType ## Decoders -@docs decodeCompiledMeta, decodeDatabase, decodeEntityTag, decodeFreePricing, decodePaidPricing, decodePricing -@docs decodeResource, decodeResourceCategory +@docs decodeCategoryLanguage, decodeCategoryPlatform, decodeCategoryTool, decodeCompiledMeta, decodeDatabase +@docs decodeEntityTag, decodeFreePricing, decodeLanguageDomain, decodeMeta, decodePaidPricing, decodePricing +@docs decodeProgrammingParadigm, decodeResource, decodeResourceCategory, decodeResourceType -} @@ -27,14 +31,54 @@ import LearningResources.Types import OpenApi.Common +decodeResourceType : Json.Decode.Decoder LearningResources.Types.ResourceType +decodeResourceType = + Json.Decode.andThen + (\andThenUnpack -> + case + LearningResources.Types.resourceTypeFromString andThenUnpack + of + Maybe.Just a -> + Json.Decode.succeed a + + Maybe.Nothing -> + Json.Decode.fail + (andThenUnpack ++ " is not a valid ResourceType") + ) + Json.Decode.string + + +encodeResourceType : LearningResources.Types.ResourceType -> Json.Encode.Value +encodeResourceType rec = + Json.Encode.string (LearningResources.Types.resourceTypeToString rec) + + decodeResourceCategory : Json.Decode.Decoder LearningResources.Types.ResourceCategory decodeResourceCategory = - Json.Decode.value + Json.Decode.oneOf + [ Json.Decode.map + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryLanguage + decodeCategoryLanguage + , Json.Decode.map + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryPlatform + decodeCategoryPlatform + , Json.Decode.map + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryTool + decodeCategoryTool + ] encodeResourceCategory : LearningResources.Types.ResourceCategory -> Json.Encode.Value -encodeResourceCategory = - Basics.identity +encodeResourceCategory rec = + case rec of + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryLanguage content -> + encodeCategoryLanguage content + + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryPlatform content -> + encodeCategoryPlatform content + + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryTool content -> + encodeCategoryTool content decodeResource : Json.Decode.Decoder LearningResources.Types.Resource @@ -69,15 +113,7 @@ decodeResource = |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field "pricing" - (Json.Decode.oneOf - [ Json.Decode.map - LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing - decodeFreePricing - , Json.Decode.map - LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing - decodePaidPricing - ] - ) + decodePricing ) |> OpenApi.Common.jsonDecodeAndMap (OpenApi.Common.decodeOptionalField @@ -97,7 +133,7 @@ decodeResource = (Json.Decode.field "type" (Json.Decode.list - Json.Decode.string + decodeResourceType ) ) |> OpenApi.Common.jsonDecodeAndMap @@ -121,27 +157,42 @@ encodeResource rec = (\mapUnpack -> ( "description", Json.Encode.string mapUnpack )) rec.description , Just ( "name", Json.Encode.string rec.name ) - , Just - ( "pricing" - , case rec.pricing of - LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing content -> - encodeFreePricing content - - LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing content -> - encodePaidPricing content - ) + , Just ( "pricing", encodePricing rec.pricing ) , Maybe.map (\mapUnpack -> ( "pros", Json.Encode.list Json.Encode.string mapUnpack ) ) rec.pros , Just ( "teaches", Json.Encode.list encodeEntityTag rec.teaches ) - , Just ( "type", Json.Encode.list Json.Encode.string rec.type_ ) + , Just ( "type", Json.Encode.list encodeResourceType rec.type_ ) , Just ( "url", Json.Encode.string rec.url ) ] ) +decodeProgrammingParadigm : Json.Decode.Decoder LearningResources.Types.ProgrammingParadigm +decodeProgrammingParadigm = + Json.Decode.andThen + (\andThenUnpack -> + case + LearningResources.Types.programmingParadigmFromString + andThenUnpack + of + Maybe.Just a -> + Json.Decode.succeed a + + Maybe.Nothing -> + Json.Decode.fail + (andThenUnpack ++ " is not a valid ProgrammingParadigm") + ) + Json.Decode.string + + +encodeProgrammingParadigm : LearningResources.Types.ProgrammingParadigm -> Json.Encode.Value +encodeProgrammingParadigm rec = + Json.Encode.string (LearningResources.Types.programmingParadigmToString rec) + + decodePricing : Json.Decode.Decoder LearningResources.Types.Pricing decodePricing = Json.Decode.oneOf @@ -182,6 +233,84 @@ encodePaidPricing rec = ] +decodeMeta : Json.Decode.Decoder LearningResources.Types.Meta +decodeMeta = + Json.Decode.succeed + (\category description domains emoji name -> + { category = category + , description = description + , domains = domains + , emoji = emoji + , name = name + } + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "category" decodeResourceCategory) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "description" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "domains" + (Json.Decode.list + decodeLanguageDomain + ) + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "emoji" + Json.Decode.string + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "name" + Json.Decode.string + ) + + +encodeMeta : LearningResources.Types.Meta -> Json.Encode.Value +encodeMeta rec = + Json.Encode.object + (List.filterMap + Basics.identity + [ Just ( "category", encodeResourceCategory rec.category ) + , Just ( "description", Json.Encode.string rec.description ) + , Just + ( "domains" + , Json.Encode.list encodeLanguageDomain rec.domains + ) + , Maybe.map + (\mapUnpack -> ( "emoji", Json.Encode.string mapUnpack )) + rec.emoji + , Just ( "name", Json.Encode.string rec.name ) + ] + ) + + +decodeLanguageDomain : Json.Decode.Decoder LearningResources.Types.LanguageDomain +decodeLanguageDomain = + Json.Decode.andThen + (\andThenUnpack -> + case + LearningResources.Types.languageDomainFromString andThenUnpack + of + Maybe.Just a -> + Json.Decode.succeed a + + Maybe.Nothing -> + Json.Decode.fail + (andThenUnpack ++ " is not a valid LanguageDomain") + ) + Json.Decode.string + + +encodeLanguageDomain : LearningResources.Types.LanguageDomain -> Json.Encode.Value +encodeLanguageDomain rec = + Json.Encode.string (LearningResources.Types.languageDomainToString rec) + + decodeFreePricing : Json.Decode.Decoder LearningResources.Types.FreePricing decodeFreePricing = Json.Decode.succeed @@ -225,230 +354,20 @@ decodeDatabase = |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field "metadata" - (Json.Decode.list - (Json.Decode.succeed - (\category description domains emoji id name -> - { category = category - , description = - description - , domains = domains - , emoji = emoji - , id = id - , name = name - } - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "category" - Json.Decode.value - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "description" - Json.Decode.string - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "domains" - (Json.Decode.list - Json.Decode.string - ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (OpenApi.Common.decodeOptionalField - "emoji" - Json.Decode.string - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "id" - decodeEntityTag - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "name" - Json.Decode.string - ) - ) - ) + (Json.Decode.list decodeCompiledMeta) ) |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field "resources" - (Json.Decode.list - (Json.Decode.succeed - (\cons description name pricing pros teaches type_ url -> - { cons = - cons - , description = - description - , name = - name - , pricing = - pricing - , pros = - pros - , teaches = - teaches - , type_ = - type_ - , url = - url - } - ) - |> OpenApi.Common.jsonDecodeAndMap - (OpenApi.Common.decodeOptionalField - "cons" - (Json.Decode.list - Json.Decode.string - ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (OpenApi.Common.decodeOptionalField - "description" - Json.Decode.string - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "name" - Json.Decode.string - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "pricing" - (Json.Decode.oneOf - [ Json.Decode.map - LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing - decodeFreePricing - , Json.Decode.map - LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing - decodePaidPricing - ] - ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (OpenApi.Common.decodeOptionalField - "pros" - (Json.Decode.list - Json.Decode.string - ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "teaches" - (Json.Decode.list - decodeEntityTag - ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "type" - (Json.Decode.list - Json.Decode.string - ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "url" - Json.Decode.string - ) - ) - ) + (Json.Decode.list decodeResource) ) encodeDatabase : LearningResources.Types.Database -> Json.Encode.Value encodeDatabase rec = Json.Encode.object - [ ( "metadata" - , Json.Encode.list - (\rec0 -> - Json.Encode.object - (List.filterMap - Basics.identity - [ Just - ( "category", Basics.identity rec0.category ) - , Just - ( "description" - , Json.Encode.string rec0.description - ) - , Just - ( "domains" - , Json.Encode.list - Json.Encode.string - rec0.domains - ) - , Maybe.map - (\mapUnpack -> - ( "emoji", Json.Encode.string mapUnpack ) - ) - rec0.emoji - , Just ( "id", encodeEntityTag rec0.id ) - , Just ( "name", Json.Encode.string rec0.name ) - ] - ) - ) - rec.metadata - ) - , ( "resources" - , Json.Encode.list - (\rec0 -> - Json.Encode.object - (List.filterMap - Basics.identity - [ Maybe.map - (\mapUnpack -> - ( "cons" - , Json.Encode.list - Json.Encode.string - mapUnpack - ) - ) - rec0.cons - , Maybe.map - (\mapUnpack -> - ( "description" - , Json.Encode.string mapUnpack - ) - ) - rec0.description - , Just ( "name", Json.Encode.string rec0.name ) - , Just - ( "pricing" - , case rec0.pricing of - LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing content -> - encodeFreePricing content - - LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing content -> - encodePaidPricing content - ) - , Maybe.map - (\mapUnpack -> - ( "pros" - , Json.Encode.list - Json.Encode.string - mapUnpack - ) - ) - rec0.pros - , Just - ( "teaches" - , Json.Encode.list - encodeEntityTag - rec0.teaches - ) - , Just - ( "type" - , Json.Encode.list - Json.Encode.string - rec0.type_ - ) - , Just ( "url", Json.Encode.string rec0.url ) - ] - ) - ) - rec.resources - ) + [ ( "metadata", Json.Encode.list encodeCompiledMeta rec.metadata ) + , ( "resources", Json.Encode.list encodeResource rec.resources ) ] @@ -465,7 +384,7 @@ decodeCompiledMeta = } ) |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field "category" Json.Decode.value) + (Json.Decode.field "category" decodeResourceCategory) |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field "description" @@ -475,7 +394,7 @@ decodeCompiledMeta = (Json.Decode.field "domains" (Json.Decode.list - Json.Decode.string + decodeLanguageDomain ) ) |> OpenApi.Common.jsonDecodeAndMap @@ -500,10 +419,12 @@ encodeCompiledMeta rec = Json.Encode.object (List.filterMap Basics.identity - [ Just ( "category", Basics.identity rec.category ) + [ Just ( "category", encodeResourceCategory rec.category ) , Just ( "description", Json.Encode.string rec.description ) , Just - ( "domains", Json.Encode.list Json.Encode.string rec.domains ) + ( "domains" + , Json.Encode.list encodeLanguageDomain rec.domains + ) , Maybe.map (\mapUnpack -> ( "emoji", Json.Encode.string mapUnpack )) rec.emoji @@ -511,3 +432,58 @@ encodeCompiledMeta rec = , Just ( "name", Json.Encode.string rec.name ) ] ) + + +decodeCategoryTool : Json.Decode.Decoder LearningResources.Types.CategoryTool +decodeCategoryTool = + Json.Decode.succeed + (\type_ -> { type_ = type_ }) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "type" + Json.Decode.string + ) + + +encodeCategoryTool : LearningResources.Types.CategoryTool -> Json.Encode.Value +encodeCategoryTool rec = + Json.Encode.object [ ( "type", Json.Encode.string rec.type_ ) ] + + +decodeCategoryPlatform : Json.Decode.Decoder LearningResources.Types.CategoryPlatform +decodeCategoryPlatform = + Json.Decode.succeed + (\type_ -> { type_ = type_ }) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "type" + Json.Decode.string + ) + + +encodeCategoryPlatform : LearningResources.Types.CategoryPlatform -> Json.Encode.Value +encodeCategoryPlatform rec = + Json.Encode.object [ ( "type", Json.Encode.string rec.type_ ) ] + + +decodeCategoryLanguage : Json.Decode.Decoder LearningResources.Types.CategoryLanguage +decodeCategoryLanguage = + Json.Decode.succeed + (\paradigms type_ -> { paradigms = paradigms, type_ = type_ }) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "paradigms" + (Json.Decode.list decodeProgrammingParadigm) + ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "type" Json.Decode.string) + + +encodeCategoryLanguage : LearningResources.Types.CategoryLanguage -> Json.Encode.Value +encodeCategoryLanguage rec = + Json.Encode.object + [ ( "paradigms" + , Json.Encode.list encodeProgrammingParadigm rec.paradigms + ) + , ( "type", Json.Encode.string rec.type_ ) + ] diff --git a/src/LearningResources/Types.elm b/src/LearningResources/Types.elm index 4010485..1b5de6a 100644 --- a/src/LearningResources/Types.elm +++ b/src/LearningResources/Types.elm @@ -1,7 +1,11 @@ module LearningResources.Types exposing - ( CompiledMeta, Database, FreePricing, PaidPricing, Pricing, Resource, ResourceCategory - , EntityTag(..), entityTagFromString, entityTagToString, entityTagVariants - , FreePricing_Or_PaidPricing(..) + ( CategoryLanguage, CategoryPlatform, CategoryTool, CompiledMeta, Database, FreePricing, Meta, PaidPricing + , Pricing, Resource, ResourceCategory + , EntityTag(..), LanguageDomain(..), ProgrammingParadigm(..), ResourceType(..), entityTagFromString, entityTagToString + , entityTagVariants, languageDomainFromString, languageDomainToString, languageDomainVariants + , programmingParadigmFromString, programmingParadigmToString, programmingParadigmVariants + , resourceTypeFromString, resourceTypeToString, resourceTypeVariants + , CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool(..), FreePricing_Or_PaidPricing(..) ) {-| @@ -9,47 +13,98 @@ module LearningResources.Types exposing ## Aliases -@docs CompiledMeta, Database, FreePricing, PaidPricing, Pricing, Resource, ResourceCategory +@docs CategoryLanguage, CategoryPlatform, CategoryTool, CompiledMeta, Database, FreePricing, Meta, PaidPricing +@docs Pricing, Resource, ResourceCategory ## Enum -@docs EntityTag, entityTagFromString, entityTagToString, entityTagVariants +@docs EntityTag, LanguageDomain, ProgrammingParadigm, ResourceType, entityTagFromString, entityTagToString +@docs entityTagVariants, languageDomainFromString, languageDomainToString, languageDomainVariants +@docs programmingParadigmFromString, programmingParadigmToString, programmingParadigmVariants +@docs resourceTypeFromString, resourceTypeToString, resourceTypeVariants ## One of -@docs FreePricing_Or_PaidPricing +@docs CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool, FreePricing_Or_PaidPricing -} -import Json.Encode - -{-| The category of the resource +{-| The type of the resource -} -type alias ResourceCategory = - Json.Encode.Value +type ResourceType + = ResourceType__Article + | ResourceType__Book + | ResourceType__Course + | ResourceType__InteractiveTutorial + | ResourceType__Video -{-| Fields: +resourceTypeToString : ResourceType -> String +resourceTypeToString value = + case value of + ResourceType__Article -> + "Article" - - cons: Array of cons for using the resource, e.g. 'only teaches the basics rather than more advanced concepts' + ResourceType__Book -> + "Book" - - description: A brief description of the resource + ResourceType__Course -> + "Course" - - name: The official name of the resource + ResourceType__InteractiveTutorial -> + "Interactive Tutorial" - - pricing: Details about the cost of the resource. + ResourceType__Video -> + "Video" - - pros: Array of pros for using the resource, e.g. 'explains difficult concepts with good analogies' - - teaches: The topics that this resource teaches. +resourceTypeFromString : String -> Maybe ResourceType +resourceTypeFromString value = + case value of + "Article" -> + Just ResourceType__Article - - type: The type(s) of the resource, e.g. 'Video', 'Book', 'Course', etc. + "Book" -> + Just ResourceType__Book + + "Course" -> + Just ResourceType__Course + + "Interactive Tutorial" -> + Just ResourceType__InteractiveTutorial + + "Video" -> + Just ResourceType__Video + + _ -> + Nothing + + +resourceTypeVariants : List ResourceType +resourceTypeVariants = + [ ResourceType__Article + , ResourceType__Book + , ResourceType__Course + , ResourceType__InteractiveTutorial + , ResourceType__Video + ] + + +type alias ResourceCategory = + CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool - A list of: The type of the resource +{-| Fields: + + - cons: Array of cons for using the resource, e.g. 'only teaches the basics rather than more advanced concepts' + - description: A brief description of the resource + - name: The official name of the resource + - pros: Array of pros for using the resource, e.g. 'explains difficult concepts with good analogies' + - teaches: The topics that this resource teaches. + - type: The type(s) of the resource, e.g. 'Video', 'Book', 'Course', etc. - url: URL to the resource -} @@ -57,14 +112,67 @@ type alias Resource = { cons : Maybe (List String) , description : Maybe String , name : String - , pricing : FreePricing_Or_PaidPricing + , pricing : Pricing , pros : Maybe (List String) , teaches : List EntityTag - , type_ : List String + , type_ : List ResourceType , url : String } +{-| A programming paradigm. +-} +type ProgrammingParadigm + = ProgrammingParadigm__FunctionalProgramming + | ProgrammingParadigm__LogicProgramming + | ProgrammingParadigm__ObjectOrientedProgramming + | ProgrammingParadigm__ProceduralProgramming + + +programmingParadigmToString : ProgrammingParadigm -> String +programmingParadigmToString value = + case value of + ProgrammingParadigm__FunctionalProgramming -> + "Functional Programming" + + ProgrammingParadigm__LogicProgramming -> + "Logic Programming" + + ProgrammingParadigm__ObjectOrientedProgramming -> + "Object-Oriented Programming" + + ProgrammingParadigm__ProceduralProgramming -> + "Procedural Programming" + + +programmingParadigmFromString : String -> Maybe ProgrammingParadigm +programmingParadigmFromString value = + case value of + "Functional Programming" -> + Just ProgrammingParadigm__FunctionalProgramming + + "Logic Programming" -> + Just ProgrammingParadigm__LogicProgramming + + "Object-Oriented Programming" -> + Just ProgrammingParadigm__ObjectOrientedProgramming + + "Procedural Programming" -> + Just ProgrammingParadigm__ProceduralProgramming + + _ -> + Nothing + + +programmingParadigmVariants : List ProgrammingParadigm +programmingParadigmVariants = + [ ProgrammingParadigm__FunctionalProgramming + , ProgrammingParadigm__LogicProgramming + , ProgrammingParadigm__ObjectOrientedProgramming + , ProgrammingParadigm__ProceduralProgramming + ] + + {-| Details about the cost of the resource. -} type alias Pricing = @@ -81,6 +189,108 @@ type alias PaidPricing = { amount : Float, model : String } +{-| Fields: + + - description: A brief description of the language, tool, etc being described by this metadata. + - domains: The domain(s) that the entity is commonly used in, or best suited for. + - emoji: A Unicode emoji glyph to represent the entity, if applicable. If there is no suitable (Unicode) emoji, omit this field. Consumers may choose to ignore this field, or replace it with a custom image. + - name: The name of the language, tool, etc being described by this metadata. + +-} +type alias Meta = + { category : ResourceCategory + , description : String + , domains : List LanguageDomain + , emoji : Maybe String + , name : String + } + + +{-| A domain that a programming language may be used in. +-} +type LanguageDomain + = LanguageDomain__DataScience + | LanguageDomain__DevOps + | LanguageDomain__GameDevelopment + | LanguageDomain__GeneralPurpose + | LanguageDomain__MobileDevelopment + | LanguageDomain__Scripting + | LanguageDomain__SystemsProgramming + | LanguageDomain__WebDevelopment + + +languageDomainToString : LanguageDomain -> String +languageDomainToString value = + case value of + LanguageDomain__DataScience -> + "Data Science" + + LanguageDomain__DevOps -> + "DevOps" + + LanguageDomain__GameDevelopment -> + "Game Development" + + LanguageDomain__GeneralPurpose -> + "General Purpose" + + LanguageDomain__MobileDevelopment -> + "Mobile Development" + + LanguageDomain__Scripting -> + "Scripting" + + LanguageDomain__SystemsProgramming -> + "Systems Programming" + + LanguageDomain__WebDevelopment -> + "Web Development" + + +languageDomainFromString : String -> Maybe LanguageDomain +languageDomainFromString value = + case value of + "Data Science" -> + Just LanguageDomain__DataScience + + "DevOps" -> + Just LanguageDomain__DevOps + + "Game Development" -> + Just LanguageDomain__GameDevelopment + + "General Purpose" -> + Just LanguageDomain__GeneralPurpose + + "Mobile Development" -> + Just LanguageDomain__MobileDevelopment + + "Scripting" -> + Just LanguageDomain__Scripting + + "Systems Programming" -> + Just LanguageDomain__SystemsProgramming + + "Web Development" -> + Just LanguageDomain__WebDevelopment + + _ -> + Nothing + + +languageDomainVariants : List LanguageDomain +languageDomainVariants = + [ LanguageDomain__DataScience + , LanguageDomain__DevOps + , LanguageDomain__GameDevelopment + , LanguageDomain__GeneralPurpose + , LanguageDomain__MobileDevelopment + , LanguageDomain__Scripting + , LanguageDomain__SystemsProgramming + , LanguageDomain__WebDevelopment + ] + + {-| Fields: - model: The Free(mium) Pricing Model of this resource. 'Free' should be used for resources where 100% (or close) of the content is free. 'Freemium' describes a pricing model where the core content is available for free, but features paid extensions. If the resource has a freemium model but the free portion is very limited, consider using 'Paid' instead and providing an estimated price for the full version. @@ -208,87 +418,56 @@ entityTagVariants = {-| Fields: - metadata: List of all entities in the system - - A list of: - Fields: - - - category: The category of the resource - - description: A brief description of the language, tool, etc being described by this metadata. - - domains: The domain(s) that the entity is commonly used in, or best suited for. - - A list of: A domain that a programming language may be used in. - - emoji: A Unicode emoji glyph to represent the entity, if applicable. If there is no suitable (Unicode) emoji, omit this field. Consumers may choose to ignore this field, or replace it with a custom image. - - id: The unique identifier of the entity - - name: The name of the language, tool, etc being described by this metadata. - - resources: List of all learning resources - A list of: - Fields: - - - cons: Array of cons for using the resource, e.g. 'only teaches the basics rather than more advanced concepts' - - description: A brief description of the resource - - name: The official name of the resource - - pricing: Details about the cost of the resource. - - pros: Array of pros for using the resource, e.g. 'explains difficult concepts with good analogies' - - teaches: The topics that this resource teaches. - - type: The type(s) of the resource, e.g. 'Video', 'Book', 'Course', etc. - - A list of: The type of the resource - - url: URL to the resource - -} type alias Database = - { metadata : - List - { category : Json.Encode.Value - , description : String - , domains : List String - , emoji : Maybe String - , id : EntityTag - , name : String - } - , resources : - List - { cons : Maybe (List String) - , description : Maybe String - , name : String - , pricing : FreePricing_Or_PaidPricing - , pros : Maybe (List String) - , teaches : List EntityTag - , type_ : List String - , url : String - } - } + { metadata : List CompiledMeta, resources : List Resource } {-| Fields: - - category: The category of the resource - - description: A brief description of the language, tool, etc being described by this metadata. - - domains: The domain(s) that the entity is commonly used in, or best suited for. - - A list of: A domain that a programming language may be used in. - - emoji: A Unicode emoji glyph to represent the entity, if applicable. If there is no suitable (Unicode) emoji, omit this field. Consumers may choose to ignore this field, or replace it with a custom image. - - - id: The unique identifier of the entity - - name: The name of the language, tool, etc being described by this metadata. -} type alias CompiledMeta = - { category : Json.Encode.Value + { category : ResourceCategory , description : String - , domains : List String + , domains : List LanguageDomain , emoji : Maybe String , id : EntityTag , name : String } +type alias CategoryTool = + { type_ : String } + + +{-| A platform used to learn programming, which may teach a variety of languages and concepts. +-} +type alias CategoryPlatform = + { type_ : String } + + +{-| Fields: + + - paradigms: The programming paradigms that this language focuses on, e.g. 'Object-Oriented Programming', 'Functional Programming', 'Procedural Programming', etc. + +-} +type alias CategoryLanguage = + { paradigms : List ProgrammingParadigm, type_ : String } + + +type CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool + = CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryLanguage CategoryLanguage + | CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryPlatform CategoryPlatform + | CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryTool CategoryTool + + type FreePricing_Or_PaidPricing = FreePricing_Or_PaidPricing__FreePricing FreePricing | FreePricing_Or_PaidPricing__PaidPricing PaidPricing diff --git a/src/Pages/Learning.elm b/src/Pages/Learning.elm index 0369603..6ae8706 100644 --- a/src/Pages/Learning.elm +++ b/src/Pages/Learning.elm @@ -2,10 +2,11 @@ module Pages.Learning exposing (Model, Msg, page) import Api import Effect exposing (Effect) -import Html.Styled as Html +import Html.Styled as Html exposing (Html) import Html.Styled.Attributes as Attr +import Json.Encode import Layouts -import LearningResources +import LearningResources.Types as LearningResources import Page exposing (Page) import Route exposing (Route) import Route.Path @@ -15,7 +16,8 @@ import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import View exposing (View) - +import Dict +import Html.Styled.Events exposing (onInput) page : Shared.Model -> Route () -> Page Model Msg page shared _ = @@ -25,31 +27,31 @@ page shared _ = , subscriptions = subscriptions , view = view shared } - |> Page.withLayout Layouts.Global + |> Page.withLayout (\_ -> Layouts.Global {}) + + + +-- INIT & STATE type alias Model = - {} + { searchQuery : String } type Msg - = NoOp + = SearchQueryChanged String init : () -> ( Model, Effect Msg ) init _ = - ( {} - , Effect.none - ) + ( { searchQuery = "" }, Effect.none ) update : Msg -> Model -> ( Model, Effect Msg ) update msg model = case msg of - NoOp -> - ( model - , Effect.none - ) + SearchQueryChanged query -> + ( { model | searchQuery = query }, Effect.none ) subscriptions : Model -> Sub Msg @@ -57,86 +59,158 @@ subscriptions _ = Sub.none + +-- VIEW + + view : Shared.Model -> Model -> View Msg -view shared _ = - { title = "Learning" +view shared model = + { title = "Learning Directory" , body = - case shared.learningIndex of - SharedModel.Loading -> - [ Html.text "Loading learning resources..." ] + [ Html.div [ Attr.css [ Tw.pt_12, Tw.pb_24, Tw.max_w_7xl, Tw.mx_auto ] ] + [ viewHeader model.searchQuery + , case shared.learningDatabase of + SharedModel.Loading -> + Html.div [ Attr.css [ Tw.text_center, Tw.text_color Tw.gray_400 ] ] [ Html.text "Loading learning directory..." ] - SharedModel.Failure error -> - [ Html.text "Failed to load learning resources :(" - , Html.div [] [ Html.text (Api.toUserFriendlyMessage error) ] - ] + SharedModel.Failure _ -> + Html.div [ Attr.css [ Tw.text_center, Tw.text_color Tw.red_400 ] ] [ Html.text "Failed to load directory." ] - SharedModel.Success entries -> - [ Html.div [] - [ Html.h1 [] [ Html.text "Learning Resources" ] - , Html.div - [ Attr.class "learning-cards" ] - (List.map viewCard entries) - ] - ] + SharedModel.Success db -> + viewCategorizedGrid model.searchQuery db.metadata + ] + ] } - -viewCardGrid = - Html.div - [ Attr.css - [ Tw.grid - , Tw.grid_cols_1 - , Tw.md__grid_cols_3 -- 3 columns on desktop - , Tw.gap_8 - , Tw.mt_12 - ] +viewHeader : String -> Html Msg +viewHeader query = + Html.div [ Attr.css [ Tw.flex, Tw.flex_col, Tw.items_center, Tw.text_center, Tw.mb_16 ] ] + [ Html.h1 + [ Attr.css [ Tw.text_5xl, Tw.font_bold, Tw.tracking_widest, Tw.uppercase, Tw.mb_4 ] ] + [ Html.text "LEARNING RESOURCES" ] + , Html.p + [ Attr.css [ Tw.text_lg, Tw.text_color Tw.gray_400, Tw.max_w_2xl, Tw.mb_8 ] ] + [ Html.text "Explore our curated directory of programming languages, tools, and concepts." ] + , Html.input + [ Attr.value query + , onInput SearchQueryChanged + , Attr.placeholder "Search topics or domains (e.g., 'Rust', 'Web')..." + , Attr.css + [ Tw.w_full + , Tw.max_w_lg + , Tw.p_4 + , Tw.rounded_xl + , Tw.bg_color Tw.slate_800 + , Tw.border + , Tw.border_color Tw.slate_700 + , Tw.text_color Tw.white + -- , Tw.focus__border_fuchsia_500 + -- , Tw.focus__outline_none + ] + ] + [] ] - [ viewCard "Web Frontend" - , viewCard "Backend" - , viewCard "Systems" + + +viewCategorizedGrid : String -> List LearningResources.CompiledMeta -> Html Msg +viewCategorizedGrid query metadata = + let + q = + String.toLower query + + -- Filter by name or domains + filtered = + List.filter + (\meta -> + String.contains q (String.toLower meta.name) + || List.any (\domain -> String.contains q (String.toLower (LearningResources.languageDomainToString domain))) meta.domains + ) + metadata + + -- Group by category. (Decoding the Json.Encode.Value to a string) + grouped = + List.foldl + (\meta acc -> + let + catStr = + categoryToString meta.category + in + Dict.update catStr + (\maybeList -> Just (Maybe.withDefault [] maybeList ++ [ meta ])) + acc + ) + Dict.empty + filtered + in + Html.div [ Attr.css [ Tw.flex, Tw.flex_col, Tw.gap_16 ] ] + (Dict.toList grouped + |> List.map (\( category, items ) -> viewCategorySection category items) + ) + + +viewCategorySection : String -> List LearningResources.CompiledMeta -> Html msg +viewCategorySection category items = + Html.div [] + [ Html.h2 + [ Attr.css [ Tw.text_2xl, Tw.font_bold, Tw.mb_6, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_2 ] ] + [ Html.text category ] + , Html.div + [ Attr.css [ Tw.grid, Tw.grid_cols_1, Tw.gap_6 ] ] + (List.map viewTopicCard items) ] -viewCard : String -> Html msg -viewCard title = - div - [ css +viewTopicCard : LearningResources.CompiledMeta -> Html msg +viewTopicCard meta = + Html.a + [ Route.Path.href (Route.Path.Learning_Resource_ { resource = LearningResources.entityTagToString meta.id }) + |> Attr.fromUnstyled + , Attr.css [ Tw.flex , Tw.flex_col + , Tw.bg_color Tw.slate_700 , Tw.rounded_xl - , Tw.overflow_hidden + , Tw.p_6 , Tw.border - , Tw.border_slate_700 - ] + , Tw.border_color Tw.slate_700 + , Tw.transition_colors + , Tw.cursor_pointer + ] ] - [ -- Top white half - div [ css [ Tw.bg_white, Tw.h_32, Tw.w_full ] ] [] - -- Bottom dark half - , div [ css [ Tw.bg_slate_800, Tw.p_4, Tw.flex_grow ] ] - [ Html.h3 [ css [ Tw.font_bold, Tw.text_lg, Tw.mb_2 ] ] [ text title ] - , Html.p [ css [ Tw.text_xs, Tw.text_gray_400 ] ] - [ text "This is the front-end website that you are viewing right now..." ] + [ Html.div [ Attr.css [ Tw.flex, Tw.items_center, Tw.mb_4, Tw.gap_3 ] ] + [ Html.div [ Attr.css [ Tw.text_3xl ] ] [ Html.text (Maybe.withDefault "📄" meta.emoji) ] + , Html.h3 [ Attr.css [ Tw.font_bold, Tw.text_xl, Tw.text_color Tw.white ] ] [ Html.text meta.name ] ] + , Html.p [ Attr.css [ Tw.text_sm, Tw.text_color Tw.gray_400, Tw.flex_grow, Tw.mb_6 ] ] + [ Html.text meta.description ] + , Html.div [ Attr.css [ Tw.flex, Tw.flex_wrap, Tw.gap_2 ] ] + (List.map (\domain -> viewBadge (LearningResources.languageDomainToString domain)) meta.domains) ] -viewCard : LearningResources.ResourceIndexEntry -> Html.Html msg -viewCard entry = - Html.div +viewBadge : String -> Html msg +viewBadge label = + Html.span [ Attr.css - [ Tw.bg_color Tw.dd_deepblue - , Tw.text_color Tw.white - , Tw.border - , Tw.rounded_xl - , Tw.p_6 - ] - ] - [ Html.article - [ Attr.class "learning-card" ] - [ Html.h3 [] [ Html.text entry.name ] - , Html.a - [ Route.Path.href (Route.Path.Learning_Resource_ { resource = entry.name }) - |> Attr.fromUnstyled - ] - [ Html.text "Click to browse resources" ] + [ Tw.text_xs + , Tw.font_medium + , Tw.bg_color Tw.slate_700 + , Tw.text_color Tw.slate_300 + , Tw.px_2 + , Tw.py_1 + , Tw.rounded_full ] ] + [ Html.text label ] + + +categoryToString : LearningResources.ResourceCategory -> String +categoryToString categoryUnion = + case categoryUnion of + LearningResources.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryLanguage _ -> + "Language" + + LearningResources.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryPlatform _ -> + "Platform" + + LearningResources.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryTool _ -> + "Tool" \ No newline at end of file diff --git a/src/Pages/Learning/Resource_.elm b/src/Pages/Learning/Resource_.elm index b605825..1a1df1a 100644 --- a/src/Pages/Learning/Resource_.elm +++ b/src/Pages/Learning/Resource_.elm @@ -1,125 +1,184 @@ module Pages.Learning.Resource_ exposing (Model, Msg, page) -import Api -import Dict -import Effect exposing (Effect, sendSharedMsg) -import Html.Styled as Html -import Http +import Effect exposing (Effect) +import Html.Styled as Html exposing (Html, div, span, text) +import Html.Styled.Attributes as Attr exposing (css, href, target) import Layouts -import LearningResources +import LearningResources.Types as LearningResources import Page exposing (Page) import Route exposing (Route) +import Route.Path import Shared import Shared.Model as SharedModel -import Shared.Msg +import Tailwind.Theme as Tw +import Tailwind.Utilities as Tw import View exposing (View) page : Shared.Model -> Route { resource : String } -> Page Model Msg page shared route = Page.new - { init = \() -> init shared route.params - , update = update - , subscriptions = subscriptions + { init = \_ -> ( {}, Effect.none ) + , update = \_ model -> ( model, Effect.none ) + , subscriptions = \_ -> Sub.none , view = view shared route.params } - |> Page.withLayout (\_ -> Layouts.Global {}) - - - --- INIT + |> Page.withLayout (\_ -> Layouts.Global {}) type alias Model = - { resourceInfo : ResourceInfo, resourceId : String } - - -type ResourceInfo - = NotFound - | Loading - | Found LearningResources.LearningResourcesSet - - -init : Shared.Model -> { resource : String } -> ( Model, Effect Msg ) -init model route = - case Dict.get route.resource model.learningResources of - Nothing -> - ( { resourceInfo = Loading, resourceId = route.resource } - , Api.getLearningResource { name = route.resource, onResponse = LearningResourceResponded } - ) - - Just info -> - ( { resourceInfo = sharedResourceInfoToResourceInfo info, resourceId = route.resource } - , Effect.none - ) - - -sharedResourceInfoToResourceInfo : SharedModel.ResourceInfo -> ResourceInfo -sharedResourceInfoToResourceInfo model = - case model of - SharedModel.NotFound -> - NotFound - - SharedModel.Found resourcesSet -> - Found resourcesSet - - - --- UPDATE + {} type Msg - = LearningResourceResponded (Result Http.Error LearningResources.LearningResourcesSet) + = NoOp -update : Msg -> Model -> ( Model, Effect Msg ) -update msg model = - case msg of - LearningResourceResponded (Ok resourcesSet) -> - ( { model | resourceInfo = Found resourcesSet } - , Effect.sendSharedMsg (Shared.Msg.CacheLearningResource ( model.resourceId, resourcesSet )) - ) - LearningResourceResponded (Err _) -> - ( { model | resourceInfo = NotFound } - , Effect.none - ) - - - --- SUBSCRIPTIONS - - -subscriptions : Model -> Sub Msg -subscriptions model = - Sub.none +-- VIEW +view : Shared.Model -> { resource : String } -> Model -> View Msg +view shared route _ = + case shared.learningDatabase of + SharedModel.Loading -> + { title = "Loading...", body = [ text "Loading resources..." ] } + + SharedModel.Failure _ -> + { title = "Error", body = [ text "Failed to load database." ] } + + SharedModel.Success db -> + case LearningResources.entityTagFromString route.resource of + Nothing -> + { title = "Not Found", body = [ text "Topic not found." ] } + + Just tag -> + let + maybeMeta = + List.filter (\m -> m.id == tag) db.metadata |> List.head + + topicResources = + List.filter (\r -> List.member tag r.teaches) db.resources + in + { title = Maybe.map .name maybeMeta |> Maybe.withDefault "Topic" + , body = + [ div [ css [ Tw.max_w_5xl, Tw.mx_auto, Tw.py_12 ] ] + [ viewTopicHeader maybeMeta + , viewResourceGrid topicResources + ] + ] + } + + +viewTopicHeader : Maybe LearningResources.CompiledMeta -> Html Msg +viewTopicHeader maybeMeta = + case maybeMeta of + Nothing -> + text "" --- VIEW + Just meta -> + div [ css [ Tw.mb_12, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_8 ] ] + [ div [ css [ Tw.flex, Tw.items_center, Tw.gap_4, Tw.mb_4 ] ] + [ div [ css [ Tw.text_5xl ] ] [ text (Maybe.withDefault "" meta.emoji) ] + , Html.h1 [ css [ Tw.text_4xl, Tw.font_bold ] ] [ text meta.name ] + ] + , Html.p [ css [ Tw.text_xl, Tw.text_color Tw.gray_300, Tw.mb_4 ] ] [ text meta.description ] + ] -view : Shared.Model -> { resource : String } -> Model -> View Msg -view shared route model = - case model.resourceInfo of - Loading -> - { title = "Loading resource..." - , body = - [ Html.text "Loading learning resource..." ] - } - - NotFound -> - { title = "Resource not found" - , body = - [ Html.text "The requested learning resource could not be found." ] - } - - Found resourcesSet -> - { title = "pee" - , body = - [ Html.div [] - [ Html.text resourcesSet.name - , Html.text resourcesSet.description +viewResourceGrid : List LearningResources.Resource -> Html Msg +viewResourceGrid resources = + if List.isEmpty resources then + div [ css [ Tw.text_color Tw.gray_400, Tw.italic ] ] [ text "No resources found for this topic yet." ] + + else + div [ css [ Tw.grid, Tw.grid_cols_1, Tw.gap_6 ] ] + (List.map viewResourceCard resources) + + +viewResourceCard : LearningResources.Resource -> Html Msg +viewResourceCard resource = + div + [ css + [ Tw.bg_color Tw.slate_800 + , Tw.rounded_xl + , Tw.p_6 + , Tw.border + , Tw.border_color Tw.slate_700 + , Tw.flex + , Tw.flex_col + ] + ] + [ div [ css [ Tw.flex, Tw.justify_between, Tw.items_start, Tw.mb_2 ] ] + [ Html.h3 [ css [ Tw.font_bold, Tw.text_lg, Tw.text_color Tw.white ] ] [ text resource.name ] + , viewPricingBadge resource.pricing + ] + , div [ css [ Tw.flex, Tw.gap_2, Tw.mb_4 ] ] + (List.map viewTypeBadge resource.type_) + , Html.p [ css [ Tw.text_sm, Tw.text_color Tw.gray_400, Tw.flex_grow, Tw.mb_6 ] ] + [ text (Maybe.withDefault "No description available." resource.description) ] + , Html.a + [ href resource.url + , target "_blank" + , css + [ Tw.inline_block + , Tw.text_center + , Tw.bg_color Tw.fuchsia_600 + , Tw.text_color Tw.white + , Tw.font_bold + , Tw.py_2 + , Tw.px_4 + , Tw.rounded_lg + , Tw.transition_colors + ] + ] + [ text "Go to Resource" ] + ] + + +viewTypeBadge : LearningResources.ResourceType -> Html Msg +viewTypeBadge resourceType = + span + [ css + [ Tw.text_xs + , Tw.font_medium + , Tw.bg_color Tw.indigo_900 + , Tw.text_color Tw.indigo_200 + , Tw.px_2 + , Tw.py_1 + , Tw.rounded_md + ] + ] + [ text (LearningResources.resourceTypeToString resourceType) ] + + +viewPricingBadge : LearningResources.Pricing -> Html Msg +viewPricingBadge pricing = + case pricing of + LearningResources.FreePricing_Or_PaidPricing__FreePricing free -> + span + [ css + [ Tw.text_xs + , Tw.font_bold + , Tw.bg_color Tw.emerald_900 + , Tw.text_color Tw.emerald_400 + , Tw.px_2 + , Tw.py_1 + , Tw.rounded_md + ] + ] + [ text free.model ] + + LearningResources.FreePricing_Or_PaidPricing__PaidPricing paid -> + span + [ css + [ Tw.text_xs + , Tw.font_bold + , Tw.bg_color Tw.slate_700 + , Tw.text_color Tw.slate_300 + , Tw.px_2 + , Tw.py_1 + , Tw.rounded_md ] ] - } + [ text (paid.model ++ ": $" ++ String.fromFloat paid.amount) ] \ No newline at end of file diff --git a/src/Shared.elm b/src/Shared.elm index 54796c1..60bc674 100644 --- a/src/Shared.elm +++ b/src/Shared.elm @@ -44,7 +44,7 @@ type alias Model = init : Result Json.Decode.Error Flags -> Route () -> ( Model, Effect Msg ) init _ _ = - ( { learningIndex = Shared.Model.Loading, learningResources = Dict.empty } + ( { learningDatabase = Shared.Model.Loading } , Api.getLearningResourcesIndex { onResponse = Shared.Msg.LearningIndexResponded } ) @@ -62,22 +62,17 @@ update : Route () -> Msg -> Model -> ( Model, Effect Msg ) update _ msg model = case msg of Shared.Msg.LearningIndexResponded (Ok entries) -> - ( { model | learningIndex = Shared.Model.Success entries } + ( { model | learningDatabase = Shared.Model.Success entries } , Effect.none ) Shared.Msg.LearningIndexResponded (Err error) -> - ( { model | learningIndex = Shared.Model.Failure error } + ( { model | learningDatabase = Shared.Model.Failure error } , Effect.none ) - Shared.Msg.CacheLearningResource (resource, resourcesSet) -> - ( { model | learningResources = (Dict.insert resource (Shared.Model.Found resourcesSet) model.learningResources) } - , Effect.none - ) - Shared.Msg.RetryLearningIndex -> - ( { model | learningIndex = Shared.Model.Loading } + ( { model | learningDatabase = Shared.Model.Loading } , Api.getLearningResourcesIndex { onResponse = Shared.Msg.LearningIndexResponded } ) diff --git a/src/Shared/Model.elm b/src/Shared/Model.elm index 8cd247a..f400e80 100644 --- a/src/Shared/Model.elm +++ b/src/Shared/Model.elm @@ -1,7 +1,5 @@ module Shared.Model exposing - ( LearningIndexStatus(..) - , LearningResourcesData - , ResourceInfo(..) + ( LearningDatabaseStatus(..) , Model ) @@ -9,7 +7,7 @@ module Shared.Model exposing import Dict exposing (Dict) import Http -import LearningResources +import LearningResources.Types as LearningResources {-| Normally, this value would live in "Shared.elm" @@ -19,22 +17,13 @@ For that reason, both `Shared.Model` and `Shared.Msg` are in their own file, so they can be imported by `Effect.elm` -} -type LearningIndexStatus +type LearningDatabaseStatus = Loading - | Success (List LearningResources.ResourceIndexEntry) + | Success LearningResources.Database | Failure Http.Error -type alias LearningResourcesData - = (Dict String ResourceInfo) - - -type ResourceInfo - = NotFound - | Found LearningResources.LearningResourcesSet - type alias Model = - { learningIndex : LearningIndexStatus - , learningResources : LearningResourcesData + { learningDatabase : LearningDatabaseStatus } diff --git a/src/Shared/Msg.elm b/src/Shared/Msg.elm index d9035da..011fefe 100644 --- a/src/Shared/Msg.elm +++ b/src/Shared/Msg.elm @@ -3,7 +3,7 @@ module Shared.Msg exposing (Msg(..)) {-| -} import Http -import LearningResources +import LearningResources.Types as LearningResources {-| Normally, this value would live in "Shared.elm" @@ -14,7 +14,6 @@ own file, so they can be imported by `Effect.elm` -} type Msg - = LearningIndexResponded (Result Http.Error (List LearningResources.ResourceIndexEntry)) - | CacheLearningResource (String, LearningResources.LearningResourcesSet) + = LearningIndexResponded (Result Http.Error LearningResources.Database) | RetryLearningIndex | NoOp From a929d091229199b470d124be7293ef1a8e0ff8c7 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 13:14:06 +0100 Subject: [PATCH 15/48] feat: complete mvp of learning resources --- src/LearningResources/Emojis.elm | 49 +++++++++++ src/Pages/Learning.elm | 138 +++++++++++++++++++----------- src/Pages/Learning/Resource_.elm | 142 +++++++++++++++++++++---------- src/Theming.elm | 51 +++++++++++ static/base.css | 1 + tailwind.config.ts | 5 ++ 6 files changed, 290 insertions(+), 96 deletions(-) create mode 100644 src/LearningResources/Emojis.elm create mode 100644 src/Theming.elm diff --git a/src/LearningResources/Emojis.elm b/src/LearningResources/Emojis.elm new file mode 100644 index 0000000..99ab516 --- /dev/null +++ b/src/LearningResources/Emojis.elm @@ -0,0 +1,49 @@ +-- Backup emoji mappings for learning resources + + +module LearningResources.Emojis exposing (..) + +import LearningResources.Types as LearningResources + + +emojiForTag : LearningResources.EntityTag -> String +emojiForTag tag = + case tag of + LearningResources.EntityTag__Clojure -> + "🍵" + + LearningResources.EntityTag__Python -> + "🐍" + + LearningResources.EntityTag__Rust -> + "🦀" + + LearningResources.EntityTag__Haskell -> + "📐" + + LearningResources.EntityTag__Java -> + "☕" + + LearningResources.EntityTag__Kotlin -> + "🤖" + + _ -> + "📚" + + +emojiOrBackup : LearningResources.CompiledMeta -> String +emojiOrBackup meta = + case meta.emoji of + Just e -> + case String.length e of + 1 -> + e + + 2 -> + e + + _ -> + emojiForTag meta.id + + Nothing -> + emojiForTag meta.id diff --git a/src/Pages/Learning.elm b/src/Pages/Learning.elm index 6ae8706..465da2b 100644 --- a/src/Pages/Learning.elm +++ b/src/Pages/Learning.elm @@ -1,11 +1,14 @@ module Pages.Learning exposing (Model, Msg, page) -import Api +import Css +import Dict import Effect exposing (Effect) -import Html.Styled as Html exposing (Html) -import Html.Styled.Attributes as Attr +import Html.Styled as Html exposing (Html, div, span, text) +import Html.Styled.Attributes as Attr exposing (css) +import Html.Styled.Events exposing (onInput) import Json.Encode import Layouts +import LearningResources.Emojis as Emojis import LearningResources.Types as LearningResources import Page exposing (Page) import Route exposing (Route) @@ -15,9 +18,9 @@ import Shared.Model as SharedModel import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw +import Theming import View exposing (View) -import Dict -import Html.Styled.Events exposing (onInput) + page : Shared.Model -> Route () -> Page Model Msg page shared _ = @@ -67,17 +70,19 @@ view : Shared.Model -> Model -> View Msg view shared model = { title = "Learning Directory" , body = - [ Html.div [ Attr.css [ Tw.pt_12, Tw.pb_24, Tw.max_w_7xl, Tw.mx_auto ] ] + [ div [ css [ Tw.pt_12, Tw.pb_24, Tw.max_w_7xl, Tw.mx_auto, Tw.px_6 ] ] [ viewHeader model.searchQuery , case shared.learningDatabase of SharedModel.Loading -> - Html.div [ Attr.css [ Tw.text_center, Tw.text_color Tw.gray_400 ] ] [ Html.text "Loading learning directory..." ] + div [ css [ Theming.bodyFont, Tw.text_center, Tw.text_color Tw.gray_400 ] ] + [ text "Loading learning directory..." ] SharedModel.Failure _ -> - Html.div [ Attr.css [ Tw.text_center, Tw.text_color Tw.red_400 ] ] [ Html.text "Failed to load directory." ] + div [ css [ Theming.bodyFont, Tw.text_center, Tw.text_color Tw.red_400 ] ] + [ text "Failed to load directory." ] SharedModel.Success db -> - viewCategorizedGrid model.searchQuery db.metadata + viewCategorisedGrid model.searchQuery db.metadata ] ] } @@ -85,19 +90,20 @@ view shared model = viewHeader : String -> Html Msg viewHeader query = - Html.div [ Attr.css [ Tw.flex, Tw.flex_col, Tw.items_center, Tw.text_center, Tw.mb_16 ] ] + div [ css [ Tw.flex, Tw.flex_col, Tw.items_center, Tw.text_center, Tw.mb_16 ] ] [ Html.h1 - [ Attr.css [ Tw.text_5xl, Tw.font_bold, Tw.tracking_widest, Tw.uppercase, Tw.mb_4 ] ] - [ Html.text "LEARNING RESOURCES" ] + [ css [ Theming.headingFont, Tw.text_5xl, Tw.font_bold, Tw.tracking_widest, Tw.uppercase, Tw.mb_4 ] ] + [ text "Learning Resources" ] , Html.p - [ Attr.css [ Tw.text_lg, Tw.text_color Tw.gray_400, Tw.max_w_2xl, Tw.mb_8 ] ] - [ Html.text "Explore our curated directory of programming languages, tools, and concepts." ] + [ css [ Theming.bodyFont, Tw.text_lg, Tw.text_color Tw.gray_400, Tw.max_w_2xl, Tw.mb_8 ] ] + [ text "Explore our curated directory of programming languages, tools, and concepts." ] , Html.input [ Attr.value query , onInput SearchQueryChanged , Attr.placeholder "Search topics or domains (e.g., 'Rust', 'Web')..." - , Attr.css - [ Tw.w_full + , css + [ Theming.bodyFont + , Tw.w_full , Tw.max_w_lg , Tw.p_4 , Tw.rounded_xl @@ -105,21 +111,18 @@ viewHeader query = , Tw.border , Tw.border_color Tw.slate_700 , Tw.text_color Tw.white - -- , Tw.focus__border_fuchsia_500 - -- , Tw.focus__outline_none ] ] [] ] -viewCategorizedGrid : String -> List LearningResources.CompiledMeta -> Html Msg -viewCategorizedGrid query metadata = +viewCategorisedGrid : String -> List LearningResources.CompiledMeta -> Html Msg +viewCategorisedGrid query metadata = let q = String.toLower query - -- Filter by name or domains filtered = List.filter (\meta -> @@ -128,7 +131,6 @@ viewCategorizedGrid query metadata = ) metadata - -- Group by category. (Decoding the Json.Encode.Value to a string) grouped = List.foldl (\meta acc -> @@ -143,7 +145,7 @@ viewCategorizedGrid query metadata = Dict.empty filtered in - Html.div [ Attr.css [ Tw.flex, Tw.flex_col, Tw.gap_16 ] ] + div [ css [ Tw.flex, Tw.flex_col, Tw.gap_10 ] ] (Dict.toList grouped |> List.map (\( category, items ) -> viewCategorySection category items) ) @@ -151,56 +153,90 @@ viewCategorizedGrid query metadata = viewCategorySection : String -> List LearningResources.CompiledMeta -> Html msg viewCategorySection category items = - Html.div [] + div [] [ Html.h2 - [ Attr.css [ Tw.text_2xl, Tw.font_bold, Tw.mb_6, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_2 ] ] - [ Html.text category ] - , Html.div - [ Attr.css [ Tw.grid, Tw.grid_cols_1, Tw.gap_6 ] ] + [ css + [ Theming.headingFont + , Tw.text_3xl + , Tw.font_bold + , Tw.mb_8 + , Theming.textGradient + , Tw.inline_block + ] + ] + [ text category ] + , div + [ css + [ Tw.grid + , Tw.grid_cols_1 + , Breakpoints.md [ Tw.grid_cols_3 ] + , Breakpoints.lg [ Tw.grid_cols_4 ] + , Tw.gap_6 + ] + ] (List.map viewTopicCard items) ] + viewTopicCard : LearningResources.CompiledMeta -> Html msg viewTopicCard meta = Html.a [ Route.Path.href (Route.Path.Learning_Resource_ { resource = LearningResources.entityTagToString meta.id }) |> Attr.fromUnstyled - , Attr.css - [ Tw.flex - , Tw.flex_col - , Tw.bg_color Tw.slate_700 - , Tw.rounded_xl - , Tw.p_6 - , Tw.border - , Tw.border_color Tw.slate_700 - , Tw.transition_colors + , css + [ Tw.block + , Tw.no_underline + , Css.hover [ Tw.border_color Tw.dd_pink, Tw.translate_y_1 ] + , Tw.transition_all + , Tw.duration_300 , Tw.cursor_pointer ] ] - [ Html.div [ Attr.css [ Tw.flex, Tw.items_center, Tw.mb_4, Tw.gap_3 ] ] - [ Html.div [ Attr.css [ Tw.text_3xl ] ] [ Html.text (Maybe.withDefault "📄" meta.emoji) ] - , Html.h3 [ Attr.css [ Tw.font_bold, Tw.text_xl, Tw.text_color Tw.white ] ] [ Html.text meta.name ] + [ Theming.cardShell [ Tw.relative ] + [ div + [ css + [ Tw.absolute + , Tw.top_0 + , Tw.left_0 + , Tw.right_0 + , Tw.h_1 + , Theming.brandGradientBg + ] + ] + [] + , div [ css [ Tw.p_5, Tw.bg_color Tw.dd_deepblue ] ] + [ div [ css [ Tw.flex, Tw.items_center, Tw.gap_3, Tw.mb_2 ] ] + [ div [ css [ Tw.text_3xl, Tw.drop_shadow_md ] ] [ text (Emojis.emojiOrBackup meta) ] + , Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.font_bold ] ] [ text meta.name ] + ] + , Html.p + [ css [ Theming.bodyFont, Tw.text_sm, Tw.text_color Tw.gray_300, Tw.mb_4 ] ] + [ text meta.description ] + , div [ css [ Tw.flex, Tw.flex_wrap, Tw.gap_2 ] ] + (List.map (LearningResources.languageDomainToString >> viewBadge) meta.domains) + ] ] - , Html.p [ Attr.css [ Tw.text_sm, Tw.text_color Tw.gray_400, Tw.flex_grow, Tw.mb_6 ] ] - [ Html.text meta.description ] - , Html.div [ Attr.css [ Tw.flex, Tw.flex_wrap, Tw.gap_2 ] ] - (List.map (\domain -> viewBadge (LearningResources.languageDomainToString domain)) meta.domains) ] + viewBadge : String -> Html msg viewBadge label = - Html.span - [ Attr.css - [ Tw.text_xs + span + [ css + [ Theming.headingFont + , Tw.text_xs , Tw.font_medium - , Tw.bg_color Tw.slate_700 + , Tw.bg_color Tw.slate_800 + , Tw.text_color Tw.slate_300 + , Tw.border + , Tw.border_color Tw.slate_600 , Tw.text_color Tw.slate_300 - , Tw.px_2 + , Tw.px_3 , Tw.py_1 , Tw.rounded_full ] ] - [ Html.text label ] + [ text label ] categoryToString : LearningResources.ResourceCategory -> String @@ -213,4 +249,4 @@ categoryToString categoryUnion = "Platform" LearningResources.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryTool _ -> - "Tool" \ No newline at end of file + "Tool" diff --git a/src/Pages/Learning/Resource_.elm b/src/Pages/Learning/Resource_.elm index 1a1df1a..6a8ce25 100644 --- a/src/Pages/Learning/Resource_.elm +++ b/src/Pages/Learning/Resource_.elm @@ -10,9 +10,13 @@ import Route exposing (Route) import Route.Path import Shared import Shared.Model as SharedModel +import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw +import Theming +import Css import View exposing (View) +import LearningResources.Emojis as Emojis page : Shared.Model -> Route { resource : String } -> Page Model Msg @@ -48,9 +52,35 @@ view shared route _ = { title = "Error", body = [ text "Failed to load database." ] } SharedModel.Success db -> - case LearningResources.entityTagFromString route.resource of + let + activeTag = + LearningResources.entityTagFromString route.resource + + activeMeta = + activeTag + |> Maybe.andThen (\tag -> List.filter (\m -> m.id == tag) db.metadata |> List.head) + in + { title = Maybe.map .name activeMeta |> Maybe.withDefault "Topic" + , body = + [ viewExplorerLayout db activeTag route.resource ] + } + + +viewExplorerLayout : LearningResources.Database -> Maybe LearningResources.EntityTag -> String -> Html Msg +viewExplorerLayout db activeTag activeSlug = + div [ css [ Tw.flex, Tw.max_w_7xl, Tw.mx_auto, Tw.pt_12, Tw.pb_24, Tw.gap_12 ] ] + [ + div [ css [ Tw.w_64, Tw.flex_shrink_0, Tw.hidden, Breakpoints.lg [ Tw.block ] ] ] + [ Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.mb_6, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_2 ] ] + [ text "Topics" ] + , viewSidebarTopicList db.metadata activeSlug + ] + + + , div [ css [ Tw.flex_1 ] ] + [ case activeTag of Nothing -> - { title = "Not Found", body = [ text "Topic not found." ] } + div [ css [ Tw.text_color Tw.gray_400 ] ] [ text "Topic not found." ] Just tag -> let @@ -60,14 +90,44 @@ view shared route _ = topicResources = List.filter (\r -> List.member tag r.teaches) db.resources in - { title = Maybe.map .name maybeMeta |> Maybe.withDefault "Topic" - , body = - [ div [ css [ Tw.max_w_5xl, Tw.mx_auto, Tw.py_12 ] ] - [ viewTopicHeader maybeMeta - , viewResourceGrid topicResources - ] + div [] + [ viewTopicHeader maybeMeta + , viewResourceGrid topicResources ] - } + ] + ] + + +viewSidebarTopicList : List LearningResources.CompiledMeta -> String -> Html Msg +viewSidebarTopicList metadata activeSlug = + div [ css [ Tw.flex, Tw.flex_col, Tw.gap_2 ] ] + (List.map (viewSidebarLink activeSlug) metadata) + + +viewSidebarLink : String -> LearningResources.CompiledMeta -> Html Msg +viewSidebarLink activeSlug meta = + let + metaSlug = + LearningResources.entityTagToString meta.id + + isActive = + activeSlug == metaSlug + in + Html.a + [ Route.Path.href (Route.Path.Learning_Resource_ { resource = metaSlug }) |> Attr.fromUnstyled + , css + [ Theming.headingFont + , Tw.text_sm + , Tw.py_2 + , Tw.px_3 + , Tw.rounded_lg + , Tw.transition_colors + , if isActive then Tw.bg_color Tw.slate_800 else Tw.bg_color Tw.transparent + , if isActive then Tw.text_color Tw.white else Tw.text_color Tw.gray_400 + , Css.hover [ Tw.text_color Tw.white, Tw.bg_color Tw.slate_800 ] + ] + ] + [ text (Emojis.emojiOrBackup meta ++ " " ++ meta.name) ] viewTopicHeader : Maybe LearningResources.CompiledMeta -> Html Msg @@ -79,60 +139,52 @@ viewTopicHeader maybeMeta = Just meta -> div [ css [ Tw.mb_12, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_8 ] ] [ div [ css [ Tw.flex, Tw.items_center, Tw.gap_4, Tw.mb_4 ] ] - [ div [ css [ Tw.text_5xl ] ] [ text (Maybe.withDefault "" meta.emoji) ] - , Html.h1 [ css [ Tw.text_4xl, Tw.font_bold ] ] [ text meta.name ] + [ div [ css [ Tw.text_5xl ] ] [ text (Emojis.emojiOrBackup meta) ] + , Html.h1 [ css [ Theming.headingFont, Tw.text_4xl, Tw.font_bold ] ] [ text meta.name ] ] - , Html.p [ css [ Tw.text_xl, Tw.text_color Tw.gray_300, Tw.mb_4 ] ] [ text meta.description ] + , Html.p [ css [ Theming.bodyFont, Tw.text_xl, Tw.text_color Tw.gray_300, Tw.mb_4 ] ] + [ text meta.description ] ] viewResourceGrid : List LearningResources.Resource -> Html Msg viewResourceGrid resources = if List.isEmpty resources then - div [ css [ Tw.text_color Tw.gray_400, Tw.italic ] ] [ text "No resources found for this topic yet." ] - + div [ css [ Theming.bodyFont, Tw.text_color Tw.gray_400, Tw.italic ] ] [ text "No resources found for this topic yet." ] else - div [ css [ Tw.grid, Tw.grid_cols_1, Tw.gap_6 ] ] + div [ css [ Tw.grid, Tw.grid_cols_1, Breakpoints.md [ Tw.grid_cols_2 ], Tw.gap_6 ] ] (List.map viewResourceCard resources) viewResourceCard : LearningResources.Resource -> Html Msg viewResourceCard resource = - div - [ css - [ Tw.bg_color Tw.slate_800 - , Tw.rounded_xl - , Tw.p_6 - , Tw.border - , Tw.border_color Tw.slate_700 - , Tw.flex - , Tw.flex_col - ] - ] - [ div [ css [ Tw.flex, Tw.justify_between, Tw.items_start, Tw.mb_2 ] ] - [ Html.h3 [ css [ Tw.font_bold, Tw.text_lg, Tw.text_color Tw.white ] ] [ text resource.name ] + Theming.cardShell [ Tw.p_6, Tw.flex, Tw.flex_col ] + [ + div [ css [ Tw.flex, Tw.justify_between, Tw.items_start, Tw.mb_4 ] ] + [ Html.h3 [ css [ Theming.headingFont, Tw.text_lg ] ] [ text resource.name ] , viewPricingBadge resource.pricing ] + + , div [ css [ Tw.flex, Tw.gap_2, Tw.mb_4 ] ] (List.map viewTypeBadge resource.type_) - , Html.p [ css [ Tw.text_sm, Tw.text_color Tw.gray_400, Tw.flex_grow, Tw.mb_6 ] ] - [ text (Maybe.withDefault "No description available." resource.description) ] - , Html.a - [ href resource.url - , target "_blank" - , css - [ Tw.inline_block - , Tw.text_center - , Tw.bg_color Tw.fuchsia_600 - , Tw.text_color Tw.white - , Tw.font_bold - , Tw.py_2 - , Tw.px_4 - , Tw.rounded_lg - , Tw.transition_colors - ] + + + , Html.p [ css [ Theming.bodyFont, Tw.text_sm, Tw.mb_6, Tw.flex_grow ] ] + [ text (Maybe.withDefault "No description provided." resource.description) ] + + + , Html.a + [ Attr.href resource.url + , Attr.target "_blank" + , css + [ Theming.headingFont + , Tw.text_color Tw.dd_pink + , Css.hover [ Tw.text_color Tw.white ] + , Tw.transition_colors + ] ] - [ text "Go to Resource" ] + [ text "Read more ->" ] ] diff --git a/src/Theming.elm b/src/Theming.elm new file mode 100644 index 0000000..ad3b276 --- /dev/null +++ b/src/Theming.elm @@ -0,0 +1,51 @@ +module Theming exposing (..) + +import Css +import Html.Styled as Html exposing (Html) +import Html.Styled.Attributes as Attr +import Tailwind.Theme as Tw +import Tailwind.Utilities as Tw + + +brandGradientBg : Css.Style +brandGradientBg = + -- elm tailwind doesnt seem to play well with this + Css.property "background-image" + "linear-gradient(to right, var(--color-den-teal), var(--color-den-indigo), var(--color-den-pink))" + + +textGradient : Css.Style +textGradient = + Css.batch + [ brandGradientBg + , Css.property "-webkit-background-clip" "text" + , Css.property "background-clip" "text" + , Css.property "-webkit-text-fill-color" "transparent" + , Css.color Css.transparent + ] + + +headingFont : Css.Style +headingFont = + Css.batch [ Tw.font_mono, Tw.text_white ] + + +bodyFont : Css.Style +bodyFont = + Css.batch [ Tw.font_sans, Tw.text_gray_300 ] + + +cardShell : List Css.Style -> List (Html msg) -> Html msg +cardShell extraStyles children = + Html.div + [ Attr.css + ([ Tw.bg_color Tw.dd_deepblueLighter + , Tw.rounded_xl + , Tw.overflow_hidden + , Tw.border + , Tw.border_color Tw.slate_700 + ] + ++ extraStyles + ) + ] + children diff --git a/static/base.css b/static/base.css index 0ca377e..3da837b 100644 --- a/static/base.css +++ b/static/base.css @@ -4,6 +4,7 @@ :root { --color-den-deepblue: #171834; + --color-den-deepblue-lighter: #1e1f3d; --color-den-teal: #00AFC3; --color-den-pink: #FF52F9; --color-den-indigo: #8099FF; diff --git a/tailwind.config.ts b/tailwind.config.ts index 89b8294..a982f94 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -6,10 +6,15 @@ module.exports = { colors: { dd: { deepblue: 'var(--color-den-deepblue)', + deepblueLighter: 'var(--color-den-deepblue-lighter)', teal: 'var(--color-den-teal)', pink: 'var(--color-den-pink)', indigo: 'var(--color-den-indigo)', } + }, + fontFamily: { + mono: ['Cascadia Code', 'monospace'], + sans: ['Montserrat Medium', 'sans-serif'], } }, }, From 2c3513616f55d525373c8be1fb68d16ff8e31781 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 17:13:04 +0100 Subject: [PATCH 16/48] fix: styling tweaks --- README.MD | 1 + src/Layouts/Global.elm | 90 ++++++++++-- src/Pages/Learning.elm | 3 +- src/Pages/Learning/Resource_.elm | 4 +- src/Pages/Rules.elm | 228 +++++++++++++++++++++++++++++++ static/base.css | 14 ++ tailwind.config.ts | 4 +- 7 files changed, 331 insertions(+), 13 deletions(-) create mode 100644 src/Pages/Rules.elm diff --git a/README.MD b/README.MD index 0b0cc5a..e677e67 100644 --- a/README.MD +++ b/README.MD @@ -23,6 +23,7 @@ treefmt  # formats everything ## TODO - [ ] Main page (index), shows information about the organisation with links to the discord server +- [x] `/learning` - shows the learning resources database in a nice format. - [ ] `/xp/leaderboard` - show the top N users in terms of XP and level (can query the API for this). See https://lb.helpch.at/ for inspiration. Maybe allow parameters like `?size=10` to show the top 10 users. - [ ] `/stats/` - Shows various graphs with stats about the servers. We can decide on exactly the data we show later, diff --git a/src/Layouts/Global.elm b/src/Layouts/Global.elm index 9630517..36abfe6 100644 --- a/src/Layouts/Global.elm +++ b/src/Layouts/Global.elm @@ -1,18 +1,21 @@ module Layouts.Global exposing (Model, Msg, Props, layout) +import Css import Effect exposing (Effect) -import Html.Styled as Html -import Html.Styled.Attributes as Attr +import Html.Styled as Html exposing (Html, a, div, nav, text) +import Html.Styled.Attributes as Attr exposing (css, href) import Layout exposing (Layout) import Route exposing (Route) +import Route.Path import Shared import Tailwind.Theme as Tw import Tailwind.Utilities as Tw +import Theming import View exposing (View) type alias Props = - {} + { activePage : Route.Path.Path } layout : Props -> Shared.Model -> Route () -> Layout () Model Msg contentMsg @@ -20,7 +23,7 @@ layout props shared route = Layout.new { init = init , update = update - , view = view + , view = view props , subscriptions = subscriptions } @@ -66,8 +69,8 @@ subscriptions model = -- VIEW -view : { toContentMsg : Msg -> contentMsg, content : View contentMsg, model : Model } -> View contentMsg -view { toContentMsg, model, content } = +view : Props -> { toContentMsg : Msg -> contentMsg, content : View contentMsg, model : Model } -> View contentMsg +view layoutProps {content} = { title = content.title ++ " | Developer Den" , body = [ Html.div @@ -81,9 +84,80 @@ view { toContentMsg, model, content } = , Tw.antialiased ] ] - [ Html.div - [ Attr.css [ Tw.max_w_7xl, Tw.mx_auto, Tw.px_8, Tw.py_12 ] ] + [ viewNavbar layoutProps.activePage + , Html.div [ css [ Tw.flex_grow ] ] content.body ] ] } + + +viewNavbar : Route.Path.Path -> Html msg +viewNavbar activePage = + nav + [ css + [ Tw.flex + , Tw.justify_between + , Tw.items_center + , Tw.max_w_7xl + , Tw.mx_auto + , Tw.w_full + , Tw.px_8 + , Tw.py_6 + ] + ] + [ -- Logo + a + [ Route.Path.href Route.Path.Home_ |> Attr.fromUnstyled + , css [ Theming.headingFont, Tw.text_xl, Tw.font_bold, Tw.no_underline, Theming.textGradient ] + ] + [ text "developer den" ] + , -- Links + div [ css [ Tw.flex, Tw.gap_8 ] ] + [ viewNavLink "home" Route.Path.Home_ (activePage == Route.Path.Home_) + , viewNavLink "rules" Route.Path.Rules (activePage == Route.Path.Rules) + , viewNavLink "learning" Route.Path.Learning (activePage == Route.Path.Learning) + , a + [ href "https://developerden.org/discord" + , Attr.target "_blank" + , css + [ Theming.headingFont + , Tw.text_sm + , Tw.text_color Tw.slate_400 + , Css.hover [ Tw.text_color Tw.white ] + , Tw.transition_colors + , Tw.no_underline + ] + ] + [ text "discord" ] + ] + ] + + +viewNavLink : String -> Route.Path.Path -> Bool -> Html msg +viewNavLink label path isActive = + a + [ Route.Path.href path |> Attr.fromUnstyled + , css + [ Theming.headingFont + , Tw.text_sm + , Tw.pb_1 + , Tw.no_underline + , if isActive then + Tw.text_color Tw.white + + else + Tw.text_color Tw.slate_400 + , Css.hover [ Tw.text_color Tw.white ] + , Tw.transition_colors + , Tw.relative + ] + ] + [ text label + , -- The active underline gradient + if isActive then + div [ css [ Tw.absolute, Tw.bottom_0, Tw.left_0, Tw.right_0, Tw.h_1_dot_5, Theming.brandGradientBg ] ] [] + + else + text "" + ] diff --git a/src/Pages/Learning.elm b/src/Pages/Learning.elm index 465da2b..e30cd22 100644 --- a/src/Pages/Learning.elm +++ b/src/Pages/Learning.elm @@ -6,7 +6,6 @@ import Effect exposing (Effect) import Html.Styled as Html exposing (Html, div, span, text) import Html.Styled.Attributes as Attr exposing (css) import Html.Styled.Events exposing (onInput) -import Json.Encode import Layouts import LearningResources.Emojis as Emojis import LearningResources.Types as LearningResources @@ -30,7 +29,7 @@ page shared _ = , subscriptions = subscriptions , view = view shared } - |> Page.withLayout (\_ -> Layouts.Global {}) + |> Page.withLayout (\_ -> Layouts.Global { activePage = Route.Path.Learning}) diff --git a/src/Pages/Learning/Resource_.elm b/src/Pages/Learning/Resource_.elm index 6a8ce25..8857133 100644 --- a/src/Pages/Learning/Resource_.elm +++ b/src/Pages/Learning/Resource_.elm @@ -27,7 +27,9 @@ page shared route = , subscriptions = \_ -> Sub.none , view = view shared route.params } - |> Page.withLayout (\_ -> Layouts.Global {}) + |> Page.withLayout (\_ -> Layouts.Global { + activePage = Route.Path.Learning + }) type alias Model = diff --git a/src/Pages/Rules.elm b/src/Pages/Rules.elm new file mode 100644 index 0000000..f1dd99f --- /dev/null +++ b/src/Pages/Rules.elm @@ -0,0 +1,228 @@ +module Pages.Rules exposing (Model, Msg, page) + +import Css +import Effect exposing (Effect) +import Html.Styled as Html exposing (Html, a, div, h1, h2, h3, p, span, text) +import Html.Styled.Attributes as Attr exposing (css) +import Layouts +import Page exposing (Page) +import Route exposing (Route) +import Route.Path +import Shared +import Tailwind.Theme as Tw +import Tailwind.Utilities as Tw +import Theming +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view + } + |> Page.withLayout + (\_ -> + Layouts.Global + { activePage = Route.Path.Rules + } + ) + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.none + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +type alias RuleSection = + { id : Int + , title : String + , rules : List (List (Html Msg)) + } + + +rulesData : List RuleSection +rulesData = + [ { id = 1 + , title = "Conduct and Communication" + , rules = + [ [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Respect the Community: " ] + , text "No rudeness, insults, harassment, or \"dogpiling\" (ganging up on someone)." + ] + , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Engage in good faith: " ] + , text "No intentional derailing, \"sealioning\" (disingenuous questions), extreme sarcasm, or ragebait. Keep debates respectful and fair." + ] + , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Keep Criticism Constructive: " ] + , text "Stay objective about code/tools. No flaming, elitism, or mocking others for their choices, especially beginners." + ] + ] + } + , { id = 2 + , title = "Moderation Protocols" + , rules = + [ [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "No public moderation disputes: " ] + , text "Do not argue about warnings, mutes, or deleted messages in public. Mocking or undermining staff instructions leads to immediate escalation." + ] + , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Official Channels: " ] + , text "DM @Modmail to open a ticket for moderation issues." + ] + , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Staff Discretion: " ] + , text "Staff may remove users who are a net negative to the community vibe, even without a specific rule break." + ] + ] + } + , { id = 3 + , title = "Sensitive Content & Personal Boundaries" + , rules = + [ [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "No trauma-dumping: " ] + , text "Keep sensitive personal topics (mental health, self-harm, politics) out of public channels." + ] + , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "No Vigilante Justice / Minimodding: " ] + , text "Report rule-breakers. Do not act as a moderator or take it upon yourself to \"teach them a lesson.\"" + ] + ] + } + , { id = 4 + , title = "Help Us Help You" + , rules = + [ [ text "Just ask your question, ", inlineLink "don't ask to ask, just ask" "https://dontasktoask.com" ] + , [ text "Give as much information as possible when asking for help." ] + , [ text "Don't DM or ping random people / staff for help, just ask your question and be patient." ] + , [ text "Use a ", inlineLink "paste service" "https://paste.developerden.org", text " for large blocks of code." ] + ] + } + , { id = 5 + , title = "Don't Be Evil" + , rules = + [ [ text "No NSFW content. Keep language reasonable with no excessive swearing." ] + , [ text "Follow Discord's Terms of Service." ] + , [ text "No spam, self-promotion, or harmful links." ] + , [ text "No asking for help with illegal/malicious programs." ] + , [ text "Other ethical violations like asking people to do your schoolwork for you are not allowed." ] + ] + } + ] + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Model -> View Msg +view model = + { title = "Rules" + , body = + [ div [ css [ Tw.max_w_4xl, Tw.mx_auto, Tw.pt_2, Tw.pb_24, Tw.px_6 ] ] + [ viewHeader + , div [] + (List.map viewRuleSection rulesData) + ] + ] + } + + +viewHeader : Html Msg +viewHeader = + div [ css [ Tw.mb_8, Tw.text_center ] ] + [ h1 + [ css + [ Theming.headingFont + , Tw.text_5xl + , Tw.font_bold + , Tw.mb_2 + , Theming.textGradient + , Tw.inline_block + ] + ] + [ text "Server Rules" ] + , h2 + [ css [ Theming.bodyFont, Tw.text_lg, Tw.text_color Tw.gray_300 ] ] + [ text "You are welcome in our community as long as you follow the rules." ] + ] + + +viewRuleSection : RuleSection -> Html Msg +viewRuleSection section = + div + [ css + [ Tw.mb_6 ] + ] + [ h3 + [ css [ Theming.headingFont, Tw.text_2xl, Tw.text_color Tw.dd_teal, Tw.mb_3 ] ] + [ text (String.fromInt section.id ++ ". " ++ section.title) ] + , div [ css [ Tw.flex, Tw.flex_col, Tw.gap_2] ] + (List.indexedMap viewRuleLine section.rules) + ] + + +viewRuleLine : Int -> List (Html Msg) -> Html Msg +viewRuleLine index content = + let + -- convert 0, 1, 2 into 'a', 'b', 'c' + letter = + String.fromChar (Char.fromCode (97 + index)) ++ ". " + in + p + [ css + [ Theming.bodyFont + , Tw.text_base + , Tw.text_color Tw.gray_300 + , Tw.leading_snug + , Tw.m_0 + ] + ] + (Html.text letter :: content) + + +inlineLink : String -> String -> Html Msg +inlineLink val url = + a + [ Attr.href url + , Attr.target "_blank" + , css + [ Tw.text_color Tw.dd_pink + , Tw.font_semibold + , Tw.no_underline + , Css.hover [ Tw.text_color Tw.white ] + , Tw.transition_colors + ] + ] + [ text val ] diff --git a/static/base.css b/static/base.css index 3da837b..8066075 100644 --- a/static/base.css +++ b/static/base.css @@ -2,6 +2,20 @@ @tailwind components; @tailwind utilities; + +@import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap'); + + +@font-face { + font-family: 'Cascadia Code Variable'; + font-style: normal; + font-display: swap; + font-weight: 200 700; + src: url(https://cdn.jsdelivr.net/fontsource/fonts/cascadia-code:vf@latest/latin-wght-normal.woff2) format('woff2-variations'); + unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; +} + + :root { --color-den-deepblue: #171834; --color-den-deepblue-lighter: #1e1f3d; diff --git a/tailwind.config.ts b/tailwind.config.ts index a982f94..4caa1db 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -13,8 +13,8 @@ module.exports = { } }, fontFamily: { - mono: ['Cascadia Code', 'monospace'], - sans: ['Montserrat Medium', 'sans-serif'], + mono: ['Cascadia Code Variable', 'monospace'], + sans: ['Montserrat', 'sans-serif'], } }, }, From d241ba4efb4e5fe7355a7599119f80aa64b94d45 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 18:25:18 +0100 Subject: [PATCH 17/48] feat: home page --- elm-land.json | 39 ++++++--- src/Layouts/Global.elm | 21 +++-- src/Pages/Home_.elm | 169 ++++++++++++++++++++++++++++++++++----- src/Redirects.elm | 11 +++ static/devden-banner.svg | 61 ++++++++++++++ static/devden-logo.svg | 59 ++++++++++++++ 6 files changed, 323 insertions(+), 37 deletions(-) create mode 100644 src/Redirects.elm create mode 100644 static/devden-banner.svg create mode 100644 static/devden-logo.svg diff --git a/elm-land.json b/elm-land.json index 010a8f1..5daeeb8 100644 --- a/elm-land.json +++ b/elm-land.json @@ -1,25 +1,46 @@ { "app": { "elm": { - "development": { "debugger": true }, - "production": { "debugger": false } + "development": { + "debugger": true + }, + "production": { + "debugger": false + } }, "env": [], "html": { "attributes": { - "html": { "lang": "en" }, + "html": { + "lang": "en" + }, "head": {} }, "title": "Elm Land", "meta": [ - { "charset": "UTF-8" }, - { "http-equiv": "X-UA-Compatible", "content": "IE=edge" }, - { "name": "viewport", "content": "width=device-width, initial-scale=1.0" } + { + "charset": "UTF-8" + }, + { + "http-equiv": "X-UA-Compatible", + "content": "IE=edge" + }, + { + "name": "viewport", + "content": "width=device-width, initial-scale=1.0" + } ], - "link": [ - { "rel": "stylesheet", "href": "/base.css" } + "link": [ + { + "rel": "stylesheet", + "href": "/base.css" + } ], - "script": [] + "script": [ + { + "src": "https://kit.fontawesome.com/9bc6b8da88.js" + } + ] }, "router": { "useHashRouting": false diff --git a/src/Layouts/Global.elm b/src/Layouts/Global.elm index 36abfe6..550215a 100644 --- a/src/Layouts/Global.elm +++ b/src/Layouts/Global.elm @@ -2,7 +2,7 @@ module Layouts.Global exposing (Model, Msg, Props, layout) import Css import Effect exposing (Effect) -import Html.Styled as Html exposing (Html, a, div, nav, text) +import Html.Styled as Html exposing (Html, a, img, div, nav, text) import Html.Styled.Attributes as Attr exposing (css, href) import Layout exposing (Layout) import Route exposing (Route) @@ -12,6 +12,7 @@ import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming import View exposing (View) +import Redirects type alias Props = @@ -78,6 +79,8 @@ view layoutProps {content} = , Attr.css [ Tw.min_h_screen , Tw.w_full + , Tw.overflow_x_hidden + , Tw.overflow_y_hidden , Tw.bg_color Tw.dd_deepblue , Tw.text_color Tw.white , Tw.font_sans @@ -106,19 +109,25 @@ viewNavbar activePage = , Tw.py_6 ] ] - [ -- Logo + [ a [ Route.Path.href Route.Path.Home_ |> Attr.fromUnstyled , css [ Theming.headingFont, Tw.text_xl, Tw.font_bold, Tw.no_underline, Theming.textGradient ] ] - [ text "developer den" ] - , -- Links + [ img + [ Attr.src "/static/devden-logo.svg" + , Attr.alt "Developer Den Logo" + , css [ Tw.h_16, Tw.w_auto ] + ] + [] + ] + , div [ css [ Tw.flex, Tw.gap_8 ] ] [ viewNavLink "home" Route.Path.Home_ (activePage == Route.Path.Home_) , viewNavLink "rules" Route.Path.Rules (activePage == Route.Path.Rules) , viewNavLink "learning" Route.Path.Learning (activePage == Route.Path.Learning) , a - [ href "https://developerden.org/discord" + [ href Redirects.discordURL , Attr.target "_blank" , css [ Theming.headingFont @@ -154,7 +163,7 @@ viewNavLink label path isActive = ] ] [ text label - , -- The active underline gradient + , if isActive then div [ css [ Tw.absolute, Tw.bottom_0, Tw.left_0, Tw.right_0, Tw.h_1_dot_5, Theming.brandGradientBg ] ] [] diff --git a/src/Pages/Home_.elm b/src/Pages/Home_.elm index ed70814..5ba96c3 100644 --- a/src/Pages/Home_.elm +++ b/src/Pages/Home_.elm @@ -1,36 +1,161 @@ -module Pages.Home_ exposing (page) +module Pages.Home_ exposing (Model, Msg, page) import Css -import Css.Global -import Html.Styled as Html -import Html.Styled.Attributes as Attr +import Effect exposing (Effect) +import Html.Styled as Html exposing (Html, a, div, fieldset, h1, h2, i, img, legend, p, text) +import Html.Styled.Attributes as Attr exposing (css, href, target) +import Layouts +import Page exposing (Page) +import Redirects +import Route exposing (Route) +import Route.Path +import Shared import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw -import View exposing (View) +import Theming -page : View msg -page = - { title = "Homepage" +page : Shared.Model -> Route () -> Page Model Msg +page _ _ = + Page.new + { init = \_ -> ( {}, Effect.none ) + , update = \_ model -> ( model, Effect.none ) + , subscriptions = \_ -> Sub.none + , view = \_ -> view + } + |> Page.withLayout (\_ -> Layouts.Global { activePage = Route.Path.Home_ }) + + +type alias Model = + {} + + +type Msg + = NoOp + + +view : { title : String, body : List (Html Msg) } +view = + { title = "Home" , body = - [ Html.a - [ Attr.css - [ Tw.inline_flex + [ div + [ css + [ Tw.flex + , Tw.flex_col , Tw.items_center , Tw.justify_center - , Tw.px_5 - , Tw.py_3 - , Tw.border - , Tw.border_color Tw.transparent - , Tw.text_base - , Tw.font_medium - , Tw.rounded_md - , Tw.text_color Tw.white - , Tw.bg_color Tw.indigo_600 - , Css.hover [ Tw.bg_color Tw.indigo_700 ] + , Tw.w_full + , Tw.h_full + , Tw.flex_grow + , Tw.px_6 + , Tw.py_8 ] ] - [ Html.text "Hello, world!" ] + [ viewBanner + ] + , viewFloatingSocials ] } + + +viewBanner : Html Msg +viewBanner = + div [ css [ Tw.text_center, Tw.mb_24 ] ] + [ img + [ Attr.src "/static/devden-banner.svg" + , Attr.alt "Developer Den Banner" + , css + [ Theming.headingFont + , Tw.font_bold + , Tw.mb_2 + , Theming.textGradient + , Tw.inline_block + , Tw.tracking_widest + , Tw.pb_3 + ] + ] + [] + , h2 + [ css + [ Theming.bodyFont + , Tw.text_xl + , Breakpoints.md [ Tw.text_2xl ] + , Tw.text_color Tw.gray_300 + , Tw.max_w_3xl + , Tw.mx_auto + , Tw.mb_10 + , Tw.leading_relaxed + ] + ] + [ text "A closely-knit community anchored in a common passion for programming." ] + , a + [ href Redirects.discordURL + , target "_blank" + , css + [ Tw.font_sans + , Tw.tracking_wide + , Tw.text_lg + , Tw.font_bold + , Tw.text_color Tw.white + , Theming.brandGradientBg + , Tw.px_8 + , Tw.py_4 + , Tw.rounded_2xl + , Tw.no_underline + , Css.hover [ Tw.opacity_90, Tw.scale_105 ] + , Tw.transition_all + , Tw.inline_flex + , Tw.items_center + , Tw.justify_center + , Tw.gap_3 + , Tw.drop_shadow_lg + ] + ] + [ i [ Attr.class "fab fa-discord", css [ Tw.text_3xl ] ] [] + , text "Interested? Join our Discord!" + ] + ] + + +viewFloatingSocials : Html Msg +viewFloatingSocials = + div + [ css + [ Tw.fixed + , Tw.bottom_6 + , Tw.right_6 + , Tw.flex + , Tw.gap_2 + , Tw.bg_color Tw.slate_800 + , Tw.p_2 + , Tw.rounded_xl + , Tw.border + , Tw.border_color Tw.slate_700 + , Tw.drop_shadow_lg + , Tw.z_50 + ] + ] + [ viewSocialIcon Redirects.discordURL + (i [ Attr.class "fab fa-discord", css [ Tw.text_2xl ] ] []) + (Tw.text_color Tw.indigo_400) + , viewSocialIcon Redirects.githubURL + (i [ Attr.class "fab fa-github", css [ Tw.text_2xl ] ] []) + (Tw.text_color Tw.white) + ] + + +viewSocialIcon : String -> Html Msg -> Css.Style -> Html Msg +viewSocialIcon url icon hoverStyle = + a + [ href url + , target "_blank" + , css + [ Tw.text_color Tw.gray_400 + , Css.hover [ hoverStyle ] + , Tw.transition_colors + , Tw.p_2 + , Tw.block + ] + ] + [ icon ] diff --git a/src/Redirects.elm b/src/Redirects.elm new file mode 100644 index 0000000..1c1dc45 --- /dev/null +++ b/src/Redirects.elm @@ -0,0 +1,11 @@ +module Redirects exposing (..) + + +discordURL : String +discordURL = + "https://developerden.org/discord" + + +githubURL : String +githubURL = + "https://github.com/TheDeveloperDen" diff --git a/static/devden-banner.svg b/static/devden-banner.svg new file mode 100644 index 0000000..1f68873 --- /dev/null +++ b/static/devden-banner.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/devden-logo.svg b/static/devden-logo.svg new file mode 100644 index 0000000..c3e22f2 --- /dev/null +++ b/static/devden-logo.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 59c12dbb322f3ae7689cc172f9e9777e375da369 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 18:38:50 +0100 Subject: [PATCH 18/48] fix: more styling improvements --- src/Layouts/Global.elm | 30 ++++++++++++++++----------- src/LearningResources/Emojis.elm | 35 +++++++++++++++++++++++--------- src/Pages/Home_.elm | 1 - src/Pages/Learning.elm | 17 +++++++++++----- static/base.css | 6 +++--- 5 files changed, 58 insertions(+), 31 deletions(-) diff --git a/src/Layouts/Global.elm b/src/Layouts/Global.elm index 550215a..fb1654e 100644 --- a/src/Layouts/Global.elm +++ b/src/Layouts/Global.elm @@ -2,9 +2,10 @@ module Layouts.Global exposing (Model, Msg, Props, layout) import Css import Effect exposing (Effect) -import Html.Styled as Html exposing (Html, a, img, div, nav, text) +import Html.Styled as Html exposing (Html, a, div, img, nav, text) import Html.Styled.Attributes as Attr exposing (css, href) import Layout exposing (Layout) +import Redirects import Route exposing (Route) import Route.Path import Shared @@ -12,7 +13,6 @@ import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming import View exposing (View) -import Redirects type alias Props = @@ -71,7 +71,7 @@ subscriptions model = view : Props -> { toContentMsg : Msg -> contentMsg, content : View contentMsg, model : Model } -> View contentMsg -view layoutProps {content} = +view layoutProps { content } = { title = content.title ++ " | Developer Den" , body = [ Html.div @@ -109,20 +109,18 @@ viewNavbar activePage = , Tw.py_6 ] ] - [ - a + [ a [ Route.Path.href Route.Path.Home_ |> Attr.fromUnstyled , css [ Theming.headingFont, Tw.text_xl, Tw.font_bold, Tw.no_underline, Theming.textGradient ] ] - [ img + [ img [ Attr.src "/static/devden-logo.svg" , Attr.alt "Developer Den Logo" , css [ Tw.h_16, Tw.w_auto ] ] [] ] - , - div [ css [ Tw.flex, Tw.gap_8 ] ] + , div [ css [ Tw.flex, Tw.gap_8 ] ] [ viewNavLink "home" Route.Path.Home_ (activePage == Route.Path.Home_) , viewNavLink "rules" Route.Path.Rules (activePage == Route.Path.Rules) , viewNavLink "learning" Route.Path.Learning (activePage == Route.Path.Learning) @@ -149,7 +147,6 @@ viewNavLink label path isActive = [ Route.Path.href path |> Attr.fromUnstyled , css [ Theming.headingFont - , Tw.text_sm , Tw.pb_1 , Tw.no_underline , if isActive then @@ -163,9 +160,18 @@ viewNavLink label path isActive = ] ] [ text label - , - if isActive then - div [ css [ Tw.absolute, Tw.bottom_0, Tw.left_0, Tw.right_0, Tw.h_1_dot_5, Theming.brandGradientBg ] ] [] + , if isActive then + div + [ css + [ Tw.absolute + , Tw.bottom_0 + , Tw.left_0 + , Tw.right_0 + , Tw.h_1 + , Theming.brandGradientBg + ] + ] + [] else text "" diff --git a/src/LearningResources/Emojis.elm b/src/LearningResources/Emojis.elm index 99ab516..022b057 100644 --- a/src/LearningResources/Emojis.elm +++ b/src/LearningResources/Emojis.elm @@ -3,31 +3,46 @@ module LearningResources.Emojis exposing (..) -import LearningResources.Types as LearningResources +import LearningResources.Types as LearningResources exposing (EntityTag(..)) -emojiForTag : LearningResources.EntityTag -> String +emojiForTag : EntityTag -> String emojiForTag tag = case tag of - LearningResources.EntityTag__Clojure -> + EntityTag__Clojure -> "🍵" - LearningResources.EntityTag__Python -> + EntityTag__Python -> "🐍" - LearningResources.EntityTag__Rust -> + EntityTag__Rust -> "🦀" - LearningResources.EntityTag__Haskell -> + EntityTag__Haskell -> "📐" - LearningResources.EntityTag__Java -> + EntityTag__Java -> "☕" - - LearningResources.EntityTag__Kotlin -> + + EntityTag__Kotlin -> "🤖" - _ -> + EntityTag__Cpp -> + "💻" + + EntityTag__Sql -> + "🗄️" + + EntityTag__Php -> + "🐘" + + EntityTag__ProgrammingLanguageDesign -> + "🛠️" + + EntityTag__Git -> + "🔧" + + EntityTag__General -> "📚" diff --git a/src/Pages/Home_.elm b/src/Pages/Home_.elm index 5ba96c3..b66e25a 100644 --- a/src/Pages/Home_.elm +++ b/src/Pages/Home_.elm @@ -46,7 +46,6 @@ view = , Tw.items_center , Tw.justify_center , Tw.w_full - , Tw.h_full , Tw.flex_grow , Tw.px_6 , Tw.py_8 diff --git a/src/Pages/Learning.elm b/src/Pages/Learning.elm index e30cd22..0e589c1 100644 --- a/src/Pages/Learning.elm +++ b/src/Pages/Learning.elm @@ -29,7 +29,7 @@ page shared _ = , subscriptions = subscriptions , view = view shared } - |> Page.withLayout (\_ -> Layouts.Global { activePage = Route.Path.Learning}) + |> Page.withLayout (\_ -> Layouts.Global { activePage = Route.Path.Learning }) @@ -185,13 +185,20 @@ viewTopicCard meta = , css [ Tw.block , Tw.no_underline - , Css.hover [ Tw.border_color Tw.dd_pink, Tw.translate_y_1 ] - , Tw.transition_all - , Tw.duration_300 , Tw.cursor_pointer ] ] - [ Theming.cardShell [ Tw.relative ] + [ Theming.cardShell + [ Tw.relative + , Tw.transform + , Tw.transition_all + , Tw.duration_300 + , Css.hover + [ Tw.border + , Tw.border_color Tw.dd_pink + , Tw.neg_translate_y_1 + ] + ] [ div [ css [ Tw.absolute diff --git a/static/base.css b/static/base.css index 8066075..1833707 100644 --- a/static/base.css +++ b/static/base.css @@ -31,7 +31,7 @@ --color-den-indigo: #005FF1; } -body { - background-color: var(--color-den-bg); - color: var(--color-den-text); +html, body { + background-color: var(--color-den-deepblue); + color: #ffffff; } \ No newline at end of file From b44ca060eb003badf979cad437e079fdeb10cf89 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 18:44:35 +0100 Subject: [PATCH 19/48] build: add useful bun scripts --- flake.nix | 8 -------- package.json | 5 +++++ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/flake.nix b/flake.nix index 04050d4..50c91f2 100644 --- a/flake.nix +++ b/flake.nix @@ -43,14 +43,6 @@ elmPackages.elm-language-server elmPackages.elm-test ]; - - shellHook = '' - alias tw="bunx elm-tailwind-modules --dir ./gen --tailwind-config tailwind.config.ts" - alias spa-server="bunx elm-land server" - - echo "Dev shell active." - echo "Commands: tw, spa-server" - ''; }; packages.default = pkgs.hello; diff --git a/package.json b/package.json index 3198338..a5615b5 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,11 @@ "quicktype": "^23.2.6", "quicktype-core": "^23.2.6" }, + "scripts": { + "tw": " elm-tailwind-modules --dir ./gen --tailwind-config tailwind.config.ts", + "server": "elm-land server", + "format": "elm-format src --yes" + }, "peerDependencies": { "typescript": "^5" }, From 83c04c410cee331153059d22071193feb9d12d0a Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 18:46:10 +0100 Subject: [PATCH 20/48] fix: fix a tiny bit of y movement on home page --- src/Layouts/Global.elm | 7 ++++--- src/Pages/Home_.elm | 7 ++++--- static/base.css | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Layouts/Global.elm b/src/Layouts/Global.elm index fb1654e..a39106f 100644 --- a/src/Layouts/Global.elm +++ b/src/Layouts/Global.elm @@ -80,15 +80,16 @@ view layoutProps { content } = [ Tw.min_h_screen , Tw.w_full , Tw.overflow_x_hidden - , Tw.overflow_y_hidden , Tw.bg_color Tw.dd_deepblue , Tw.text_color Tw.white , Tw.font_sans , Tw.antialiased + , Tw.flex + , Tw.flex_col ] ] [ viewNavbar layoutProps.activePage - , Html.div [ css [ Tw.flex_grow ] ] + , Html.div [ css [ Tw.flex_grow, Tw.flex, Tw.flex_col ] ] content.body ] ] @@ -116,7 +117,7 @@ viewNavbar activePage = [ img [ Attr.src "/static/devden-logo.svg" , Attr.alt "Developer Den Logo" - , css [ Tw.h_16, Tw.w_auto ] + , css [ Tw.h_16, Tw.w_auto, Tw.block ] ] [] ] diff --git a/src/Pages/Home_.elm b/src/Pages/Home_.elm index b66e25a..c4c14cb 100644 --- a/src/Pages/Home_.elm +++ b/src/Pages/Home_.elm @@ -48,7 +48,6 @@ view = , Tw.w_full , Tw.flex_grow , Tw.px_6 - , Tw.py_8 ] ] [ viewBanner @@ -60,7 +59,7 @@ view = viewBanner : Html Msg viewBanner = - div [ css [ Tw.text_center, Tw.mb_24 ] ] + div [ css [ Tw.text_center ] ] [ img [ Attr.src "/static/devden-banner.svg" , Attr.alt "Developer Den Banner" @@ -71,7 +70,9 @@ viewBanner = , Theming.textGradient , Tw.inline_block , Tw.tracking_widest - , Tw.pb_3 + , Tw.pb_2 + , Tw.block + , Tw.mx_auto ] ] [] diff --git a/static/base.css b/static/base.css index 1833707..9f8cdbf 100644 --- a/static/base.css +++ b/static/base.css @@ -34,4 +34,5 @@ html, body { background-color: var(--color-den-deepblue); color: #ffffff; + margin: 0; } \ No newline at end of file From f986269ae5e46e1422c78c068e20f0e27fd0d447 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 18:46:20 +0100 Subject: [PATCH 21/48] style: run elm-format --- src/Api.elm | 2 +- src/Effect.elm | 3 +- src/LearningResources.elm | 4 ++- src/Pages/Learning/Resource_.elm | 56 +++++++++++++++++--------------- src/Pages/Rules.elm | 10 +++--- src/Shared.elm | 2 +- src/Shared/Model.elm | 1 - src/Theming.elm | 2 +- 8 files changed, 42 insertions(+), 38 deletions(-) diff --git a/src/Api.elm b/src/Api.elm index 4b9d4de..e3bd7ac 100644 --- a/src/Api.elm +++ b/src/Api.elm @@ -3,8 +3,8 @@ module Api exposing (..) import Effect exposing (Effect) import Http import Json.Decode as Json -import LearningResources.Types as LearningResources import LearningResources.Json as LearningResources +import LearningResources.Types as LearningResources import Yaml.Decode diff --git a/src/Effect.elm b/src/Effect.elm index 63f0cad..4a55865 100644 --- a/src/Effect.elm +++ b/src/Effect.elm @@ -213,6 +213,7 @@ toCmd options effect = Task.succeed sharedMsg |> Task.perform options.fromSharedMsg + sendSharedMsg : Shared.Msg.Msg -> Effect msg sendSharedMsg sharedMsg = - SendSharedMsg sharedMsg \ No newline at end of file + SendSharedMsg sharedMsg diff --git a/src/LearningResources.elm b/src/LearningResources.elm index 3dcfe45..0a771a5 100644 --- a/src/LearningResources.elm +++ b/src/LearningResources.elm @@ -2,10 +2,12 @@ module LearningResources exposing (..) import LearningResources.Types exposing (..) + getResourcesByTag : EntityTag -> Database -> List Resource getResourcesByTag tag database = List.filter (\resource -> List.member tag resource.teaches) database.resources + getMetadata : EntityTag -> Database -> Maybe CompiledMeta getMetadata tag database = - List.head <| List.filter (\meta -> meta.id == tag) database.metadata \ No newline at end of file + List.head <| List.filter (\meta -> meta.id == tag) database.metadata diff --git a/src/Pages/Learning/Resource_.elm b/src/Pages/Learning/Resource_.elm index 8857133..5281ae6 100644 --- a/src/Pages/Learning/Resource_.elm +++ b/src/Pages/Learning/Resource_.elm @@ -1,9 +1,11 @@ module Pages.Learning.Resource_ exposing (Model, Msg, page) +import Css import Effect exposing (Effect) import Html.Styled as Html exposing (Html, div, span, text) import Html.Styled.Attributes as Attr exposing (css, href, target) import Layouts +import LearningResources.Emojis as Emojis import LearningResources.Types as LearningResources import Page exposing (Page) import Route exposing (Route) @@ -14,9 +16,7 @@ import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming -import Css import View exposing (View) -import LearningResources.Emojis as Emojis page : Shared.Model -> Route { resource : String } -> Page Model Msg @@ -27,9 +27,12 @@ page shared route = , subscriptions = \_ -> Sub.none , view = view shared route.params } - |> Page.withLayout (\_ -> Layouts.Global { - activePage = Route.Path.Learning - }) + |> Page.withLayout + (\_ -> + Layouts.Global + { activePage = Route.Path.Learning + } + ) type alias Model = @@ -59,7 +62,7 @@ view shared route _ = LearningResources.entityTagFromString route.resource activeMeta = - activeTag + activeTag |> Maybe.andThen (\tag -> List.filter (\m -> m.id == tag) db.metadata |> List.head) in { title = Maybe.map .name activeMeta |> Maybe.withDefault "Topic" @@ -71,14 +74,11 @@ view shared route _ = viewExplorerLayout : LearningResources.Database -> Maybe LearningResources.EntityTag -> String -> Html Msg viewExplorerLayout db activeTag activeSlug = div [ css [ Tw.flex, Tw.max_w_7xl, Tw.mx_auto, Tw.pt_12, Tw.pb_24, Tw.gap_12 ] ] - [ - div [ css [ Tw.w_64, Tw.flex_shrink_0, Tw.hidden, Breakpoints.lg [ Tw.block ] ] ] - [ Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.mb_6, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_2 ] ] + [ div [ css [ Tw.w_64, Tw.flex_shrink_0, Tw.hidden, Breakpoints.lg [ Tw.block ] ] ] + [ Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.mb_6, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_2 ] ] [ text "Topics" ] , viewSidebarTopicList db.metadata activeSlug ] - - , div [ css [ Tw.flex_1 ] ] [ case activeTag of Nothing -> @@ -124,8 +124,16 @@ viewSidebarLink activeSlug meta = , Tw.px_3 , Tw.rounded_lg , Tw.transition_colors - , if isActive then Tw.bg_color Tw.slate_800 else Tw.bg_color Tw.transparent - , if isActive then Tw.text_color Tw.white else Tw.text_color Tw.gray_400 + , if isActive then + Tw.bg_color Tw.slate_800 + + else + Tw.bg_color Tw.transparent + , if isActive then + Tw.text_color Tw.white + + else + Tw.text_color Tw.gray_400 , Css.hover [ Tw.text_color Tw.white, Tw.bg_color Tw.slate_800 ] ] ] @@ -144,7 +152,7 @@ viewTopicHeader maybeMeta = [ div [ css [ Tw.text_5xl ] ] [ text (Emojis.emojiOrBackup meta) ] , Html.h1 [ css [ Theming.headingFont, Tw.text_4xl, Tw.font_bold ] ] [ text meta.name ] ] - , Html.p [ css [ Theming.bodyFont, Tw.text_xl, Tw.text_color Tw.gray_300, Tw.mb_4 ] ] + , Html.p [ css [ Theming.bodyFont, Tw.text_xl, Tw.text_color Tw.gray_300, Tw.mb_4 ] ] [ text meta.description ] ] @@ -153,6 +161,7 @@ viewResourceGrid : List LearningResources.Resource -> Html Msg viewResourceGrid resources = if List.isEmpty resources then div [ css [ Theming.bodyFont, Tw.text_color Tw.gray_400, Tw.italic ] ] [ text "No resources found for this topic yet." ] + else div [ css [ Tw.grid, Tw.grid_cols_1, Breakpoints.md [ Tw.grid_cols_2 ], Tw.gap_6 ] ] (List.map viewResourceCard resources) @@ -161,30 +170,23 @@ viewResourceGrid resources = viewResourceCard : LearningResources.Resource -> Html Msg viewResourceCard resource = Theming.cardShell [ Tw.p_6, Tw.flex, Tw.flex_col ] - [ - div [ css [ Tw.flex, Tw.justify_between, Tw.items_start, Tw.mb_4 ] ] + [ div [ css [ Tw.flex, Tw.justify_between, Tw.items_start, Tw.mb_4 ] ] [ Html.h3 [ css [ Theming.headingFont, Tw.text_lg ] ] [ text resource.name ] , viewPricingBadge resource.pricing ] - - , div [ css [ Tw.flex, Tw.gap_2, Tw.mb_4 ] ] (List.map viewTypeBadge resource.type_) - - , Html.p [ css [ Theming.bodyFont, Tw.text_sm, Tw.mb_6, Tw.flex_grow ] ] [ text (Maybe.withDefault "No description provided." resource.description) ] - - - , Html.a + , Html.a [ Attr.href resource.url , Attr.target "_blank" - , css + , css [ Theming.headingFont , Tw.text_color Tw.dd_pink , Css.hover [ Tw.text_color Tw.white ] - , Tw.transition_colors - ] + , Tw.transition_colors + ] ] [ text "Read more ->" ] ] @@ -235,4 +237,4 @@ viewPricingBadge pricing = , Tw.rounded_md ] ] - [ text (paid.model ++ ": $" ++ String.fromFloat paid.amount) ] \ No newline at end of file + [ text (paid.model ++ ": $" ++ String.fromFloat paid.amount) ] diff --git a/src/Pages/Rules.elm b/src/Pages/Rules.elm index f1dd99f..05709d1 100644 --- a/src/Pages/Rules.elm +++ b/src/Pages/Rules.elm @@ -188,7 +188,7 @@ viewRuleSection section = [ h3 [ css [ Theming.headingFont, Tw.text_2xl, Tw.text_color Tw.dd_teal, Tw.mb_3 ] ] [ text (String.fromInt section.id ++ ". " ++ section.title) ] - , div [ css [ Tw.flex, Tw.flex_col, Tw.gap_2] ] + , div [ css [ Tw.flex, Tw.flex_col, Tw.gap_2 ] ] (List.indexedMap viewRuleLine section.rules) ] @@ -200,14 +200,14 @@ viewRuleLine index content = letter = String.fromChar (Char.fromCode (97 + index)) ++ ". " in - p - [ css + p + [ css [ Theming.bodyFont , Tw.text_base , Tw.text_color Tw.gray_300 , Tw.leading_snug - , Tw.m_0 - ] + , Tw.m_0 + ] ] (Html.text letter :: content) diff --git a/src/Shared.elm b/src/Shared.elm index 60bc674..bbbc31a 100644 --- a/src/Shared.elm +++ b/src/Shared.elm @@ -13,12 +13,12 @@ module Shared exposing -} import Api +import Dict import Effect exposing (Effect) import Json.Decode import Route exposing (Route) import Shared.Model import Shared.Msg -import Dict diff --git a/src/Shared/Model.elm b/src/Shared/Model.elm index f400e80..1b5b4ed 100644 --- a/src/Shared/Model.elm +++ b/src/Shared/Model.elm @@ -23,7 +23,6 @@ type LearningDatabaseStatus | Failure Http.Error - type alias Model = { learningDatabase : LearningDatabaseStatus } diff --git a/src/Theming.elm b/src/Theming.elm index ad3b276..7084411 100644 --- a/src/Theming.elm +++ b/src/Theming.elm @@ -10,7 +10,7 @@ import Tailwind.Utilities as Tw brandGradientBg : Css.Style brandGradientBg = -- elm tailwind doesnt seem to play well with this - Css.property "background-image" + Css.property "background-image" "linear-gradient(to right, var(--color-den-teal), var(--color-den-indigo), var(--color-den-pink))" From d26e8cd012f51f9a01d2b1ac97c3f57c9b1a362c Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 18:48:20 +0100 Subject: [PATCH 22/48] test: remove old test --- tests/LearningResourcesTest.elm | 122 -------------------------------- 1 file changed, 122 deletions(-) delete mode 100644 tests/LearningResourcesTest.elm diff --git a/tests/LearningResourcesTest.elm b/tests/LearningResourcesTest.elm deleted file mode 100644 index b89dc8e..0000000 --- a/tests/LearningResourcesTest.elm +++ /dev/null @@ -1,122 +0,0 @@ -module LearningResourcesTest exposing (all) - -import Expect -import LearningResources exposing (..) -import Test exposing (Test, describe, test) -import Yaml.Decode - - -yamlString : String -yamlString = - """name: Java -description: Java is an Object Oriented language designed by James Gosling in 1995 -emoji: '821822045187866625' -resources: -- name: Tutorial Spot - url: https://www.tutorialspoint.com/java/index.htm - pros: [ ] - cons: - - Slightly dated -- name: Alex Lee - url: https://www.youtube.com/channel/UC_fFL5jgoCOrwAVoM_fBYwA - pros: - - Video series - - Covers a wide range of concepts - cons: [ ] -- name: Bro Code - url: https://www.youtube.com/c/BroCodez - pros: - - Video series - - Has videos on many different languages and concepts - cons: [ ] -- name: Javatpoint - url: https://www.javatpoint.com/java-tutorial - pros: [ ] - cons: [ ] -- name: Mooc.fi - description: Comprehensive Java (and general programming) course provided by the University of Helsinki - url: https://java-programming.mooc.fi/ - pros: - - Very well respected - cons: [ ] -- name: TheNewBoston - url: https://www.youtube.com/@thenewboston - pros: - - Beginner and intermediate video series - - Short, but a lot of videos (146 videos combined in both playlists) - cons: - - Videos may be outdated (2009 - 2012)""" - - -all : Test -all = - describe "LearningResources" - [ test "decodes java.yaml successfully" <| - \_ -> - case Yaml.Decode.fromString coordinate yamlString of - Ok result -> - Expect.all - [ \r -> Expect.equal "Java" r.name - , \r -> Expect.equal (Just "821822045187866625") r.emoji - , \r -> Expect.equal 6 (List.length r.resources) - ] - result - - Err err -> - Expect.fail ("Decode failed: " ++ Yaml.Decode.errorToString err) - , test "decodes resource with optional description" <| - \_ -> - case Yaml.Decode.fromString coordinate yamlString of - Ok result -> - let - mooc = - List.filter (\r -> r.name == "Mooc.fi") result.resources - |> List.head - in - case mooc of - Just resource -> - Expect.equal - (Just "Comprehensive Java (and general programming) course provided by the University of Helsinki") - resource.description - - Nothing -> - Expect.fail "Could not find Mooc.fi resource" - - Err err -> - Expect.fail ("Decode failed: " ++ Yaml.Decode.errorToString err) - , test "decodes resource without description as Nothing" <| - \_ -> - case Yaml.Decode.fromString coordinate yamlString of - Ok result -> - let - tutorial = - List.filter (\r -> r.name == "Tutorial Spot") result.resources - |> List.head - in - case tutorial of - Just resource -> - Expect.equal Nothing resource.description - - Nothing -> - Expect.fail "Could not find Tutorial Spot resource" - - Err err -> - Expect.fail ("Decode failed: " ++ Yaml.Decode.errorToString err) - , test "round-trips through encode and decode" <| - \_ -> - case Yaml.Decode.fromString coordinate yamlString of - Ok original -> - let - encoded = - coordinateToString original - in - case Yaml.Decode.fromString coordinate encoded of - Ok roundTripped -> - Expect.equal original.name roundTripped.name - - Err err -> - Expect.fail ("Round-trip decode failed: " ++ Yaml.Decode.errorToString err) - - Err err -> - Expect.fail ("Initial decode failed: " ++ Yaml.Decode.errorToString err) - ] From e353a37cdf3d46003c0b428eadb8a0f755d476aa Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 19:10:01 +0100 Subject: [PATCH 23/48] ci: make it build tw --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1b06e32..40da4ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,9 @@ jobs: - run: bun install --frozen-lockfile + - name: Build Tailwind modules + run: bun run tw + - name: Build run: bunx elm-land build From b1df9935340aee30b94e3053b54732506af38900 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 19:21:46 +0100 Subject: [PATCH 24/48] fix: fix some broken styles the lsp didnt catch for some reason --- src/Theming.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Theming.elm b/src/Theming.elm index 7084411..55d140a 100644 --- a/src/Theming.elm +++ b/src/Theming.elm @@ -27,7 +27,7 @@ textGradient = headingFont : Css.Style headingFont = - Css.batch [ Tw.font_mono, Tw.text_white ] + Css.batch [ Tw.font_mono, Tw.text.color Tw.white ] bodyFont : Css.Style From 25796d088fe9400e6e79fd4c7304bfb55e61bc86 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Thu, 14 May 2026 19:26:56 +0100 Subject: [PATCH 25/48] fix: broken styling again --- src/Theming.elm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Theming.elm b/src/Theming.elm index 55d140a..c4c9a1e 100644 --- a/src/Theming.elm +++ b/src/Theming.elm @@ -27,12 +27,12 @@ textGradient = headingFont : Css.Style headingFont = - Css.batch [ Tw.font_mono, Tw.text.color Tw.white ] + Css.batch [ Tw.font_mono, Tw.text_color Tw.white ] bodyFont : Css.Style bodyFont = - Css.batch [ Tw.font_sans, Tw.text_gray_300 ] + Css.batch [ Tw.font_sans, Tw.text_color Tw.gray_300 ] cardShell : List Css.Style -> List (Html msg) -> Html msg From de46ce6613a61dadff14eee17ea7b4279d079fdd Mon Sep 17 00:00:00 2001 From: Alex Wood Date: Thu, 14 May 2026 19:27:13 +0100 Subject: [PATCH 26/48] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- README.MD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.MD b/README.MD index e677e67..91eeb1f 100644 --- a/README.MD +++ b/README.MD @@ -7,8 +7,8 @@ It's easiest to use Nix/Devenv to get everything you need. ## running locally ```bash -bunx elm-land server # starts this app at http:/localhost:1234 -tw # rebuild tailwind definitions +bunx elm-land server # starts this app at http://localhost:1234 +bun run tw # rebuild tailwind definitions ``` The site should then be running at http://localhost:1234 From 56834a2ade569e85a6b662e8f56d3ddafdd1ba9f Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 15 May 2026 06:57:31 +0100 Subject: [PATCH 27/48] build: setup `elm-review` --- bun.lock | 141 +++++++++++++++++++++++++++++++++++- package.json | 1 + review/elm.json | 41 +++++++++++ review/src/ReviewConfig.elm | 68 +++++++++++++++++ 4 files changed, 248 insertions(+), 3 deletions(-) create mode 100644 review/elm.json create mode 100644 review/src/ReviewConfig.elm diff --git a/bun.lock b/bun.lock index 0032db5..badf61c 100644 --- a/bun.lock +++ b/bun.lock @@ -14,6 +14,7 @@ "@types/bun": "latest", "elm-land": "^0.20.1", "elm-open-api": "git+https://github.com/wolfadex/elm-open-api-cli.git#main", + "elm-review": "^2.13.5", "quicktype": "^23.2.6", "quicktype-core": "^23.2.6", }, @@ -167,6 +168,10 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.0", "", { "os": "win32", "cpu": "x64" }, "sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w=="], + "@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="], + + "@szmarczak/http-timer": ["@szmarczak/http-timer@4.0.6", "", { "dependencies": { "defer-to-connect": "^2.0.0" } }, "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="], + "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.0", "@tailwindcss/oxide-darwin-arm64": "4.3.0", "@tailwindcss/oxide-darwin-x64": "4.3.0", "@tailwindcss/oxide-freebsd-x64": "4.3.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", "@tailwindcss/oxide-linux-x64-musl": "4.3.0", "@tailwindcss/oxide-wasm32-wasi": "4.3.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg=="], @@ -207,18 +212,28 @@ "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], + "@types/cacheable-request": ["@types/cacheable-request@6.0.3", "", { "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", "@types/node": "*", "@types/responselike": "^1.0.0" } }, "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw=="], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/http-cache-semantics": ["@types/http-cache-semantics@4.2.0", "", {}, "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], + "@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="], + "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@types/responselike": ["@types/responselike@1.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], "acorn-walk": ["acorn-walk@8.3.5", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw=="], + "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -243,6 +258,8 @@ "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + "brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -255,6 +272,10 @@ "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], + "cacheable-lookup": ["cacheable-lookup@5.0.4", "", {}, "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="], + + "cacheable-request": ["cacheable-request@7.0.4", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^6.0.1", "responselike": "^2.0.0" } }, "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg=="], + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -269,8 +290,16 @@ "chokidar": ["chokidar@3.5.3", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="], + "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + + "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + "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=="], + "clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], + + "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="], + "collection-utils": ["collection-utils@1.0.1", "", {}, "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg=="], "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], @@ -295,8 +324,16 @@ "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + "debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], + + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + "deep-equal": ["deep-equal@2.2.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "isarray": "^2.0.5", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", "which-typed-array": "^1.1.13" } }, "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA=="], + "defaults": ["defaults@1.0.4", "", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="], + + "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], @@ -317,10 +354,16 @@ "elm-open-api": ["elm-open-api@github:wolfadex/elm-open-api-cli#f77df0b", { "bin": "dist/elm-open-api.js" }, "wolfadex-elm-open-api-cli-f77df0b"], + "elm-review": ["elm-review@2.13.5", "", { "dependencies": { "chalk": "^4.0.0", "chokidar": "^3.5.2", "cross-spawn": "^7.0.3", "elm-solve-deps-wasm": "^1.0.2 || ^2.0.0", "fastest-levenshtein": "^1.0.16", "find-up": "^4.1.0 || ^5.0.0", "folder-hash": "^3.3.0", "got": "^11.8.5", "graceful-fs": "^4.2.11", "minimist": "^1.2.6", "ora": "^5.4.0", "path-key": "^3.1.1", "prompts": "^2.2.1", "strip-ansi": "^6.0.0", "terminal-link": "^2.1.1", "tinyglobby": "^0.2.10", "which": "^2.0.2", "wrap-ansi": "^7.0.0" }, "bin": { "elm-review": "bin/elm-review" } }, "sha512-Iw3YztGjmuGyn4nIEVOxqx+dacJialprpB0ZVrBHA0sBBOQ9+QhBaQnQ0tp0G8U8UoIAush0M7XoBqzUN1F/+A=="], + + "elm-solve-deps-wasm": ["elm-solve-deps-wasm@2.0.0", "", {}, "sha512-11OV8FgB9qsth/F94q2SJjb1MoEgbworSyNM1L+YlxVoaxp7wtWPyA8cNcPEkSoIKG1B8Tqg68ED1P6dVamHSg=="], + "elm-tailwind-modules": ["elm-tailwind-modules@0.5.0", "", { "dependencies": { "chalk": "^4.1.1", "color-name": "^1.1.4", "commander": "^7.2.0", "css-what": "^5.0.0", "deep-equal": "^2.0.3", "fs-extra": "^9.1.0", "lodash": "^4.17.21", "rollup": "^2.45.2", "tslib": "^2.2.0" }, "peerDependencies": { "postcss": "^8.2.4", "tailwindcss": "^2.0.2 || ^3.1.6" }, "bin": { "elm-tailwind-modules": "dist/cli.js" } }, "sha512-Ad03E6lZwB2Fa+OoLTSzlRKOIzO+T5jTgTOHl53WREmNZPxcaJ+1acwdM/7RJrTkTfvoXi241pdfzzOBQX5r2A=="], "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + "enhanced-resolve": ["enhanced-resolve@5.21.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-xe9vQb5kReirPUxgQrXA3ihgbCqssmTiM7cOZ+Gzu+VeGWgpV98lLZvp0dl4yriyAePcewxGUs9UpKD8PET9KQ=="], "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], @@ -341,6 +384,8 @@ "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + "fastest-levenshtein": ["fastest-levenshtein@1.0.16", "", {}, "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg=="], + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], @@ -349,6 +394,10 @@ "find-replace": ["find-replace@3.0.0", "", { "dependencies": { "array-back": "^3.0.1" } }, "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ=="], + "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + + "folder-hash": ["folder-hash@3.3.4", "", { "dependencies": { "debug": "~4.3.1", "graceful-fs": "~4.2.0", "minimatch": "~3.1.5" }, "bin": { "folder-hash": "bin/folder-hash" } }, "sha512-ygx41kOst5mOBJbcMq+BTtadOIPxLBtj0CAI9QVY8DUSW2WcKQd6yD/i49cL3qEwI5iJryoQ1+kzZE3FyJX4ug=="], + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], "fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], @@ -367,12 +416,16 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + "got": ["got@11.8.6", "", { "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", "@types/cacheable-request": "^6.0.1", "@types/responselike": "^1.0.0", "cacheable-lookup": "^5.0.3", "cacheable-request": "^7.0.2", "decompress-response": "^6.0.0", "http2-wrapper": "^1.0.0-beta.5.2", "lowercase-keys": "^2.0.0", "p-cancelable": "^2.0.0", "responselike": "^2.0.0" } }, "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "graphql": ["graphql@0.11.7", "", { "dependencies": { "iterall": "1.1.3" } }, "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw=="], @@ -389,6 +442,10 @@ "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + + "http2-wrapper": ["http2-wrapper@1.0.3", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" } }, "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg=="], + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], @@ -419,6 +476,8 @@ "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], @@ -435,6 +494,8 @@ "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], + "is-url": ["is-url@1.2.4", "", {}, "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="], "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], @@ -451,8 +512,14 @@ "js-base64": ["js-base64@3.7.8", "", {}, "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow=="], + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "launch-editor": ["launch-editor@2.6.1", "", { "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw=="], "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], @@ -483,10 +550,16 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], + "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], + "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], + + "lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], @@ -497,10 +570,18 @@ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="], + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], @@ -509,6 +590,8 @@ "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + "normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="], + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], "object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], @@ -523,10 +606,22 @@ "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + + "ora": ["ora@5.4.1", "", { "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], + + "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], "path-equal": ["path-equal@1.2.5", "", {}, "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g=="], + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], @@ -535,7 +630,7 @@ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], @@ -561,8 +656,14 @@ "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], + "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + + "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], + "quicktype": ["quicktype@23.2.6", "", { "dependencies": { "@glideapps/ts-necessities": "^2.2.3", "chalk": "^4.1.2", "collection-utils": "^1.0.1", "command-line-args": "^5.2.1", "command-line-usage": "^7.0.1", "cross-fetch": "^4.0.0", "graphql": "^0.11.7", "lodash": "^4.17.21", "moment": "^2.30.1", "quicktype-core": "23.2.6", "quicktype-graphql-input": "23.2.6", "quicktype-typescript-input": "23.2.6", "readable-stream": "^4.5.2", "stream-json": "1.8.0", "string-to-stream": "^3.0.1", "typescript": "~5.8.3" }, "bin": { "quicktype": "dist/index.js" } }, "sha512-rlD1jF71bOmDn6SQ/ToLuuRkMQ7maxo5oVTn5dPCl11ymqoJCFCvl7FzRfh+fkDFmWt2etl+JiIEdWImLxferA=="], "quicktype-core": ["quicktype-core@23.2.6", "", { "dependencies": { "@glideapps/ts-necessities": "2.2.3", "browser-or-node": "^3.0.0", "collection-utils": "^1.0.1", "cross-fetch": "^4.0.0", "is-url": "^1.2.4", "js-base64": "^3.7.7", "lodash": "^4.17.21", "pako": "^1.0.6", "pluralize": "^8.0.0", "readable-stream": "4.5.2", "unicode-properties": "^1.4.1", "urijs": "^1.19.1", "wordwrap": "^1.0.0", "yaml": "^2.4.1" } }, "sha512-asfeSv7BKBNVb9WiYhFRBvBZHcRutPRBwJMxW0pefluK4kkKu4lv0IvZBwFKvw2XygLcL1Rl90zxWDHYgkwCmA=="], @@ -583,6 +684,12 @@ "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], + + "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="], + + "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], "rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], @@ -613,6 +720,10 @@ "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], @@ -637,6 +748,8 @@ "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "supports-hyperlinks": ["supports-hyperlinks@2.3.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA=="], + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], "table-layout": ["table-layout@4.1.1", "", { "dependencies": { "array-back": "^6.2.2", "wordwrapjs": "^5.1.0" } }, "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA=="], @@ -645,6 +758,8 @@ "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], + "terminal-link": ["terminal-link@2.1.1", "", { "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" } }, "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ=="], + "terser": ["terser@5.15.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw=="], "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], @@ -667,6 +782,8 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "typical": ["typical@4.0.0", "", {}, "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw=="], @@ -689,6 +806,8 @@ "vite-plugin-elm-watch": ["vite-plugin-elm-watch@1.3.3", "", { "dependencies": { "cross-spawn": "7.0.3", "elm": "0.19.1-6", "launch-editor": "2.6.1", "terser": "5.26.0", "tiny-decoders": "7.0.1" } }, "sha512-rR78gmeYp08E4CvtpnZuumsmNXaG/XOJ/xtOVfEG3TOJqDChXy1DzE1pnPsERohbELkov7ZZPHRLGV1z2iyxKg=="], + "wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], + "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], @@ -719,6 +838,8 @@ "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="], + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], "@mark.probst/typescript-json-schema/@types/node": ["@types/node@16.18.126", "", {}, "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw=="], @@ -745,16 +866,28 @@ "@tailwindcss/postcss/tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], + "anymatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + + "bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="], + "command-line-usage/array-back": ["array-back@6.2.3", "", {}, "sha512-SGDvmg6QTYiTxCBkYVmThcoa67uLl35pyzRHdpCGBOcqFy6BtwnphoFPk7LhJshD+Yk1Kt35WGWeZPTgwR4Fhw=="], "command-line-usage/typical": ["typical@7.3.0", "", {}, "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw=="], "elm-land/typescript": ["typescript@4.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA=="], + "elm-review/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + "quicktype/typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], "quicktype-core/@glideapps/ts-necessities": ["@glideapps/ts-necessities@2.2.3", "", {}, "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w=="], @@ -763,6 +896,8 @@ "quicktype-typescript-input/typescript": ["typescript@4.9.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="], + "readdirp/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + "string-to-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], @@ -773,8 +908,6 @@ "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], - "tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], - "ts-node/arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="], "unicode-trie/pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], @@ -783,6 +916,8 @@ "vite-plugin-elm-watch/terser": ["terser@5.26.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ=="], + "elm-review/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "tailwindcss/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "vite-plugin-elm-watch/terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], diff --git a/package.json b/package.json index a5615b5..5ae5c87 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "@types/bun": "latest", "elm-land": "^0.20.1", "elm-open-api": "git+https://github.com/wolfadex/elm-open-api-cli.git#main", + "elm-review": "^2.13.5", "quicktype": "^23.2.6", "quicktype-core": "^23.2.6" }, diff --git a/review/elm.json b/review/elm.json new file mode 100644 index 0000000..6bbcb97 --- /dev/null +++ b/review/elm.json @@ -0,0 +1,41 @@ +{ + "type": "application", + "source-directories": [ + "src" + ], + "elm-version": "0.19.1", + "dependencies": { + "direct": { + "elm/core": "1.0.5", + "elm/json": "1.1.4", + "elm/project-metadata-utils": "1.0.2", + "jfmengels/elm-review": "2.16.6", + "jfmengels/elm-review-code-style": "1.2.0", + "jfmengels/elm-review-common": "1.3.5", + "jfmengels/elm-review-debug": "1.0.8", + "jfmengels/elm-review-documentation": "2.0.4", + "jfmengels/elm-review-simplify": "2.1.15", + "jfmengels/elm-review-unused": "1.2.6", + "stil4m/elm-syntax": "7.3.9" + }, + "indirect": { + "elm/bytes": "1.0.8", + "elm/html": "1.0.1", + "elm/parser": "1.1.0", + "elm/random": "1.0.0", + "elm/regex": "1.0.0", + "elm/time": "1.0.0", + "elm/virtual-dom": "1.0.5", + "elm-explorations/test": "2.2.1", + "pzp1997/assoc-list": "1.0.0", + "rtfeldman/elm-hex": "1.0.0", + "stil4m/structured-writer": "1.0.3" + } + }, + "test-dependencies": { + "direct": { + "elm-explorations/test": "2.2.1" + }, + "indirect": {} + } +} \ No newline at end of file diff --git a/review/src/ReviewConfig.elm b/review/src/ReviewConfig.elm new file mode 100644 index 0000000..147a9da --- /dev/null +++ b/review/src/ReviewConfig.elm @@ -0,0 +1,68 @@ +module ReviewConfig exposing (config) + +{-| Do not rename the ReviewConfig module or the config function, because +`elm-review` will look for these. + +To add packages that contain rules, add them to this review project using + + `elm install author/packagename` + +when inside the directory containing this file. + +-} + +import Docs.ReviewAtDocs +import NoConfusingPrefixOperator +import NoDebug.Log +import NoDebug.TodoOrToString +import NoExposingEverything +import NoImportingEverything +import NoMissingTypeAnnotation +import NoMissingTypeAnnotationInLetIn +import NoMissingTypeExpose +import NoPrematureLetComputation +import NoSimpleLetBody +import NoUnused.CustomTypeConstructorArgs +import NoUnused.CustomTypeConstructors +import NoUnused.Dependencies +import NoUnused.Exports +import NoUnused.Parameters +import NoUnused.Patterns +import NoUnused.Variables +import Review.FilePattern as FilePattern +import Review.Rule as Rule exposing (Rule) +import Simplify + + +config : List Rule +config = + List.map + (Rule.ignoreErrorsFor + [ FilePattern.excludeDirectory "gen/" + , FilePattern.excludeDirectory "src/OpenApi/" + , FilePattern.excludeDirectory ".elm-land" + , FilePattern.exclude "src/LearningResources/Json.elm" + , FilePattern.exclude "src/LearningResources/Types.elm" + ] + ) + [ Docs.ReviewAtDocs.rule + , NoConfusingPrefixOperator.rule + , NoDebug.Log.rule + , NoDebug.TodoOrToString.rule + |> Rule.ignoreErrorsForDirectories [ "tests/" ] + , NoExposingEverything.rule + , NoImportingEverything.rule [] + , NoMissingTypeAnnotation.rule + , NoMissingTypeAnnotationInLetIn.rule + , NoMissingTypeExpose.rule + , NoSimpleLetBody.rule + , NoPrematureLetComputation.rule + , NoUnused.CustomTypeConstructors.rule [] + , NoUnused.CustomTypeConstructorArgs.rule + , NoUnused.Dependencies.rule + , NoUnused.Exports.rule + , NoUnused.Parameters.rule + , NoUnused.Patterns.rule + , NoUnused.Variables.rule + , Simplify.rule Simplify.defaults + ] From 8a4eebcc29aee6f6260c0394eb76c799980926b6 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Fri, 15 May 2026 08:44:07 +0100 Subject: [PATCH 28/48] refactor: apply elm-format --- elm.json | 6 ------ src/Api.elm | 8 ++------ src/Layouts/Global.elm | 4 ++-- src/LearningResources.elm | 4 ++-- src/LearningResources/Emojis.elm | 2 +- src/Pages/Home_.elm | 4 ++-- src/Pages/Learning/Resource_.elm | 4 ++-- src/Pages/Rules.elm | 8 ++++---- src/Redirects.elm | 2 +- src/Shared.elm | 12 ------------ src/Shared/Model.elm | 1 - src/Shared/Msg.elm | 2 -- src/Theming.elm | 2 +- 13 files changed, 17 insertions(+), 42 deletions(-) diff --git a/elm.json b/elm.json index 07a8d15..4982383 100644 --- a/elm.json +++ b/elm.json @@ -8,7 +8,6 @@ "elm-version": "0.19.1", "dependencies": { "direct": { - "NoRedInk/elm-json-decode-pipeline": "1.0.1", "elm/browser": "1.0.2", "elm/bytes": "1.0.8", "elm/core": "1.0.5", @@ -16,16 +15,11 @@ "elm/http": "2.0.0", "elm/json": "1.1.3", "elm/url": "1.0.0", - "elm-explorations/test": "2.2.1", - "lovebug356/yaml": "1.0.5", "matheus23/elm-tailwind-modules-base": "1.0.0", "rtfeldman/elm-css": "18.0.0" }, "indirect": { "elm/file": "1.0.5", - "elm/parser": "1.1.0", - "elm/random": "1.0.0", - "elm/regex": "1.0.0", "elm/time": "1.0.0", "elm/virtual-dom": "1.0.3", "robinheghan/murmur3": "1.0.0", diff --git a/src/Api.elm b/src/Api.elm index e3bd7ac..9621511 100644 --- a/src/Api.elm +++ b/src/Api.elm @@ -1,17 +1,13 @@ -module Api exposing (..) +module Api exposing (Data(..), getLearningResourcesIndex) import Effect exposing (Effect) import Http -import Json.Decode as Json import LearningResources.Json as LearningResources import LearningResources.Types as LearningResources -import Yaml.Decode type Data value - = Loading - | Success value - | Failure Http.Error + = Success value getLearningResourcesIndex : diff --git a/src/Layouts/Global.elm b/src/Layouts/Global.elm index a39106f..be8e800 100644 --- a/src/Layouts/Global.elm +++ b/src/Layouts/Global.elm @@ -20,7 +20,7 @@ type alias Props = layout : Props -> Shared.Model -> Route () -> Layout () Model Msg contentMsg -layout props shared route = +layout props _ _ = Layout.new { init = init , update = update @@ -62,7 +62,7 @@ update msg model = subscriptions : Model -> Sub Msg -subscriptions model = +subscriptions _ = Sub.none diff --git a/src/LearningResources.elm b/src/LearningResources.elm index 0a771a5..46c1e58 100644 --- a/src/LearningResources.elm +++ b/src/LearningResources.elm @@ -1,6 +1,6 @@ -module LearningResources exposing (..) +module LearningResources exposing (getMetadata, getResourcesByTag) -import LearningResources.Types exposing (..) +import LearningResources.Types exposing (CompiledMeta, Database, EntityTag, Resource) getResourcesByTag : EntityTag -> Database -> List Resource diff --git a/src/LearningResources/Emojis.elm b/src/LearningResources/Emojis.elm index 022b057..543928d 100644 --- a/src/LearningResources/Emojis.elm +++ b/src/LearningResources/Emojis.elm @@ -1,7 +1,7 @@ -- Backup emoji mappings for learning resources -module LearningResources.Emojis exposing (..) +module LearningResources.Emojis exposing (emojiOrBackup) import LearningResources.Types as LearningResources exposing (EntityTag(..)) diff --git a/src/Pages/Home_.elm b/src/Pages/Home_.elm index c4c14cb..f9961b1 100644 --- a/src/Pages/Home_.elm +++ b/src/Pages/Home_.elm @@ -1,8 +1,8 @@ module Pages.Home_ exposing (Model, Msg, page) import Css -import Effect exposing (Effect) -import Html.Styled as Html exposing (Html, a, div, fieldset, h1, h2, i, img, legend, p, text) +import Effect +import Html.Styled exposing (Html, a, div, h2, i, img, text) import Html.Styled.Attributes as Attr exposing (css, href, target) import Layouts import Page exposing (Page) diff --git a/src/Pages/Learning/Resource_.elm b/src/Pages/Learning/Resource_.elm index 5281ae6..01cc4c0 100644 --- a/src/Pages/Learning/Resource_.elm +++ b/src/Pages/Learning/Resource_.elm @@ -1,9 +1,9 @@ module Pages.Learning.Resource_ exposing (Model, Msg, page) import Css -import Effect exposing (Effect) +import Effect import Html.Styled as Html exposing (Html, div, span, text) -import Html.Styled.Attributes as Attr exposing (css, href, target) +import Html.Styled.Attributes as Attr exposing (css) import Layouts import LearningResources.Emojis as Emojis import LearningResources.Types as LearningResources diff --git a/src/Pages/Rules.elm b/src/Pages/Rules.elm index 05709d1..ba0ef32 100644 --- a/src/Pages/Rules.elm +++ b/src/Pages/Rules.elm @@ -2,7 +2,7 @@ module Pages.Rules exposing (Model, Msg, page) import Css import Effect exposing (Effect) -import Html.Styled as Html exposing (Html, a, div, h1, h2, h3, p, span, text) +import Html.Styled as Html exposing (Html, a, div, h1, h2, h3, p, text) import Html.Styled.Attributes as Attr exposing (css) import Layouts import Page exposing (Page) @@ -16,7 +16,7 @@ import View exposing (View) page : Shared.Model -> Route () -> Page Model Msg -page shared route = +page _ _ = Page.new { init = init , update = update @@ -138,7 +138,7 @@ update msg model = subscriptions : Model -> Sub Msg -subscriptions model = +subscriptions _ = Sub.none @@ -147,7 +147,7 @@ subscriptions model = view : Model -> View Msg -view model = +view _ = { title = "Rules" , body = [ div [ css [ Tw.max_w_4xl, Tw.mx_auto, Tw.pt_2, Tw.pb_24, Tw.px_6 ] ] diff --git a/src/Redirects.elm b/src/Redirects.elm index 1c1dc45..d8bbcc8 100644 --- a/src/Redirects.elm +++ b/src/Redirects.elm @@ -1,4 +1,4 @@ -module Redirects exposing (..) +module Redirects exposing (discordURL, githubURL) discordURL : String diff --git a/src/Shared.elm b/src/Shared.elm index bbbc31a..c24c59f 100644 --- a/src/Shared.elm +++ b/src/Shared.elm @@ -13,7 +13,6 @@ module Shared exposing -} import Api -import Dict import Effect exposing (Effect) import Json.Decode import Route exposing (Route) @@ -71,17 +70,6 @@ update _ msg model = , Effect.none ) - Shared.Msg.RetryLearningIndex -> - ( { model | learningDatabase = Shared.Model.Loading } - , Api.getLearningResourcesIndex - { onResponse = Shared.Msg.LearningIndexResponded } - ) - - Shared.Msg.NoOp -> - ( model - , Effect.none - ) - -- SUBSCRIPTIONS diff --git a/src/Shared/Model.elm b/src/Shared/Model.elm index 1b5b4ed..717d782 100644 --- a/src/Shared/Model.elm +++ b/src/Shared/Model.elm @@ -5,7 +5,6 @@ module Shared.Model exposing {-| -} -import Dict exposing (Dict) import Http import LearningResources.Types as LearningResources diff --git a/src/Shared/Msg.elm b/src/Shared/Msg.elm index 011fefe..d7841e8 100644 --- a/src/Shared/Msg.elm +++ b/src/Shared/Msg.elm @@ -15,5 +15,3 @@ own file, so they can be imported by `Effect.elm` -} type Msg = LearningIndexResponded (Result Http.Error LearningResources.Database) - | RetryLearningIndex - | NoOp diff --git a/src/Theming.elm b/src/Theming.elm index c4c9a1e..ab4fd32 100644 --- a/src/Theming.elm +++ b/src/Theming.elm @@ -1,4 +1,4 @@ -module Theming exposing (..) +module Theming exposing (bodyFont, brandGradientBg, cardShell, headingFont, textGradient) import Css import Html.Styled as Html exposing (Html) From 3b918947a8f5e2c65b2ef65c65c568c3b2ad8b85 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sat, 17 Oct 2026 10:09:52 +0100 Subject: [PATCH 29/48] refactor: move to `elm-pages` --- .elm-land/server/index.html | 15 + .elm-land/server/main.js | 48 + .elm-land/src/Auth.elm | 30 + .elm-land/src/Auth/Action.elm | 153 ++++ .elm-land/src/Layout.elm | 194 ++++ .elm-land/src/Layouts.elm | 14 + .elm-land/src/Main.elm | 846 ++++++++++++++++++ .elm-land/src/Main/Layouts/Model.elm | 7 + .elm-land/src/Main/Layouts/Msg.elm | 7 + .elm-land/src/Main/Pages/Model.elm | 18 + .elm-land/src/Main/Pages/Msg.elm | 15 + .elm-land/src/Page.elm | 230 +++++ .elm-land/src/Pages/NotFound_.elm | 69 ++ .elm-land/src/Route.elm | 44 + .elm-land/src/Route/Path.elm | 80 ++ .elm-land/src/Route/Query.elm | 55 ++ .elm-land/src/interop.js | 9 + .elm-land/src/interop.ts | 25 + .github/workflows/ci.yml | 4 +- .github/workflows/deploy.yml | 8 +- .gitignore | 3 +- .npmrc | 1 + README.MD | 7 +- app/Api.elm | 35 + app/Effect.elm | 185 ++++ app/ErrorPage.elm | 84 ++ src/Pages/Home_.elm => app/Route/Index.elm | 94 +- {src/Pages => app/Route}/Learning.elm | 109 +-- .../Route}/Learning/Resource_.elm | 152 ++-- {src/Pages => app/Route}/Rules.elm | 115 +-- app/Shared.elm | 212 +++++ app/Site.elm | 21 + app/View.elm | 79 ++ bun.lock | 741 +++++++++++++-- codegen/elm.codegen.json | 18 + elm-land.json | 50 -- elm-pages.config.mjs | 15 + elm.json | 67 +- index.ts | 16 + package.json | 16 +- {static => public}/base.css | 0 {static => public}/devden-banner.svg | 0 {static => public}/devden-logo.svg | 0 public/favicon.ico | Bin 0 -> 450 bytes public/robots.txt | 4 + review/src/ReviewConfig.elm | 2 +- src/Api.elm | 21 - src/Effect.elm | 219 ----- src/Layouts/Global.elm | 179 ---- src/LearningResources.elm | 19 +- src/Shared.elm | 80 -- src/Shared/Model.elm | 27 - src/Shared/Msg.elm | 17 - src/View.elm | 72 -- tailwind.config.ts | 2 +- 55 files changed, 3556 insertions(+), 977 deletions(-) create mode 100644 .elm-land/server/index.html create mode 100644 .elm-land/server/main.js create mode 100644 .elm-land/src/Auth.elm create mode 100644 .elm-land/src/Auth/Action.elm create mode 100644 .elm-land/src/Layout.elm create mode 100644 .elm-land/src/Layouts.elm create mode 100644 .elm-land/src/Main.elm create mode 100644 .elm-land/src/Main/Layouts/Model.elm create mode 100644 .elm-land/src/Main/Layouts/Msg.elm create mode 100644 .elm-land/src/Main/Pages/Model.elm create mode 100644 .elm-land/src/Main/Pages/Msg.elm create mode 100644 .elm-land/src/Page.elm create mode 100644 .elm-land/src/Pages/NotFound_.elm create mode 100644 .elm-land/src/Route.elm create mode 100644 .elm-land/src/Route/Path.elm create mode 100644 .elm-land/src/Route/Query.elm create mode 100644 .elm-land/src/interop.js create mode 100644 .elm-land/src/interop.ts create mode 100644 .npmrc create mode 100644 app/Api.elm create mode 100644 app/Effect.elm create mode 100644 app/ErrorPage.elm rename src/Pages/Home_.elm => app/Route/Index.elm (67%) rename {src/Pages => app/Route}/Learning.elm (74%) rename {src/Pages => app/Route}/Learning/Resource_.elm (65%) rename {src/Pages => app/Route}/Rules.elm (78%) create mode 100644 app/Shared.elm create mode 100644 app/Site.elm create mode 100644 app/View.elm create mode 100644 codegen/elm.codegen.json delete mode 100644 elm-land.json create mode 100644 elm-pages.config.mjs create mode 100644 index.ts rename {static => public}/base.css (100%) rename {static => public}/devden-banner.svg (100%) rename {static => public}/devden-logo.svg (100%) create mode 100644 public/favicon.ico create mode 100644 public/robots.txt delete mode 100644 src/Api.elm delete mode 100644 src/Effect.elm delete mode 100644 src/Layouts/Global.elm delete mode 100644 src/Shared.elm delete mode 100644 src/Shared/Model.elm delete mode 100644 src/Shared/Msg.elm delete mode 100644 src/View.elm diff --git a/.elm-land/server/index.html b/.elm-land/server/index.html new file mode 100644 index 0000000..5c773e5 --- /dev/null +++ b/.elm-land/server/index.html @@ -0,0 +1,15 @@ + + + + Elm Land + + + + + + + + + + + \ No newline at end of file diff --git a/.elm-land/server/main.js b/.elm-land/server/main.js new file mode 100644 index 0000000..ed507f4 --- /dev/null +++ b/.elm-land/server/main.js @@ -0,0 +1,48 @@ +import Main from '../src/Main.elm' + +let startApp = async ({ Interop }) => { + // Grab environment variables, but remove the "ELM_LAND_" prefix + let env = Object.keys(import.meta.env).reduce((env, key) => { + if (key.startsWith('ELM_LAND_')) { + env[key.slice('ELM_LAND_'.length)] = import.meta.env[key] + } + return env + }, {}) + + let flags = undefined + + if (Interop.flags) { + flags = await Interop.flags({ env }) + } + + if (Main && Main.init) { + let app = Main.init({ + flags + }) + + if (Interop.onReady) { + Interop.onReady({ app, env }) + } + } + +} + + +const main = async () => { + try { + // Attempt to find "interop.ts" file + let interopFiles = import.meta.glob('../../src/interop.ts', { eager: true }) + await startApp({ Interop: interopFiles['../../src/interop.ts'] }) + } catch (_) { + try { + // Attempt to find "interop.js" file + let interopFiles = import.meta.glob('../../src/interop.js', { eager: true }) + await startApp({ Interop: interopFiles['../../src/interop.js'] }) + } catch (_) { + // Run application without an interop file + await startApp({ Interop: {} }) + } + } +} + +main() \ No newline at end of file diff --git a/.elm-land/src/Auth.elm b/.elm-land/src/Auth.elm new file mode 100644 index 0000000..d9883ca --- /dev/null +++ b/.elm-land/src/Auth.elm @@ -0,0 +1,30 @@ +module Auth exposing (User, onPageLoad, viewCustomPage) + +import Auth.Action +import Dict +import Route exposing (Route) +import Route.Path +import Shared +import View exposing (View) + + +type alias User = + {} + + +{-| Called before an auth-only page is loaded. +-} +onPageLoad : Shared.Model -> Route () -> Auth.Action.Action User +onPageLoad shared route = + Auth.Action.pushRoute + { path = Route.Path.NotFound_ + , query = Dict.empty + , hash = Nothing + } + + +{-| Renders whenever `Auth.Action.loadCustomPage` is returned from `onPageLoad`. +-} +viewCustomPage : Shared.Model -> Route () -> View Never +viewCustomPage shared route = + View.fromString "Loading..." diff --git a/.elm-land/src/Auth/Action.elm b/.elm-land/src/Auth/Action.elm new file mode 100644 index 0000000..597ed78 --- /dev/null +++ b/.elm-land/src/Auth/Action.elm @@ -0,0 +1,153 @@ +module Auth.Action exposing + ( Action(..) + , loadPageWithUser, loadCustomPage + , replaceRoute, pushRoute, loadExternalUrl + , view, subscriptions, command + ) + +{-| + +@docs Action +@docs loadPageWithUser, loadCustomPage +@docs replaceRoute, pushRoute, loadExternalUrl + +@docs view, subscriptions, command + +-} + +import Browser.Navigation +import Dict exposing (Dict) +import Route.Path +import Shared +import Url exposing (Url) +import View exposing (View) + + +{-| Describes the action to take for authenticated pages, based +on the current `Route` and `Shared.Model` +-} +type Action user + = LoadPageWithUser user + | LoadCustomPage + | ReplaceRoute + { path : Route.Path.Path + , query : Dict String String + , hash : Maybe String + } + | PushRoute + { path : Route.Path.Path + , query : Dict String String + , hash : Maybe String + } + | LoadExternalUrl String + + +{-| Successfully pass the user along to the authenticated page. +-} +loadPageWithUser : user -> Action user +loadPageWithUser = + LoadPageWithUser + + +{-| Rather than navigating to a different route, keep the URL, but render +what was defined in `Auth.loadCustomPage`. + +**Note:** `Auth.loadCustomPage` has access to the `Shared.Model`, so you +can render different pages in different authentication scenarios. + +-} +loadCustomPage : Action user +loadCustomPage = + LoadCustomPage + + +{-| Replace the URL with the provided route. +-} +replaceRoute : + { path : Route.Path.Path + , query : Dict String String + , hash : Maybe String + } + -> Action user +replaceRoute = + ReplaceRoute + + +{-| Push a new URL with the provided route. +-} +pushRoute : + { path : Route.Path.Path + , query : Dict String String + , hash : Maybe String + } + -> Action user +pushRoute = + PushRoute + + +{-| Navigate to a URL for an external website. +-} +loadExternalUrl : String -> Action user +loadExternalUrl = + LoadExternalUrl + + + +-- USED INTERNALLY BY ELM LAND + + +view : View msg -> (user -> View msg) -> Action user -> View msg +view viewCustomPage viewPageWithUser authAction = + case authAction of + LoadPageWithUser user -> + viewPageWithUser user + + LoadCustomPage -> + viewCustomPage + + ReplaceRoute _ -> + View.none + + PushRoute _ -> + View.none + + LoadExternalUrl _ -> + View.none + + +subscriptions : (user -> Sub msg) -> Action user -> Sub msg +subscriptions toSub authAction = + case authAction of + LoadPageWithUser user -> + toSub user + + LoadCustomPage -> + Sub.none + + ReplaceRoute _ -> + Sub.none + + PushRoute _ -> + Sub.none + + LoadExternalUrl _ -> + Sub.none + + +command : (user -> Cmd msg) -> Action user -> Cmd msg +command toCmd authAction = + case authAction of + LoadPageWithUser user -> + toCmd user + + LoadCustomPage -> + Cmd.none + + ReplaceRoute _ -> + Cmd.none + + PushRoute _ -> + Cmd.none + + LoadExternalUrl _ -> + Cmd.none diff --git a/.elm-land/src/Layout.elm b/.elm-land/src/Layout.elm new file mode 100644 index 0000000..25d4e9e --- /dev/null +++ b/.elm-land/src/Layout.elm @@ -0,0 +1,194 @@ +module Layout exposing + ( Layout, new + , withParentProps + , withOnUrlChanged, withOnQueryParameterChanged, withOnHashChanged + , init, update, view, subscriptions + , parentProps, toUrlMessages + ) + +{-| + +@docs Layout, new +@docs withParentProps +@docs withOnUrlChanged, withOnQueryParameterChanged, withOnHashChanged + +@docs init, update, view, subscriptions +@docs parentProps, toUrlMessages + +-} + +import Dict exposing (Dict) +import Effect exposing (Effect) +import Route exposing (Route) +import View exposing (View) + + +type Layout parentProps model msg contentMsg + = Layout + { init : () -> ( model, Effect msg ) + , update : msg -> model -> ( model, Effect msg ) + , subscriptions : model -> Sub msg + , view : { model : model, toContentMsg : msg -> contentMsg, content : View contentMsg } -> View contentMsg + , parentProps : parentProps + , onUrlChanged : Maybe ({ from : Route (), to : Route () } -> msg) + , onHashChanged : Maybe ({ from : Maybe String, to : Maybe String } -> msg) + , onQueryParameterChangedDict : Dict String ({ from : Maybe String, to : Maybe String } -> msg) + } + + +new : + { init : () -> ( model, Effect msg ) + , update : msg -> model -> ( model, Effect msg ) + , subscriptions : model -> Sub msg + , view : { model : model, toContentMsg : msg -> contentMsg, content : View contentMsg } -> View contentMsg + } + -> Layout () model msg contentMsg +new options = + Layout + { init = options.init + , update = options.update + , subscriptions = options.subscriptions + , view = options.view + , parentProps = () + , onUrlChanged = Nothing + , onHashChanged = Nothing + , onQueryParameterChangedDict = Dict.empty + } + + +withParentProps : + parentProps + -> Layout () model msg contentMsg + -> Layout parentProps model msg contentMsg +withParentProps props (Layout layout) = + Layout + { init = layout.init + , update = layout.update + , subscriptions = layout.subscriptions + , view = layout.view + , parentProps = props + , onUrlChanged = layout.onUrlChanged + , onHashChanged = layout.onHashChanged + , onQueryParameterChangedDict = layout.onQueryParameterChangedDict + } + + + +-- URL CHANGES + + +withOnUrlChanged : + ({ from : Route () + , to : Route () + } + -> msg + ) + -> Layout parentProps model msg contentMsg + -> Layout parentProps model msg contentMsg +withOnUrlChanged onChange (Layout layout) = + Layout { layout | onUrlChanged = Just onChange } + + +withOnHashChanged : + ({ from : Maybe String + , to : Maybe String + } + -> msg + ) + -> Layout parentProps model msg contentMsg + -> Layout parentProps model msg contentMsg +withOnHashChanged onChange (Layout layout) = + Layout { layout | onHashChanged = Just onChange } + + +withOnQueryParameterChanged : + { key : String + , onChange : + { from : Maybe String + , to : Maybe String + } + -> msg + } + -> Layout parentProps model msg contentMsg + -> Layout parentProps model msg contentMsg +withOnQueryParameterChanged { key, onChange } (Layout layout) = + Layout { layout | onQueryParameterChangedDict = Dict.insert key onChange layout.onQueryParameterChangedDict } + + +init : Layout parentProps model msg contentMsg -> () -> ( model, Effect msg ) +init (Layout layout) = + layout.init + + +update : Layout parentProps model msg contentMsg -> msg -> model -> ( model, Effect msg ) +update (Layout layout) = + layout.update + + +view : + Layout parentProps model msg contentMsg + -> { model : model, toContentMsg : msg -> contentMsg, content : View contentMsg } + -> View contentMsg +view (Layout layout) = + layout.view + + +subscriptions : Layout parentProps model msg contentMsg -> model -> Sub msg +subscriptions (Layout layout) = + layout.subscriptions + + +parentProps : Layout parentProps model msg contentMsg -> parentProps +parentProps (Layout layout) = + layout.parentProps + + +toUrlMessages : + { from : Route (), to : Route () } + -> Layout parentProps model msg contentMsg + -> List msg +toUrlMessages routes (Layout layout) = + List.concat + [ case layout.onUrlChanged of + Just onUrlChanged -> + [ onUrlChanged routes ] + + Nothing -> + [] + , case layout.onHashChanged of + Just onHashChanged -> + if routes.from.hash == routes.to.hash then + [] + + else + [ onHashChanged + { from = routes.from.hash + , to = routes.to.hash + } + ] + + Nothing -> + [] + , let + toQueryParameterMessage : + ( String + , { from : Maybe String, to : Maybe String } -> msg + ) + -> Maybe msg + toQueryParameterMessage ( key, onChange ) = + let + from = + Dict.get key routes.from.query + + to = + Dict.get key routes.to.query + in + if from == to then + Nothing + + else + Just (onChange { from = from, to = to }) + in + Dict.toList layout.onQueryParameterChangedDict + |> List.filterMap toQueryParameterMessage + ] diff --git a/.elm-land/src/Layouts.elm b/.elm-land/src/Layouts.elm new file mode 100644 index 0000000..f2d9da7 --- /dev/null +++ b/.elm-land/src/Layouts.elm @@ -0,0 +1,14 @@ +module Layouts exposing (..) + +import Layouts.Global + + +type Layout msg + = Global Layouts.Global.Props + + +map : (msg1 -> msg2) -> Layout msg1 -> Layout msg2 +map fn layout = + case layout of + Global data -> + Global data diff --git a/.elm-land/src/Main.elm b/.elm-land/src/Main.elm new file mode 100644 index 0000000..7afbfc3 --- /dev/null +++ b/.elm-land/src/Main.elm @@ -0,0 +1,846 @@ +module Main exposing (..) + +import Auth +import Auth.Action +import Browser +import Browser.Navigation +import Effect exposing (Effect) +import Html exposing (Html) +import Json.Decode +import Layout +import Layouts +import Layouts.Global +import Main.Layouts.Model +import Main.Layouts.Msg +import Main.Pages.Model +import Main.Pages.Msg +import Page +import Pages.Home_ +import Pages.Learning +import Pages.Learning.Resource_ +import Pages.Rules +import Pages.NotFound_ +import Pages.NotFound_ +import Route exposing (Route) +import Route.Path +import Shared +import Task +import Url exposing (Url) +import View exposing (View) + + +main : Program Json.Decode.Value Model Msg +main = + Browser.application + { init = init + , update = update + , view = view + , subscriptions = subscriptions + , onUrlChange = UrlChanged + , onUrlRequest = UrlRequested + } + + + +-- INIT + + +type alias Model = + { key : Browser.Navigation.Key + , url : Url + , page : Main.Pages.Model.Model + , layout : Maybe Main.Layouts.Model.Model + , shared : Shared.Model + } + + +init : Json.Decode.Value -> Url -> Browser.Navigation.Key -> ( Model, Cmd Msg ) +init json url key = + let + flagsResult : Result Json.Decode.Error Shared.Flags + flagsResult = + Json.Decode.decodeValue Shared.decoder json + + ( sharedModel, sharedEffect ) = + Shared.init flagsResult (Route.fromUrl () url) + + { page, layout } = + initPageAndLayout { key = key, url = url, shared = sharedModel, layout = Nothing } + in + ( { url = url + , key = key + , page = Tuple.first page + , layout = layout |> Maybe.map Tuple.first + , shared = sharedModel + } + , Cmd.batch + [ Tuple.second page + , layout |> Maybe.map Tuple.second |> Maybe.withDefault Cmd.none + , fromSharedEffect { key = key, url = url, shared = sharedModel } sharedEffect + ] + ) + + +initLayout : { key : Browser.Navigation.Key, url : Url, shared : Shared.Model, layout : Maybe Main.Layouts.Model.Model } -> Layouts.Layout Msg -> ( Main.Layouts.Model.Model, Cmd Msg ) +initLayout model layout = + case ( layout, model.layout ) of + ( Layouts.Global props, Just (Main.Layouts.Model.Global existing) ) -> + ( Main.Layouts.Model.Global existing + , Cmd.none + ) + + ( Layouts.Global props, _ ) -> + let + route : Route () + route = + Route.fromUrl () model.url + + globalLayout = + Layouts.Global.layout props model.shared route + + ( globalLayoutModel, globalLayoutEffect ) = + Layout.init globalLayout () + in + ( Main.Layouts.Model.Global { global = globalLayoutModel } + , fromLayoutEffect model (Effect.map Main.Layouts.Msg.Global globalLayoutEffect) + ) + + +initPageAndLayout : { key : Browser.Navigation.Key, url : Url, shared : Shared.Model, layout : Maybe Main.Layouts.Model.Model } -> { page : ( Main.Pages.Model.Model, Cmd Msg ), layout : Maybe ( Main.Layouts.Model.Model, Cmd Msg ) } +initPageAndLayout model = + case Route.Path.fromUrl model.url of + Route.Path.Home_ -> + let + page : Page.Page Pages.Home_.Model Pages.Home_.Msg + page = + Pages.Home_.page model.shared (Route.fromUrl () model.url) + + ( pageModel, pageEffect ) = + Page.init page () + in + { page = + Tuple.mapBoth + Main.Pages.Model.Home_ + (Effect.map Main.Pages.Msg.Home_ >> fromPageEffect model) + ( pageModel, pageEffect ) + , layout = + Page.layout pageModel page + |> Maybe.map (Layouts.map (Main.Pages.Msg.Home_ >> Page)) + |> Maybe.map (initLayout model) + } + + Route.Path.Learning -> + let + page : Page.Page Pages.Learning.Model Pages.Learning.Msg + page = + Pages.Learning.page model.shared (Route.fromUrl () model.url) + + ( pageModel, pageEffect ) = + Page.init page () + in + { page = + Tuple.mapBoth + Main.Pages.Model.Learning + (Effect.map Main.Pages.Msg.Learning >> fromPageEffect model) + ( pageModel, pageEffect ) + , layout = + Page.layout pageModel page + |> Maybe.map (Layouts.map (Main.Pages.Msg.Learning >> Page)) + |> Maybe.map (initLayout model) + } + + Route.Path.Learning_Resource_ params -> + let + page : Page.Page Pages.Learning.Resource_.Model Pages.Learning.Resource_.Msg + page = + Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url) + + ( pageModel, pageEffect ) = + Page.init page () + in + { page = + Tuple.mapBoth + (Main.Pages.Model.Learning_Resource_ params) + (Effect.map Main.Pages.Msg.Learning_Resource_ >> fromPageEffect model) + ( pageModel, pageEffect ) + , layout = + Page.layout pageModel page + |> Maybe.map (Layouts.map (Main.Pages.Msg.Learning_Resource_ >> Page)) + |> Maybe.map (initLayout model) + } + + Route.Path.Rules -> + let + page : Page.Page Pages.Rules.Model Pages.Rules.Msg + page = + Pages.Rules.page model.shared (Route.fromUrl () model.url) + + ( pageModel, pageEffect ) = + Page.init page () + in + { page = + Tuple.mapBoth + Main.Pages.Model.Rules + (Effect.map Main.Pages.Msg.Rules >> fromPageEffect model) + ( pageModel, pageEffect ) + , layout = + Page.layout pageModel page + |> Maybe.map (Layouts.map (Main.Pages.Msg.Rules >> Page)) + |> Maybe.map (initLayout model) + } + + Route.Path.NotFound_ -> + let + page : Page.Page Pages.NotFound_.Model Pages.NotFound_.Msg + page = + Pages.NotFound_.page model.shared (Route.fromUrl () model.url) + + ( pageModel, pageEffect ) = + Page.init page () + in + { page = + Tuple.mapBoth + Main.Pages.Model.NotFound_ + (Effect.map Main.Pages.Msg.NotFound_ >> fromPageEffect model) + ( pageModel, pageEffect ) + , layout = + Page.layout pageModel page + |> Maybe.map (Layouts.map (Main.Pages.Msg.NotFound_ >> Page)) + |> Maybe.map (initLayout model) + } + + +runWhenAuthenticated : { model | shared : Shared.Model, url : Url, key : Browser.Navigation.Key } -> (Auth.User -> ( Main.Pages.Model.Model, Cmd Msg )) -> ( Main.Pages.Model.Model, Cmd Msg ) +runWhenAuthenticated model toTuple = + let + record = + runWhenAuthenticatedWithLayout model (\user -> { page = toTuple user, layout = Nothing }) + in + record.page + + +runWhenAuthenticatedWithLayout : { model | shared : Shared.Model, url : Url, key : Browser.Navigation.Key } -> (Auth.User -> { page : ( Main.Pages.Model.Model, Cmd Msg ), layout : Maybe ( Main.Layouts.Model.Model, Cmd Msg ) }) -> { page : ( Main.Pages.Model.Model, Cmd Msg ), layout : Maybe ( Main.Layouts.Model.Model, Cmd Msg ) } +runWhenAuthenticatedWithLayout model toRecord = + let + authAction : Auth.Action.Action Auth.User + authAction = + Auth.onPageLoad model.shared (Route.fromUrl () model.url) + + toCmd : Effect Msg -> Cmd Msg + toCmd = + Effect.toCmd + { key = model.key + , url = model.url + , shared = model.shared + , fromSharedMsg = Shared + , batch = Batch + , toCmd = Task.succeed >> Task.perform identity + } + in + case authAction of + Auth.Action.LoadPageWithUser user -> + toRecord user + + Auth.Action.LoadCustomPage -> + { page = + ( Main.Pages.Model.Loading_ + , Cmd.none + ) + , layout = Nothing + } + + Auth.Action.ReplaceRoute options -> + { page = + ( Main.Pages.Model.Redirecting_ + , toCmd (Effect.replaceRoute options) + ) + , layout = Nothing + } + + Auth.Action.PushRoute options -> + { page = + ( Main.Pages.Model.Redirecting_ + , toCmd (Effect.pushRoute options) + ) + , layout = Nothing + } + + Auth.Action.LoadExternalUrl externalUrl -> + { page = + ( Main.Pages.Model.Redirecting_ + , Browser.Navigation.load externalUrl + ) + , layout = Nothing + } + + + +-- UPDATE + + +type Msg + = UrlRequested Browser.UrlRequest + | UrlChanged Url + | Page Main.Pages.Msg.Msg + | Layout Main.Layouts.Msg.Msg + | Shared Shared.Msg + | Batch (List Msg) + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + UrlRequested (Browser.Internal url) -> + ( model + , Browser.Navigation.pushUrl model.key (Url.toString url) + ) + + UrlRequested (Browser.External url) -> + if String.isEmpty (String.trim url) then + ( model, Cmd.none ) + + else + ( model + , Browser.Navigation.load url + ) + + UrlChanged url -> + if Route.Path.fromUrl url == Route.Path.fromUrl model.url then + let + newModel : Model + newModel = + { model | url = url } + in + ( newModel + , Cmd.batch + [ toPageUrlHookCmd newModel + { from = Route.fromUrl () model.url + , to = Route.fromUrl () newModel.url + } + , toLayoutUrlHookCmd model newModel + { from = Route.fromUrl () model.url + , to = Route.fromUrl () newModel.url + } + ] + ) + + else + let + { page, layout } = + initPageAndLayout { key = model.key, shared = model.shared, layout = model.layout, url = url } + + ( pageModel, pageCmd ) = + page + + ( layoutModel, layoutCmd ) = + case layout of + Just ( layoutModel_, layoutCmd_ ) -> + ( Just layoutModel_, layoutCmd_ ) + + Nothing -> + ( Nothing, Cmd.none ) + + newModel = + { model | url = url, page = pageModel, layout = layoutModel } + in + ( newModel + , Cmd.batch + [ pageCmd + , layoutCmd + , toLayoutUrlHookCmd model newModel + { from = Route.fromUrl () model.url + , to = Route.fromUrl () newModel.url + } + ] + ) + + Page pageMsg -> + let + ( pageModel, pageCmd ) = + updateFromPage pageMsg model + in + ( { model | page = pageModel } + , pageCmd + ) + + Layout layoutMsg -> + let + ( layoutModel, layoutCmd ) = + updateFromLayout layoutMsg model + in + ( { model | layout = layoutModel } + , layoutCmd + ) + + Shared sharedMsg -> + let + ( sharedModel, sharedEffect ) = + Shared.update (Route.fromUrl () model.url) sharedMsg model.shared + + ( oldAction, newAction ) = + ( Auth.onPageLoad model.shared (Route.fromUrl () model.url) + , Auth.onPageLoad sharedModel (Route.fromUrl () model.url) + ) + in + if isAuthProtected (Route.fromUrl () model.url).path && (hasActionTypeChanged oldAction newAction) then + let + { layout, page } = + initPageAndLayout { key = model.key, shared = sharedModel, url = model.url, layout = model.layout } + + ( pageModel, pageCmd ) = + page + + ( layoutModel, layoutCmd ) = + ( layout |> Maybe.map Tuple.first + , layout |> Maybe.map Tuple.second |> Maybe.withDefault Cmd.none + ) + in + ( { model | shared = sharedModel, page = pageModel, layout = layoutModel } + , Cmd.batch + [ pageCmd + , layoutCmd + , fromSharedEffect { model | shared = sharedModel } sharedEffect + ] + ) + + else + ( { model | shared = sharedModel } + , fromSharedEffect { model | shared = sharedModel } sharedEffect + ) + + Batch messages -> + ( model + , messages + |> List.map (Task.succeed >> Task.perform identity) + |> Cmd.batch + ) + + +updateFromPage : Main.Pages.Msg.Msg -> Model -> ( Main.Pages.Model.Model, Cmd Msg ) +updateFromPage msg model = + case ( msg, model.page ) of + ( Main.Pages.Msg.Home_ pageMsg, Main.Pages.Model.Home_ pageModel ) -> + Tuple.mapBoth + Main.Pages.Model.Home_ + (Effect.map Main.Pages.Msg.Home_ >> fromPageEffect model) + (Page.update (Pages.Home_.page model.shared (Route.fromUrl () model.url)) pageMsg pageModel) + + ( Main.Pages.Msg.Learning pageMsg, Main.Pages.Model.Learning pageModel ) -> + Tuple.mapBoth + Main.Pages.Model.Learning + (Effect.map Main.Pages.Msg.Learning >> fromPageEffect model) + (Page.update (Pages.Learning.page model.shared (Route.fromUrl () model.url)) pageMsg pageModel) + + ( Main.Pages.Msg.Learning_Resource_ pageMsg, Main.Pages.Model.Learning_Resource_ params pageModel ) -> + Tuple.mapBoth + (Main.Pages.Model.Learning_Resource_ params) + (Effect.map Main.Pages.Msg.Learning_Resource_ >> fromPageEffect model) + (Page.update (Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url)) pageMsg pageModel) + + ( Main.Pages.Msg.Rules pageMsg, Main.Pages.Model.Rules pageModel ) -> + Tuple.mapBoth + Main.Pages.Model.Rules + (Effect.map Main.Pages.Msg.Rules >> fromPageEffect model) + (Page.update (Pages.Rules.page model.shared (Route.fromUrl () model.url)) pageMsg pageModel) + + ( Main.Pages.Msg.NotFound_ pageMsg, Main.Pages.Model.NotFound_ pageModel ) -> + Tuple.mapBoth + Main.Pages.Model.NotFound_ + (Effect.map Main.Pages.Msg.NotFound_ >> fromPageEffect model) + (Page.update (Pages.NotFound_.page model.shared (Route.fromUrl () model.url)) pageMsg pageModel) + + _ -> + ( model.page + , Cmd.none + ) + + +updateFromLayout : Main.Layouts.Msg.Msg -> Model -> ( Maybe Main.Layouts.Model.Model, Cmd Msg ) +updateFromLayout msg model = + let + route : Route () + route = + Route.fromUrl () model.url + in + case ( toLayoutFromPage model, model.layout, msg ) of + ( Just (Layouts.Global props), Just (Main.Layouts.Model.Global layoutModel), Main.Layouts.Msg.Global layoutMsg ) -> + Tuple.mapBoth + (\newModel -> Just (Main.Layouts.Model.Global { layoutModel | global = newModel })) + (Effect.map Main.Layouts.Msg.Global >> fromLayoutEffect model) + (Layout.update (Layouts.Global.layout props model.shared route) layoutMsg layoutModel.global) + + _ -> + ( model.layout + , Cmd.none + ) + + +toLayoutFromPage : Model -> Maybe (Layouts.Layout Msg) +toLayoutFromPage model = + case model.page of + Main.Pages.Model.Home_ pageModel -> + Route.fromUrl () model.url + |> Pages.Home_.page model.shared + |> Page.layout pageModel + |> Maybe.map (Layouts.map (Main.Pages.Msg.Home_ >> Page)) + + Main.Pages.Model.Learning pageModel -> + Route.fromUrl () model.url + |> Pages.Learning.page model.shared + |> Page.layout pageModel + |> Maybe.map (Layouts.map (Main.Pages.Msg.Learning >> Page)) + + Main.Pages.Model.Learning_Resource_ params pageModel -> + Route.fromUrl params model.url + |> Pages.Learning.Resource_.page model.shared + |> Page.layout pageModel + |> Maybe.map (Layouts.map (Main.Pages.Msg.Learning_Resource_ >> Page)) + + Main.Pages.Model.Rules pageModel -> + Route.fromUrl () model.url + |> Pages.Rules.page model.shared + |> Page.layout pageModel + |> Maybe.map (Layouts.map (Main.Pages.Msg.Rules >> Page)) + + Main.Pages.Model.NotFound_ pageModel -> + Route.fromUrl () model.url + |> Pages.NotFound_.page model.shared + |> Page.layout pageModel + |> Maybe.map (Layouts.map (Main.Pages.Msg.NotFound_ >> Page)) + + Main.Pages.Model.Redirecting_ -> + Nothing + + Main.Pages.Model.Loading_ -> + Nothing + + +toAuthProtectedPage : Model -> (Auth.User -> Shared.Model -> Route params -> Page.Page model msg) -> Route params -> Maybe (Page.Page model msg) +toAuthProtectedPage model toPage route = + case Auth.onPageLoad model.shared (Route.fromUrl () model.url) of + Auth.Action.LoadPageWithUser user -> + Just (toPage user model.shared route) + + _ -> + Nothing + + +hasActionTypeChanged : Auth.Action.Action user -> Auth.Action.Action user -> Bool +hasActionTypeChanged oldAction newAction = + case ( newAction, oldAction ) of + ( Auth.Action.LoadPageWithUser _, Auth.Action.LoadPageWithUser _ ) -> + False + + ( Auth.Action.LoadCustomPage, Auth.Action.LoadCustomPage ) -> + False + + ( Auth.Action.ReplaceRoute _, Auth.Action.ReplaceRoute _ ) -> + False + + ( Auth.Action.PushRoute _, Auth.Action.PushRoute _ ) -> + False + + ( Auth.Action.LoadExternalUrl _, Auth.Action.LoadExternalUrl _ ) -> + False + + ( _, _ ) -> + True + + +subscriptions : Model -> Sub Msg +subscriptions model = + let + subscriptionsFromPage : Sub Msg + subscriptionsFromPage = + case model.page of + Main.Pages.Model.Home_ pageModel -> + Page.subscriptions (Pages.Home_.page model.shared (Route.fromUrl () model.url)) pageModel + |> Sub.map Main.Pages.Msg.Home_ + |> Sub.map Page + + Main.Pages.Model.Learning pageModel -> + Page.subscriptions (Pages.Learning.page model.shared (Route.fromUrl () model.url)) pageModel + |> Sub.map Main.Pages.Msg.Learning + |> Sub.map Page + + Main.Pages.Model.Learning_Resource_ params pageModel -> + Page.subscriptions (Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url)) pageModel + |> Sub.map Main.Pages.Msg.Learning_Resource_ + |> Sub.map Page + + Main.Pages.Model.Rules pageModel -> + Page.subscriptions (Pages.Rules.page model.shared (Route.fromUrl () model.url)) pageModel + |> Sub.map Main.Pages.Msg.Rules + |> Sub.map Page + + Main.Pages.Model.NotFound_ pageModel -> + Page.subscriptions (Pages.NotFound_.page model.shared (Route.fromUrl () model.url)) pageModel + |> Sub.map Main.Pages.Msg.NotFound_ + |> Sub.map Page + + Main.Pages.Model.Redirecting_ -> + Sub.none + + Main.Pages.Model.Loading_ -> + Sub.none + + maybeLayout : Maybe (Layouts.Layout Msg) + maybeLayout = + toLayoutFromPage model + + route : Route () + route = + Route.fromUrl () model.url + + subscriptionsFromLayout : Sub Msg + subscriptionsFromLayout = + case ( maybeLayout, model.layout ) of + ( Just (Layouts.Global props), Just (Main.Layouts.Model.Global layoutModel) ) -> + Layout.subscriptions (Layouts.Global.layout props model.shared route) layoutModel.global + |> Sub.map Main.Layouts.Msg.Global + |> Sub.map Layout + + _ -> + Sub.none + in + Sub.batch + [ Shared.subscriptions route model.shared + |> Sub.map Shared + , subscriptionsFromPage + , subscriptionsFromLayout + ] + + + +-- VIEW + + +view : Model -> Browser.Document Msg +view model = + let + view_ : View Msg + view_ = + toView model + in + View.toBrowserDocument + { shared = model.shared + , route = Route.fromUrl () model.url + , view = view_ + } + + +toView : Model -> View Msg +toView model = + let + route : Route () + route = + Route.fromUrl () model.url + in + case ( toLayoutFromPage model, model.layout ) of + ( Just (Layouts.Global props), Just (Main.Layouts.Model.Global layoutModel) ) -> + Layout.view + (Layouts.Global.layout props model.shared route) + { model = layoutModel.global + , toContentMsg = Main.Layouts.Msg.Global >> Layout + , content = viewPage model + } + + _ -> + viewPage model + + +viewPage : Model -> View Msg +viewPage model = + case model.page of + Main.Pages.Model.Home_ pageModel -> + Page.view (Pages.Home_.page model.shared (Route.fromUrl () model.url)) pageModel + |> View.map Main.Pages.Msg.Home_ + |> View.map Page + + Main.Pages.Model.Learning pageModel -> + Page.view (Pages.Learning.page model.shared (Route.fromUrl () model.url)) pageModel + |> View.map Main.Pages.Msg.Learning + |> View.map Page + + Main.Pages.Model.Learning_Resource_ params pageModel -> + Page.view (Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url)) pageModel + |> View.map Main.Pages.Msg.Learning_Resource_ + |> View.map Page + + Main.Pages.Model.Rules pageModel -> + Page.view (Pages.Rules.page model.shared (Route.fromUrl () model.url)) pageModel + |> View.map Main.Pages.Msg.Rules + |> View.map Page + + Main.Pages.Model.NotFound_ pageModel -> + Page.view (Pages.NotFound_.page model.shared (Route.fromUrl () model.url)) pageModel + |> View.map Main.Pages.Msg.NotFound_ + |> View.map Page + + Main.Pages.Model.Redirecting_ -> + View.none + + Main.Pages.Model.Loading_ -> + Auth.viewCustomPage model.shared (Route.fromUrl () model.url) + |> View.map never + + + +-- INTERNALS + + +fromPageEffect : { model | key : Browser.Navigation.Key, url : Url, shared : Shared.Model } -> Effect Main.Pages.Msg.Msg -> Cmd Msg +fromPageEffect model effect = + Effect.toCmd + { key = model.key + , url = model.url + , shared = model.shared + , fromSharedMsg = Shared + , batch = Batch + , toCmd = Task.succeed >> Task.perform identity + } + (Effect.map Page effect) + + +fromLayoutEffect : { model | key : Browser.Navigation.Key, url : Url, shared : Shared.Model } -> Effect Main.Layouts.Msg.Msg -> Cmd Msg +fromLayoutEffect model effect = + Effect.toCmd + { key = model.key + , url = model.url + , shared = model.shared + , fromSharedMsg = Shared + , batch = Batch + , toCmd = Task.succeed >> Task.perform identity + } + (Effect.map Layout effect) + + +fromSharedEffect : { model | key : Browser.Navigation.Key, url : Url, shared : Shared.Model } -> Effect Shared.Msg -> Cmd Msg +fromSharedEffect model effect = + Effect.toCmd + { key = model.key + , url = model.url + , shared = model.shared + , fromSharedMsg = Shared + , batch = Batch + , toCmd = Task.succeed >> Task.perform identity + } + (Effect.map Shared effect) + + + +-- URL HOOKS FOR PAGES + + +toPageUrlHookCmd : Model -> { from : Route (), to : Route () } -> Cmd Msg +toPageUrlHookCmd model routes = + let + toCommands messages = + messages + |> List.map (Task.succeed >> Task.perform identity) + |> Cmd.batch + in + case model.page of + Main.Pages.Model.Home_ pageModel -> + Page.toUrlMessages routes (Pages.Home_.page model.shared (Route.fromUrl () model.url)) + |> List.map Main.Pages.Msg.Home_ + |> List.map Page + |> toCommands + + Main.Pages.Model.Learning pageModel -> + Page.toUrlMessages routes (Pages.Learning.page model.shared (Route.fromUrl () model.url)) + |> List.map Main.Pages.Msg.Learning + |> List.map Page + |> toCommands + + Main.Pages.Model.Learning_Resource_ params pageModel -> + Page.toUrlMessages routes (Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url)) + |> List.map Main.Pages.Msg.Learning_Resource_ + |> List.map Page + |> toCommands + + Main.Pages.Model.Rules pageModel -> + Page.toUrlMessages routes (Pages.Rules.page model.shared (Route.fromUrl () model.url)) + |> List.map Main.Pages.Msg.Rules + |> List.map Page + |> toCommands + + Main.Pages.Model.NotFound_ pageModel -> + Page.toUrlMessages routes (Pages.NotFound_.page model.shared (Route.fromUrl () model.url)) + |> List.map Main.Pages.Msg.NotFound_ + |> List.map Page + |> toCommands + + Main.Pages.Model.Redirecting_ -> + Cmd.none + + Main.Pages.Model.Loading_ -> + Cmd.none + + +toLayoutUrlHookCmd : Model -> Model -> { from : Route (), to : Route () } -> Cmd Msg +toLayoutUrlHookCmd oldModel model routes = + let + toCommands messages = + if shouldFireUrlChangedEvents then + messages + |> List.map (Task.succeed >> Task.perform identity) + |> Cmd.batch + + else + Cmd.none + + shouldFireUrlChangedEvents = + hasNavigatedWithinNewLayout + { from = toLayoutFromPage oldModel + , to = toLayoutFromPage model + } + + route = + Route.fromUrl () model.url + in + case ( toLayoutFromPage model, model.layout ) of + ( Just (Layouts.Global props), Just (Main.Layouts.Model.Global layoutModel) ) -> + Layout.toUrlMessages routes (Layouts.Global.layout props model.shared route) + |> List.map Main.Layouts.Msg.Global + |> List.map Layout + |> toCommands + + _ -> + Cmd.none + + +hasNavigatedWithinNewLayout : { from : Maybe (Layouts.Layout msg), to : Maybe (Layouts.Layout msg) } -> Bool +hasNavigatedWithinNewLayout { from, to } = + let + isRelated maybePair = + case maybePair of + Just ( Layouts.Global _, Layouts.Global _ ) -> + True + + _ -> + False + in + List.any isRelated + [ Maybe.map2 Tuple.pair from to + , Maybe.map2 Tuple.pair to from + ] + + +isAuthProtected : Route.Path.Path -> Bool +isAuthProtected routePath = + case routePath of + Route.Path.Home_ -> + False + + Route.Path.Learning -> + False + + Route.Path.Learning_Resource_ _ -> + False + + Route.Path.Rules -> + False + + Route.Path.NotFound_ -> + False diff --git a/.elm-land/src/Main/Layouts/Model.elm b/.elm-land/src/Main/Layouts/Model.elm new file mode 100644 index 0000000..ae70763 --- /dev/null +++ b/.elm-land/src/Main/Layouts/Model.elm @@ -0,0 +1,7 @@ +module Main.Layouts.Model exposing (..) + +import Layouts.Global + + +type Model + = Global { global : Layouts.Global.Model } diff --git a/.elm-land/src/Main/Layouts/Msg.elm b/.elm-land/src/Main/Layouts/Msg.elm new file mode 100644 index 0000000..dd3c3a0 --- /dev/null +++ b/.elm-land/src/Main/Layouts/Msg.elm @@ -0,0 +1,7 @@ +module Main.Layouts.Msg exposing (..) + +import Layouts.Global + + +type Msg + = Global Layouts.Global.Msg diff --git a/.elm-land/src/Main/Pages/Model.elm b/.elm-land/src/Main/Pages/Model.elm new file mode 100644 index 0000000..85b37ea --- /dev/null +++ b/.elm-land/src/Main/Pages/Model.elm @@ -0,0 +1,18 @@ +module Main.Pages.Model exposing (Model(..)) + +import Pages.Home_ +import Pages.Learning +import Pages.Learning.Resource_ +import Pages.Rules +import Pages.NotFound_ +import View exposing (View) + + +type Model + = Home_ Pages.Home_.Model + | Learning Pages.Learning.Model + | Learning_Resource_ { resource : String } Pages.Learning.Resource_.Model + | Rules Pages.Rules.Model + | NotFound_ Pages.NotFound_.Model + | Redirecting_ + | Loading_ diff --git a/.elm-land/src/Main/Pages/Msg.elm b/.elm-land/src/Main/Pages/Msg.elm new file mode 100644 index 0000000..d233f40 --- /dev/null +++ b/.elm-land/src/Main/Pages/Msg.elm @@ -0,0 +1,15 @@ +module Main.Pages.Msg exposing (Msg(..)) + +import Pages.Home_ +import Pages.Learning +import Pages.Learning.Resource_ +import Pages.Rules +import Pages.NotFound_ + + +type Msg + = Home_ Pages.Home_.Msg + | Learning Pages.Learning.Msg + | Learning_Resource_ Pages.Learning.Resource_.Msg + | Rules Pages.Rules.Msg + | NotFound_ Pages.NotFound_.Msg diff --git a/.elm-land/src/Page.elm b/.elm-land/src/Page.elm new file mode 100644 index 0000000..f1df9b2 --- /dev/null +++ b/.elm-land/src/Page.elm @@ -0,0 +1,230 @@ +module Page exposing + ( Page, new + , sandbox, element + , withLayout + , withOnUrlChanged, withOnQueryParameterChanged, withOnHashChanged + , init, update, view, subscriptions, layout, toUrlMessages + ) + +{-| + +@docs Page, new +@docs sandbox, element +@docs withLayout +@docs withOnUrlChanged, withOnQueryParameterChanged, withOnHashChanged + +@docs init, update, view, subscriptions, layout, toUrlMessages + +-} + +import Dict exposing (Dict) +import Effect exposing (Effect) +import Layouts exposing (Layout) +import Route exposing (Route) +import View exposing (View) + + +type Page model msg + = Page + { init : () -> ( model, Effect msg ) + , update : msg -> model -> ( model, Effect msg ) + , subscriptions : model -> Sub msg + , view : model -> View msg + , toLayout : Maybe (model -> Layout msg) + , onUrlChanged : Maybe ({ from : Route (), to : Route () } -> msg) + , onHashChanged : Maybe ({ from : Maybe String, to : Maybe String } -> msg) + , onQueryParameterChangedDict : Dict String ({ from : Maybe String, to : Maybe String } -> msg) + } + + +new : + { init : () -> ( model, Effect msg ) + , update : msg -> model -> ( model, Effect msg ) + , subscriptions : model -> Sub msg + , view : model -> View msg + } + -> Page model msg +new options = + Page + { init = options.init + , update = options.update + , subscriptions = options.subscriptions + , view = options.view + , toLayout = Nothing + , onUrlChanged = Nothing + , onHashChanged = Nothing + , onQueryParameterChangedDict = Dict.empty + } + + +sandbox : + { init : model + , update : msg -> model -> model + , view : model -> View msg + } + -> Page model msg +sandbox options = + Page + { init = \_ -> ( options.init, Effect.none ) + , update = \msg model -> ( options.update msg model, Effect.none ) + , subscriptions = \_ -> Sub.none + , view = options.view + , toLayout = Nothing + , onUrlChanged = Nothing + , onHashChanged = Nothing + , onQueryParameterChangedDict = Dict.empty + } + + +element : + { init : ( model, Cmd msg ) + , update : msg -> model -> ( model, Cmd msg ) + , subscriptions : model -> Sub msg + , view : model -> View msg + } + -> Page model msg +element options = + Page + { init = + \_ -> + options.init + |> Tuple.mapSecond Effect.sendCmd + , update = + \msg model -> + options.update msg model + |> Tuple.mapSecond Effect.sendCmd + , subscriptions = options.subscriptions + , view = options.view + , toLayout = Nothing + , onUrlChanged = Nothing + , onHashChanged = Nothing + , onQueryParameterChangedDict = Dict.empty + } + + + +-- LAYOUTS + + +withLayout : (model -> Layout msg) -> Page model msg -> Page model msg +withLayout toLayout_ (Page page) = + Page { page | toLayout = Just toLayout_ } + + + +-- URL CHANGES + + +withOnUrlChanged : + ({ from : Route () + , to : Route () + } + -> msg + ) + -> Page model msg + -> Page model msg +withOnUrlChanged onChange (Page page) = + Page { page | onUrlChanged = Just onChange } + + +withOnHashChanged : + ({ from : Maybe String + , to : Maybe String + } + -> msg + ) + -> Page model msg + -> Page model msg +withOnHashChanged onChange (Page page) = + Page { page | onHashChanged = Just onChange } + + +withOnQueryParameterChanged : + { key : String + , onChange : + { from : Maybe String + , to : Maybe String + } + -> msg + } + -> Page model msg + -> Page model msg +withOnQueryParameterChanged { key, onChange } (Page page) = + Page { page | onQueryParameterChangedDict = Dict.insert key onChange page.onQueryParameterChangedDict } + + + +-- USED INTERNALLY BY ELM LAND + + +init : Page model msg -> () -> ( model, Effect msg ) +init (Page page) = + page.init + + +update : Page model msg -> msg -> model -> ( model, Effect msg ) +update (Page page) = + page.update + + +view : Page model msg -> model -> View msg +view (Page page) = + page.view + + +subscriptions : Page model msg -> model -> Sub msg +subscriptions (Page page) = + page.subscriptions + + +layout : model -> Page model msg -> Maybe (Layouts.Layout msg) +layout model (Page page) = + Maybe.map (\fn -> fn model) page.toLayout + + +toUrlMessages : { from : Route (), to : Route () } -> Page model msg -> List msg +toUrlMessages routes (Page page) = + List.concat + [ case page.onUrlChanged of + Just onUrlChanged -> + [ onUrlChanged routes ] + + Nothing -> + [] + , case page.onHashChanged of + Just onHashChanged -> + if routes.from.hash == routes.to.hash then + [] + + else + [ onHashChanged + { from = routes.from.hash + , to = routes.to.hash + } + ] + + Nothing -> + [] + , let + toQueryParameterMessage : + ( String + , { from : Maybe String, to : Maybe String } -> msg + ) + -> Maybe msg + toQueryParameterMessage ( key, onChange ) = + let + from = + Dict.get key routes.from.query + + to = + Dict.get key routes.to.query + in + if from == to then + Nothing + + else + Just (onChange { from = from, to = to }) + in + Dict.toList page.onQueryParameterChangedDict + |> List.filterMap toQueryParameterMessage + ] diff --git a/.elm-land/src/Pages/NotFound_.elm b/.elm-land/src/Pages/NotFound_.elm new file mode 100644 index 0000000..581cf20 --- /dev/null +++ b/.elm-land/src/Pages/NotFound_.elm @@ -0,0 +1,69 @@ +module Pages.NotFound_ exposing (Model, Msg, page) + +import Effect exposing (Effect) +import Html exposing (..) +import Page exposing (Page) +import Route exposing (Route) +import Route.Path +import Shared +import View exposing (View) + + +page : Shared.Model -> Route () -> Page Model Msg +page shared route = + Page.new + { init = init + , update = update + , subscriptions = subscriptions + , view = view + } + + + +-- INIT + + +type alias Model = + {} + + +init : () -> ( Model, Effect Msg ) +init () = + ( {} + , Effect.none + ) + + + +-- UPDATE + + +type Msg + = NoOp + + +update : Msg -> Model -> ( Model, Effect Msg ) +update msg model = + case msg of + NoOp -> + ( model + , Effect.none + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Sub.none + + + +-- VIEW + + +view : Model -> View Msg +view model = + View.fromString "Page not found" diff --git a/.elm-land/src/Route.elm b/.elm-land/src/Route.elm new file mode 100644 index 0000000..7beff5c --- /dev/null +++ b/.elm-land/src/Route.elm @@ -0,0 +1,44 @@ +module Route exposing (Route, fromUrl, href, toString) + +import Dict exposing (Dict) +import Html +import Html.Attributes +import Route.Path +import Route.Query +import Url exposing (Url) + + +type alias Route params = + { path : Route.Path.Path + , params : params + , query : Dict String String + , hash : Maybe String + , url : Url + } + + +fromUrl : params -> Url -> Route params +fromUrl params url = + { path = Route.Path.fromUrl url + , params = params + , query = Route.Query.fromUrl url + , hash = url.fragment + , url = url + } + + +href : { path : Route.Path.Path, query : Dict String String, hash : Maybe String } -> Html.Attribute msg +href route = + Html.Attributes.href (toString route) + + +toString : { route | path : Route.Path.Path, query : Dict String String, hash : Maybe String } -> String +toString route = + String.join + "" + [ Route.Path.toString route.path + , Route.Query.toString route.query + , route.hash + |> Maybe.map (String.append "#") + |> Maybe.withDefault "" + ] diff --git a/.elm-land/src/Route/Path.elm b/.elm-land/src/Route/Path.elm new file mode 100644 index 0000000..9094deb --- /dev/null +++ b/.elm-land/src/Route/Path.elm @@ -0,0 +1,80 @@ +module Route.Path exposing (Path(..), fromString, fromUrl, href, toString) + +import Html +import Html.Attributes +import Url exposing (Url) +import Url.Parser exposing (()) + + +type Path + = Home_ + | Learning + | Learning_Resource_ { resource : String } + | Rules + | NotFound_ + + +fromUrl : Url -> Path +fromUrl url = + fromString url.path + |> Maybe.withDefault NotFound_ + + +fromString : String -> Maybe Path +fromString urlPath = + let + urlPathSegments : List String + urlPathSegments = + urlPath + |> String.split "/" + |> List.filter (String.trim >> String.isEmpty >> Basics.not) + in + case urlPathSegments of + [] -> + Just Home_ + + "learning" :: [] -> + Just Learning + + "learning" :: resource_ :: [] -> + Learning_Resource_ + { resource = resource_ + } + |> Just + + "rules" :: [] -> + Just Rules + + _ -> + Nothing + + +href : Path -> Html.Attribute msg +href path = + Html.Attributes.href (toString path) + + +toString : Path -> String +toString path = + let + pieces : List String + pieces = + case path of + Home_ -> + [] + + Learning -> + [ "learning" ] + + Learning_Resource_ params -> + [ "learning", params.resource ] + + Rules -> + [ "rules" ] + + NotFound_ -> + [ "404" ] + in + pieces + |> String.join "/" + |> String.append "/" diff --git a/.elm-land/src/Route/Query.elm b/.elm-land/src/Route/Query.elm new file mode 100644 index 0000000..64f9c60 --- /dev/null +++ b/.elm-land/src/Route/Query.elm @@ -0,0 +1,55 @@ +module Route.Query exposing (fromUrl, toString) + +import Dict exposing (Dict) +import Url exposing (Url) +import Url.Parser exposing (query) +import Url.Builder exposing (QueryParameter) + + +fromUrl : Url -> Dict String String +fromUrl url = + case url.query of + Nothing -> + Dict.empty + + Just query -> + if String.isEmpty query then + Dict.empty + + else + query + |> String.split "&" + |> List.filterMap (String.split "=" >> queryPiecesToTuple) + |> Dict.fromList + + +queryPiecesToTuple : List String -> Maybe (String, String) +queryPiecesToTuple pieces = + case pieces of + [] -> + Nothing + + key :: [] -> + Just ( decodeQueryToken key, "" ) + + key :: value :: _ -> + Just ( decodeQueryToken key, decodeQueryToken value ) + + +decodeQueryToken : String -> String +decodeQueryToken val = + Url.percentDecode val + |> Maybe.withDefault val + + +toString : Dict String String -> String +toString queryParameterList = + queryParameterList + |> Dict.toList + |> List.map tupleToQueryPiece + |> Url.Builder.toQuery + + +tupleToQueryPiece : (String, String) -> QueryParameter +tupleToQueryPiece ( key, value ) = + Url.Builder.string key value diff --git a/.elm-land/src/interop.js b/.elm-land/src/interop.js new file mode 100644 index 0000000..cdd813b --- /dev/null +++ b/.elm-land/src/interop.js @@ -0,0 +1,9 @@ +// This returns the flags passed into your Elm application +export const flags = async ({ env }) => { + return {} +} + +// This function is called once your Elm app is running +export const onReady = ({ app, env }) => { + console.log('Elm is ready', app) +} \ No newline at end of file diff --git a/.elm-land/src/interop.ts b/.elm-land/src/interop.ts new file mode 100644 index 0000000..73ebe76 --- /dev/null +++ b/.elm-land/src/interop.ts @@ -0,0 +1,25 @@ +// This returns the flags passed into your Elm application +export const flags = async ({ env } : ElmLand.FlagsArgs) => { + return {} +} + +// This function is called after your Elm app starts +export const onReady = ({ app, env } : ElmLand.OnReadyArgs) => { + console.log('Elm is ready', app) +} + + +// Type definitions for Elm Land +namespace ElmLand { + export type FlagsArgs = { + env: Record + } + export type OnReadyArgs = { + env: Record + app: { ports?: Record } + } + export type Port = { + send?: (data: unknown) => void + subscribe?: (callback: (data: unknown) => unknown) => void + } +} \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40da4ce..6f540cf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,8 +32,8 @@ jobs: run: bun run tw - name: Build - run: bunx elm-land build + run: bun run build - name: Check Elm formatting run: | - bunx elm-format --validate src/ + bunx elm-format --validate app/ src/ diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 8e129d2..58e34e1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -32,11 +32,11 @@ jobs: - run: bun install --frozen-lockfile - - name: Build - run: bunx elm-land build + - name: Build Tailwind modules + run: bun run tw - - name: Copy index.html as 404.html for SPA routing - run: cp dist/index.html dist/404.html + - name: Build + run: bun run build - uses: actions/configure-pages@v5 diff --git a/.gitignore b/.gitignore index b3cd1bb..d5e3415 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,8 @@ node_modules .direnv .vscode dist -.elm-land +.elm-pages +.elm-pages .env *.pem gen/Tailwind \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..8ab02bf --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +loglevel=warn diff --git a/README.MD b/README.MD index 91eeb1f..664857b 100644 --- a/README.MD +++ b/README.MD @@ -7,12 +7,11 @@ It's easiest to use Nix/Devenv to get everything you need. ## running locally ```bash -bunx elm-land server # starts this app at http://localhost:1234 -bun run tw # rebuild tailwind definitions +bun run tw # (re)generate the Tailwind Elm modules into ./gen +bun run dev # elm-pages dev server +bun run build # pre-render the site to ./dist ``` -The site should then be running at http://localhost:1234 - ### Formatting ```bash diff --git a/app/Api.elm b/app/Api.elm new file mode 100644 index 0000000..e20603c --- /dev/null +++ b/app/Api.elm @@ -0,0 +1,35 @@ +module Api exposing (routes) + +import ApiRoute exposing (ApiRoute) +import BackendTask exposing (BackendTask) +import FatalError exposing (FatalError) +import Html exposing (Html) +import Route exposing (Route) +import UrlPath + + +routes : + BackendTask FatalError (List Route) + -> (Maybe { indent : Int, newLines : Bool } -> Html Never -> String) + -> List (ApiRoute ApiRoute.Response) +routes getStaticRoutes _ = + [ ApiRoute.succeed (BackendTask.map sitemap getStaticRoutes) + |> ApiRoute.literal "sitemap.xml" + |> ApiRoute.single + ] + + +sitemap : List Route -> String +sitemap staticRoutes = + let + urlEntry : Route -> String + urlEntry route = + " https://developerden.org" ++ UrlPath.toAbsolute (Route.toPath route) ++ "" + in + String.join "\n" + ([ "" + , "" + ] + ++ List.map urlEntry staticRoutes + ++ [ "" ] + ) diff --git a/app/Effect.elm b/app/Effect.elm new file mode 100644 index 0000000..5c14db5 --- /dev/null +++ b/app/Effect.elm @@ -0,0 +1,185 @@ +module Effect exposing (Effect(..), batch, fromCmd, map, none, perform, testPerform) + +{-| + +@docs Effect, batch, fromCmd, map, none, perform, testPerform + +-} + +import Browser.Navigation +import Form +import Http +import Json.Decode as Decode +import Pages.Fetcher +import Test.PagesProgram.SimulatedEffect as SimulatedEffect exposing (SimulatedEffect) +import Url exposing (Url) + + +{-| -} +type Effect msg + = None + | Cmd (Cmd msg) + | Batch (List (Effect msg)) + | GetStargazers (Result Http.Error Int -> msg) + | SetField { formId : String, name : String, value : String } + | FetchRouteData + { data : Maybe FormData + , toMsg : Result Http.Error Url -> msg + } + | Submit + { values : FormData + , toMsg : Result Http.Error Url -> msg + } + | SubmitFetcher (Pages.Fetcher.Fetcher msg) + + +{-| -} +type alias RequestInfo = + { contentType : String + , body : String + } + + +{-| -} +none : Effect msg +none = + None + + +{-| -} +batch : List (Effect msg) -> Effect msg +batch = + Batch + + +{-| -} +fromCmd : Cmd msg -> Effect msg +fromCmd = + Cmd + + +{-| -} +map : (a -> b) -> Effect a -> Effect b +map fn effect = + case effect of + None -> + None + + Cmd cmd -> + Cmd (Cmd.map fn cmd) + + Batch list -> + Batch (List.map (map fn) list) + + GetStargazers toMsg -> + GetStargazers (toMsg >> fn) + + FetchRouteData fetchInfo -> + FetchRouteData + { data = fetchInfo.data + , toMsg = fetchInfo.toMsg >> fn + } + + Submit fetchInfo -> + Submit + { values = fetchInfo.values + , toMsg = fetchInfo.toMsg >> fn + } + + SetField info -> + SetField info + + SubmitFetcher fetcher -> + fetcher + |> Pages.Fetcher.map fn + |> SubmitFetcher + + +{-| -} +perform : + { fetchRouteData : + { data : Maybe FormData + , toMsg : Result Http.Error Url -> pageMsg + } + -> Cmd msg + , submit : + { values : FormData + , toMsg : Result Http.Error Url -> pageMsg + } + -> Cmd msg + , runFetcher : + Pages.Fetcher.Fetcher pageMsg + -> Cmd msg + , fromPageMsg : pageMsg -> msg + , key : Browser.Navigation.Key + , setField : { formId : String, name : String, value : String } -> Cmd msg + } + -> Effect pageMsg + -> Cmd msg +perform ({ fromPageMsg, key } as helpers) effect = + case effect of + None -> + Cmd.none + + Cmd cmd -> + Cmd.map fromPageMsg cmd + + SetField info -> + helpers.setField info + + Batch list -> + Cmd.batch (List.map (perform helpers) list) + + GetStargazers toMsg -> + Http.get + { url = + "https://api.github.com/repos/dillonkearns/elm-pages" + , expect = Http.expectJson (toMsg >> fromPageMsg) (Decode.field "stargazers_count" Decode.int) + } + + FetchRouteData fetchInfo -> + helpers.fetchRouteData + fetchInfo + + Submit record -> + helpers.submit record + + SubmitFetcher record -> + helpers.runFetcher record + + +{-| -} +testPerform : Effect msg -> SimulatedEffect msg +testPerform effect = + case effect of + None -> + SimulatedEffect.none + + Cmd _ -> + SimulatedEffect.none + + Batch list -> + SimulatedEffect.batch (List.map testPerform list) + + GetStargazers toMsg -> + SimulatedEffect.dispatchMsg (toMsg (Ok 0)) + + SetField info -> + SimulatedEffect.setField info + + FetchRouteData _ -> + SimulatedEffect.none + + Submit _ -> + SimulatedEffect.none + + SubmitFetcher fetcher -> + SimulatedEffect.submitFetcher fetcher + + +type alias FormData = + { fields : List ( String, String ) + , method : Form.Method + , action : String + , id : Maybe String + } diff --git a/app/ErrorPage.elm b/app/ErrorPage.elm new file mode 100644 index 0000000..3f6e45d --- /dev/null +++ b/app/ErrorPage.elm @@ -0,0 +1,84 @@ +module ErrorPage exposing (ErrorPage(..), Model, Msg, head, init, internalError, notFound, statusCode, update, view) + +import Effect exposing (Effect) +import Head +import Html exposing (Html) +import View exposing (View) + + +type Msg + = Increment + + +type alias Model = + { count : Int + } + + +init : ErrorPage -> ( Model, Effect Msg ) +init errorPage = + ( { count = 0 } + , Effect.none + ) + + +update : ErrorPage -> Msg -> Model -> ( Model, Effect Msg ) +update errorPage msg model = + case msg of + Increment -> + ( { model | count = model.count + 1 }, Effect.none ) + + +head : ErrorPage -> List Head.Tag +head errorPage = + [] + + +type ErrorPage + = NotFound + | InternalError String + + +notFound : ErrorPage +notFound = + NotFound + + +internalError : String -> ErrorPage +internalError = + InternalError + + +view : ErrorPage -> Model -> View Msg +view error model = + { body = + [ Html.div [] + [ Html.p [] + [ Html.text <| + case error of + NotFound -> + "Page not found. Maybe try another URL?" + + InternalError string -> + "Something went wrong.\n" ++ string + ] + ] + ] + , title = + case error of + NotFound -> + "Page Not Found" + + InternalError string -> + "Unexpected Error" + } + + +statusCode : ErrorPage -> number +statusCode error = + case error of + NotFound -> + 404 + + InternalError _ -> + 500 diff --git a/src/Pages/Home_.elm b/app/Route/Index.elm similarity index 67% rename from src/Pages/Home_.elm rename to app/Route/Index.elm index f9961b1..c3b29c4 100644 --- a/src/Pages/Home_.elm +++ b/app/Route/Index.elm @@ -1,67 +1,83 @@ -module Pages.Home_ exposing (Model, Msg, page) +module Route.Index exposing (ActionData, Data, Model, Msg, route) +import BackendTask exposing (BackendTask) import Css -import Effect +import FatalError exposing (FatalError) +import Head +import Head.Seo as Seo import Html.Styled exposing (Html, a, div, h2, i, img, text) import Html.Styled.Attributes as Attr exposing (css, href, target) -import Layouts -import Page exposing (Page) +import Pages.Url +import PagesMsg exposing (PagesMsg) import Redirects -import Route exposing (Route) -import Route.Path +import RouteBuilder exposing (App, StatelessRoute) import Shared import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming +import UrlPath +import View exposing (View) -page : Shared.Model -> Route () -> Page Model Msg -page _ _ = - Page.new - { init = \_ -> ( {}, Effect.none ) - , update = \_ model -> ( model, Effect.none ) - , subscriptions = \_ -> Sub.none - , view = \_ -> view - } - |> Page.withLayout (\_ -> Layouts.Global { activePage = Route.Path.Home_ }) +type alias Model = + {} -type alias Model = +type alias Msg = + () + + +type alias RouteParams = {} -type Msg - = NoOp +type alias Data = + () -view : { title : String, body : List (Html Msg) } -view = - { title = "Home" - , body = - [ div - [ css - [ Tw.flex - , Tw.flex_col - , Tw.items_center - , Tw.justify_center - , Tw.w_full - , Tw.flex_grow - , Tw.px_6 - ] - ] - [ viewBanner - ] - , viewFloatingSocials - ] - } +type alias ActionData = + {} + + +route : StatelessRoute RouteParams Data ActionData +route = + RouteBuilder.single + { head = head + , data = BackendTask.succeed () + } + |> RouteBuilder.buildNoState { view = view } + + +head : App Data ActionData RouteParams -> List Head.Tag +head _ = + Seo.summary + { canonicalUrlOverride = Nothing + , siteName = "Developer Den" + , image = + { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath + , alt = "Developer Den" + , dimensions = Nothing + , mimeType = Nothing + } + , description = "The Developer Den is a community of programmers learning and building together." + , locale = Nothing + , title = "Home" + } + |> Seo.website + + +view : App Data ActionData RouteParams -> Shared.Model -> View (PagesMsg Msg) +view _ _ = + View.fromStyled "Home" [ div [ css [ Tw.flex, Tw.flex_col, Tw.items_center, Tw.justify_center, Tw.w_full, Tw.flex_grow, Tw.px_6 ] ] [ viewBanner ], viewFloatingSocials ] + |> View.map PagesMsg.fromMsg viewBanner : Html Msg viewBanner = div [ css [ Tw.text_center ] ] [ img - [ Attr.src "/static/devden-banner.svg" + [ Attr.src "/devden-banner.svg" , Attr.alt "Developer Den Banner" , css [ Theming.headingFont diff --git a/src/Pages/Learning.elm b/app/Route/Learning.elm similarity index 74% rename from src/Pages/Learning.elm rename to app/Route/Learning.elm index 0e589c1..ddcd3b5 100644 --- a/src/Pages/Learning.elm +++ b/app/Route/Learning.elm @@ -1,90 +1,100 @@ -module Pages.Learning exposing (Model, Msg, page) +module Route.Learning exposing (ActionData, Data, Model, Msg, route) +import BackendTask exposing (BackendTask) import Css import Dict import Effect exposing (Effect) +import FatalError exposing (FatalError) +import Head +import Head.Seo as Seo import Html.Styled as Html exposing (Html, div, span, text) import Html.Styled.Attributes as Attr exposing (css) import Html.Styled.Events exposing (onInput) -import Layouts +import LearningResources as Db import LearningResources.Emojis as Emojis import LearningResources.Types as LearningResources -import Page exposing (Page) -import Route exposing (Route) -import Route.Path +import Pages.Url +import PagesMsg exposing (PagesMsg) +import Route +import RouteBuilder exposing (App, StatefulRoute) import Shared -import Shared.Model as SharedModel import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming +import UrlPath import View exposing (View) -page : Shared.Model -> Route () -> Page Model Msg -page shared _ = - Page.new - { init = init - , update = update - , subscriptions = subscriptions - , view = view shared - } - |> Page.withLayout (\_ -> Layouts.Global { activePage = Route.Path.Learning }) +type alias Model = + { searchQuery : String } +type Msg + = SearchQueryChanged String --- INIT & STATE +type alias RouteParams = + {} -type alias Model = - { searchQuery : String } +type alias Data = + { metadata : List LearningResources.CompiledMeta } -type Msg - = SearchQueryChanged String +type alias ActionData = + {} -init : () -> ( Model, Effect Msg ) -init _ = - ( { searchQuery = "" }, Effect.none ) +route : StatefulRoute RouteParams Data ActionData Model Msg +route = + RouteBuilder.single { head = head, data = data } + |> RouteBuilder.buildWithLocalState + { view = view + , init = \_ _ -> ( { searchQuery = "" }, Effect.none ) + , update = update + , subscriptions = \_ _ _ _ -> Sub.none + } -update : Msg -> Model -> ( Model, Effect Msg ) -update msg model = - case msg of - SearchQueryChanged query -> - ( { model | searchQuery = query }, Effect.none ) +data : BackendTask FatalError Data +data = + Db.fetchDatabase + |> BackendTask.map (\db -> { metadata = db.metadata }) -subscriptions : Model -> Sub Msg -subscriptions _ = - Sub.none +head : App Data ActionData RouteParams -> List Head.Tag +head _ = + Seo.summary + { canonicalUrlOverride = Nothing + , siteName = "Developer Den" + , image = + { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath + , alt = "Developer Den" + , dimensions = Nothing + , mimeType = Nothing + } + , description = "Explore our curated directory of programming languages, tools, and concepts." + , locale = Nothing + , title = "Learning Resources" + } + |> Seo.website --- VIEW +update : App Data ActionData RouteParams -> Shared.Model -> Msg -> Model -> ( Model, Effect Msg ) +update _ _ (SearchQueryChanged query) model = + ( { model | searchQuery = query }, Effect.none ) -view : Shared.Model -> Model -> View Msg -view shared model = - { title = "Learning Directory" - , body = +view : App Data ActionData RouteParams -> Shared.Model -> Model -> View (PagesMsg Msg) +view app _ model = + View.fromStyled "Learning Directory" [ div [ css [ Tw.pt_12, Tw.pb_24, Tw.max_w_7xl, Tw.mx_auto, Tw.px_6 ] ] [ viewHeader model.searchQuery - , case shared.learningDatabase of - SharedModel.Loading -> - div [ css [ Theming.bodyFont, Tw.text_center, Tw.text_color Tw.gray_400 ] ] - [ text "Loading learning directory..." ] - - SharedModel.Failure _ -> - div [ css [ Theming.bodyFont, Tw.text_center, Tw.text_color Tw.red_400 ] ] - [ text "Failed to load directory." ] - - SharedModel.Success db -> - viewCategorisedGrid model.searchQuery db.metadata + , viewCategorisedGrid model.searchQuery app.data.metadata ] ] - } + |> View.map PagesMsg.fromMsg viewHeader : String -> Html Msg @@ -180,8 +190,7 @@ viewCategorySection category items = viewTopicCard : LearningResources.CompiledMeta -> Html msg viewTopicCard meta = Html.a - [ Route.Path.href (Route.Path.Learning_Resource_ { resource = LearningResources.entityTagToString meta.id }) - |> Attr.fromUnstyled + [ Attr.href (UrlPath.toAbsolute (Route.toPath (Route.Learning__Resource_ { resource = LearningResources.entityTagToString meta.id }))) , css [ Tw.block , Tw.no_underline diff --git a/src/Pages/Learning/Resource_.elm b/app/Route/Learning/Resource_.elm similarity index 65% rename from src/Pages/Learning/Resource_.elm rename to app/Route/Learning/Resource_.elm index 01cc4c0..570bbbe 100644 --- a/src/Pages/Learning/Resource_.elm +++ b/app/Route/Learning/Resource_.elm @@ -1,101 +1,125 @@ -module Pages.Learning.Resource_ exposing (Model, Msg, page) +module Route.Learning.Resource_ exposing (ActionData, Data, Model, Msg, route) +import BackendTask exposing (BackendTask) import Css -import Effect +import FatalError exposing (FatalError) +import Head +import Head.Seo as Seo import Html.Styled as Html exposing (Html, div, span, text) import Html.Styled.Attributes as Attr exposing (css) -import Layouts +import LearningResources as Db import LearningResources.Emojis as Emojis import LearningResources.Types as LearningResources -import Page exposing (Page) -import Route exposing (Route) -import Route.Path +import Pages.Url +import PagesMsg exposing (PagesMsg) +import Route +import RouteBuilder exposing (App, StatelessRoute) import Shared -import Shared.Model as SharedModel import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming +import UrlPath import View exposing (View) -page : Shared.Model -> Route { resource : String } -> Page Model Msg -page shared route = - Page.new - { init = \_ -> ( {}, Effect.none ) - , update = \_ model -> ( model, Effect.none ) - , subscriptions = \_ -> Sub.none - , view = view shared route.params - } - |> Page.withLayout - (\_ -> - Layouts.Global - { activePage = Route.Path.Learning - } - ) - - type alias Model = {} -type Msg - = NoOp +type alias Msg = + () + + +type alias RouteParams = + { resource : String } + + +type alias Data = + { allMetadata : List LearningResources.CompiledMeta + , meta : LearningResources.CompiledMeta + , resources : List LearningResources.Resource + } + +type alias ActionData = + {} --- VIEW +route : StatelessRoute RouteParams Data ActionData +route = + RouteBuilder.preRender + { head = head + , pages = pages + , data = data + } + |> RouteBuilder.buildNoState { view = view } -view : Shared.Model -> { resource : String } -> Model -> View Msg -view shared route _ = - case shared.learningDatabase of - SharedModel.Loading -> - { title = "Loading...", body = [ text "Loading resources..." ] } +pages : BackendTask FatalError (List RouteParams) +pages = + Db.fetchDatabase + |> BackendTask.map + (\db -> + List.map (\meta -> { resource = LearningResources.entityTagToString meta.id }) db.metadata + ) - SharedModel.Failure _ -> - { title = "Error", body = [ text "Failed to load database." ] } - SharedModel.Success db -> - let - activeTag = - LearningResources.entityTagFromString route.resource +data : RouteParams -> BackendTask FatalError Data +data params = + Db.fetchDatabase + |> BackendTask.andThen + (\db -> + case LearningResources.entityTagFromString params.resource |> Maybe.andThen (\tag -> Db.getMetadata tag db |> Maybe.map (Tuple.pair tag)) of + Just ( tag, meta ) -> + BackendTask.succeed + { allMetadata = db.metadata + , meta = meta + , resources = Db.getResourcesByTag tag db + } + + Nothing -> + BackendTask.fail (FatalError.fromString ("Unknown learning topic: " ++ params.resource)) + ) + - activeMeta = - activeTag - |> Maybe.andThen (\tag -> List.filter (\m -> m.id == tag) db.metadata |> List.head) - in - { title = Maybe.map .name activeMeta |> Maybe.withDefault "Topic" - , body = - [ viewExplorerLayout db activeTag route.resource ] +head : App Data ActionData RouteParams -> List Head.Tag +head app = + Seo.summary + { canonicalUrlOverride = Nothing + , siteName = "Developer Den" + , image = + { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath + , alt = "Developer Den" + , dimensions = Nothing + , mimeType = Nothing } + , description = app.data.meta.description + , locale = Nothing + , title = "Learn " ++ app.data.meta.name + } + |> Seo.website + +view : App Data ActionData RouteParams -> Shared.Model -> View (PagesMsg Msg) +view app _ = + View.fromStyled app.data.meta.name [ viewExplorerLayout app.data app.routeParams.resource ] + |> View.map PagesMsg.fromMsg -viewExplorerLayout : LearningResources.Database -> Maybe LearningResources.EntityTag -> String -> Html Msg -viewExplorerLayout db activeTag activeSlug = + +viewExplorerLayout : Data -> String -> Html Msg +viewExplorerLayout topic activeSlug = div [ css [ Tw.flex, Tw.max_w_7xl, Tw.mx_auto, Tw.pt_12, Tw.pb_24, Tw.gap_12 ] ] [ div [ css [ Tw.w_64, Tw.flex_shrink_0, Tw.hidden, Breakpoints.lg [ Tw.block ] ] ] [ Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.mb_6, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_2 ] ] [ text "Topics" ] - , viewSidebarTopicList db.metadata activeSlug + , viewSidebarTopicList topic.allMetadata activeSlug ] , div [ css [ Tw.flex_1 ] ] - [ case activeTag of - Nothing -> - div [ css [ Tw.text_color Tw.gray_400 ] ] [ text "Topic not found." ] - - Just tag -> - let - maybeMeta = - List.filter (\m -> m.id == tag) db.metadata |> List.head - - topicResources = - List.filter (\r -> List.member tag r.teaches) db.resources - in - div [] - [ viewTopicHeader maybeMeta - , viewResourceGrid topicResources - ] + [ div [] + [ viewTopicHeader (Just topic.meta) + , viewResourceGrid topic.resources + ] ] ] @@ -116,7 +140,7 @@ viewSidebarLink activeSlug meta = activeSlug == metaSlug in Html.a - [ Route.Path.href (Route.Path.Learning_Resource_ { resource = metaSlug }) |> Attr.fromUnstyled + [ Attr.href (UrlPath.toAbsolute (Route.toPath (Route.Learning__Resource_ { resource = metaSlug }))) , css [ Theming.headingFont , Tw.text_sm diff --git a/src/Pages/Rules.elm b/app/Route/Rules.elm similarity index 78% rename from src/Pages/Rules.elm rename to app/Route/Rules.elm index ba0ef32..25378d0 100644 --- a/src/Pages/Rules.elm +++ b/app/Route/Rules.elm @@ -1,57 +1,75 @@ -module Pages.Rules exposing (Model, Msg, page) +module Route.Rules exposing (ActionData, Data, Model, Msg, route) +import BackendTask exposing (BackendTask) import Css -import Effect exposing (Effect) +import FatalError exposing (FatalError) +import Head +import Head.Seo as Seo import Html.Styled as Html exposing (Html, a, div, h1, h2, h3, p, text) import Html.Styled.Attributes as Attr exposing (css) -import Layouts -import Page exposing (Page) -import Route exposing (Route) -import Route.Path +import Pages.Url +import PagesMsg exposing (PagesMsg) +import RouteBuilder exposing (App, StatelessRoute) import Shared +import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming +import UrlPath import View exposing (View) -page : Shared.Model -> Route () -> Page Model Msg -page _ _ = - Page.new - { init = init - , update = update - , subscriptions = subscriptions - , view = view - } - |> Page.withLayout - (\_ -> - Layouts.Global - { activePage = Route.Path.Rules - } - ) - +type alias Model = + {} --- INIT +type alias Msg = + () -type alias Model = +type alias RouteParams = {} -init : () -> ( Model, Effect Msg ) -init () = - ( {} - , Effect.none - ) +type alias Data = + () + +type alias ActionData = + {} --- UPDATE +route : StatelessRoute RouteParams Data ActionData +route = + RouteBuilder.single + { head = head + , data = BackendTask.succeed () + } + |> RouteBuilder.buildNoState { view = view } + + +head : App Data ActionData RouteParams -> List Head.Tag +head _ = + Seo.summary + { canonicalUrlOverride = Nothing + , siteName = "Developer Den" + , image = + { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath + , alt = "Developer Den" + , dimensions = Nothing + , mimeType = Nothing + } + , description = "The rules of the Developer Den community." + , locale = Nothing + , title = "Rules" + } + |> Seo.website -type Msg - = NoOp +view : App Data ActionData RouteParams -> Shared.Model -> View (PagesMsg Msg) +view _ _ = + View.fromStyled "Rules" [ div [ css [ Tw.max_w_4xl, Tw.mx_auto, Tw.pt_2, Tw.pb_24, Tw.px_6 ] ] [ viewHeader, div [] (List.map viewRuleSection rulesData) ] ] + |> View.map PagesMsg.fromMsg type alias RuleSection = @@ -124,41 +142,6 @@ rulesData = ] -update : Msg -> Model -> ( Model, Effect Msg ) -update msg model = - case msg of - NoOp -> - ( model - , Effect.none - ) - - - --- SUBSCRIPTIONS - - -subscriptions : Model -> Sub Msg -subscriptions _ = - Sub.none - - - --- VIEW - - -view : Model -> View Msg -view _ = - { title = "Rules" - , body = - [ div [ css [ Tw.max_w_4xl, Tw.mx_auto, Tw.pt_2, Tw.pb_24, Tw.px_6 ] ] - [ viewHeader - , div [] - (List.map viewRuleSection rulesData) - ] - ] - } - - viewHeader : Html Msg viewHeader = div [ css [ Tw.mb_8, Tw.text_center ] ] diff --git a/app/Shared.elm b/app/Shared.elm new file mode 100644 index 0000000..5f3ba65 --- /dev/null +++ b/app/Shared.elm @@ -0,0 +1,212 @@ +module Shared exposing (Data, Model, Msg, template) + +import BackendTask exposing (BackendTask) +import Css +import Effect exposing (Effect) +import FatalError exposing (FatalError) +import Html exposing (Html) +import Html.Styled as Styled exposing (a, div, img, nav, text) +import Html.Styled.Attributes as Attr exposing (css, href) +import Pages.Flags +import Pages.PageUrl exposing (PageUrl) +import Redirects +import Route exposing (Route) +import SharedTemplate exposing (SharedTemplate) +import Tailwind.Theme as Tw +import Tailwind.Utilities as Tw +import Theming +import UrlPath exposing (UrlPath) +import View exposing (View) + + +template : SharedTemplate Msg Model Data msg +template = + { init = init + , update = update + , view = view + , data = data + , subscriptions = subscriptions + , onPageChange = Nothing + } + + +type Msg + = NoOp + + +type alias Data = + () + + +type alias Model = + {} + + +init : + Pages.Flags.Flags + -> + Maybe + { path : + { path : UrlPath + , query : Maybe String + , fragment : Maybe String + } + , metadata : route + , pageUrl : Maybe PageUrl + } + -> ( Model, Effect Msg ) +init _ _ = + ( {}, Effect.none ) + + +update : Msg -> Model -> ( Model, Effect Msg ) +update NoOp model = + ( model, Effect.none ) + + +subscriptions : UrlPath -> Model -> Sub Msg +subscriptions _ _ = + Sub.none + + +data : BackendTask FatalError Data +data = + BackendTask.succeed () + + +view : + Data + -> + { path : UrlPath + , route : Maybe Route + } + -> Model + -> (Msg -> msg) + -> View msg + -> { body : List (Html msg), title : String } +view _ page _ _ pageView = + { title = pageView.title ++ " | Developer Den" + , body = + [ Styled.toUnstyled + (div + [ Attr.class "page" + , css + [ Tw.min_h_screen + , Tw.w_full + , Tw.overflow_x_hidden + , Tw.bg_color Tw.dd_deepblue + , Tw.text_color Tw.white + , Tw.font_sans + , Tw.antialiased + , Tw.flex + , Tw.flex_col + ] + ] + [ viewNavbar page.route + , div [ css [ Tw.flex_grow, Tw.flex, Tw.flex_col ] ] + (List.map Styled.fromUnstyled pageView.body) + ] + ) + ] + } + + +viewNavbar : Maybe Route -> Styled.Html msg +viewNavbar activeRoute = + nav + [ css + [ Tw.flex + , Tw.justify_between + , Tw.items_center + , Tw.max_w_7xl + , Tw.mx_auto + , Tw.w_full + , Tw.px_8 + , Tw.py_6 + ] + ] + [ a + [ routeHref Route.Index + , css [ Theming.headingFont, Tw.text_xl, Tw.font_bold, Tw.no_underline, Theming.textGradient ] + ] + [ img + [ Attr.src "/devden-logo.svg" + , Attr.alt "Developer Den Logo" + , css [ Tw.h_16, Tw.w_auto, Tw.block ] + ] + [] + ] + , div [ css [ Tw.flex, Tw.gap_8 ] ] + [ viewNavLink "home" Route.Index (activeRoute == Just Route.Index) + , viewNavLink "rules" Route.Rules (activeRoute == Just Route.Rules) + , viewNavLink "learning" Route.Learning (isLearning activeRoute) + , a + [ href Redirects.discordURL + , Attr.target "_blank" + , css + [ Theming.headingFont + , Tw.text_sm + , Tw.text_color Tw.slate_400 + , Css.hover [ Tw.text_color Tw.white ] + , Tw.transition_colors + , Tw.no_underline + ] + ] + [ text "discord" ] + ] + ] + + +isLearning : Maybe Route -> Bool +isLearning activeRoute = + case activeRoute of + Just Route.Learning -> + True + + Just (Route.Learning__Resource_ _) -> + True + + _ -> + False + + +routeHref : Route -> Styled.Attribute msg +routeHref route = + href (UrlPath.toAbsolute (Route.toPath route)) + + +viewNavLink : String -> Route -> Bool -> Styled.Html msg +viewNavLink label route isActive = + a + [ routeHref route + , css + [ Theming.headingFont + , Tw.pb_1 + , Tw.no_underline + , if isActive then + Tw.text_color Tw.white + + else + Tw.text_color Tw.slate_400 + , Css.hover [ Tw.text_color Tw.white ] + , Tw.transition_colors + , Tw.relative + ] + ] + [ text label + , if isActive then + div + [ css + [ Tw.absolute + , Tw.bottom_0 + , Tw.left_0 + , Tw.right_0 + , Tw.h_1 + , Theming.brandGradientBg + ] + ] + [] + + else + text "" + ] diff --git a/app/Site.elm b/app/Site.elm new file mode 100644 index 0000000..f89382e --- /dev/null +++ b/app/Site.elm @@ -0,0 +1,21 @@ +module Site exposing (config) + +import BackendTask exposing (BackendTask) +import FatalError exposing (FatalError) +import Head +import SiteConfig exposing (SiteConfig) + + +config : SiteConfig +config = + { canonicalUrl = "https://developerden.org" + , head = head + } + + +head : BackendTask FatalError (List Head.Tag) +head = + [ Head.metaName "viewport" (Head.raw "width=device-width,initial-scale=1") + , Head.sitemapLink "/sitemap.xml" + ] + |> BackendTask.succeed diff --git a/app/View.elm b/app/View.elm new file mode 100644 index 0000000..2951ddc --- /dev/null +++ b/app/View.elm @@ -0,0 +1,79 @@ +module View exposing (View, fromStyled, map, freeze, freezableToHtml, htmlToFreezable) + +{-| View module for elm-pages with frozen view support. + +@docs View, fromStyled, map, freeze, freezableToHtml, htmlToFreezable + +-} + +import Html exposing (Html) +import Html.Styled + + +{-| -} +type alias View msg = + { title : String + , body : List (Html msg) + } + + +{-| Build a view from `elm-css` styled HTML. +-} +fromStyled : String -> List (Html.Styled.Html msg) -> View msg +fromStyled title body = + { title = title + , body = List.map Html.Styled.toUnstyled body + } + + +{-| -} +map : (msg1 -> msg2) -> View msg1 -> View msg2 +map fn doc = + { title = doc.title + , body = List.map (Html.map fn) doc.body + } + + +{-| The type of content that can be frozen. Must produce no messages (Never). +For plain Html, this is just Html Never. +-} +type alias Freezable = + Html Never + + +{-| Convert Freezable content to plain Html for server-side rendering. +For plain Html, this is identity. +-} +freezableToHtml : Freezable -> Html Never +freezableToHtml = + identity + + +{-| Convert plain Html back to Freezable for client-side adoption. +For plain Html, this is identity. +-} +htmlToFreezable : Html Never -> Freezable +htmlToFreezable = + identity + + +{-| Freeze a view so its content is rendered at build time and adopted on the client. +Use this for static content that doesn't need interactivity. + +Frozen content is: + + - Rendered at build time and included in the HTML + - Adopted by the client without re-rendering + - Eligible for dead-code elimination (rendering code removed from client bundle) + +At build time, the server codemod wraps the content with a `data-frozen` attribute for extraction. +The elm-review codemod then transforms `freeze` calls to lazy thunks on the client, +which adopt the pre-rendered DOM without re-rendering. + +-} +freeze : Freezable -> Html msg +freeze content = + content + |> freezableToHtml + |> htmlToFreezable + |> Html.map never diff --git a/bun.lock b/bun.lock index badf61c..aedff7a 100644 --- a/bun.lock +++ b/bun.lock @@ -12,11 +12,16 @@ }, "devDependencies": { "@types/bun": "latest", - "elm-land": "^0.20.1", + "elm": "^0.19.1-6", + "elm-codegen": "^0.6.3", + "elm-format": "^0.8.8", "elm-open-api": "git+https://github.com/wolfadex/elm-open-api-cli.git#main", + "elm-pages": "^3.5.0", "elm-review": "^2.13.5", + "lamdera": "^0.19.1-1.4.0", "quicktype": "^23.2.6", "quicktype-core": "^23.2.6", + "vite": "^7.3.2", }, "peerDependencies": { "typescript": "^5", @@ -26,6 +31,16 @@ "packages": { "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], + "@avh4/elm-format-darwin-arm64": ["@avh4/elm-format-darwin-arm64@0.8.8-1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-VDu3CRajhB/Sax+CEU4PhIzErBZv8vVxbk9Sk8seUHa1ngfICa3Ejoq3PhnoOFKYF1v1sSxNOC2RnUzvd/9bUw=="], + + "@avh4/elm-format-darwin-x64": ["@avh4/elm-format-darwin-x64@0.8.8-1", "", { "os": "darwin", "cpu": "x64" }, "sha512-9NAzi3HUBSHEIx3Nje+a6wFcv6RDKv2PO0OUNcV/XlS4Sou3r89xsYAVAXS8mi4+CKTdscyfSSkgGd8qiCCxAw=="], + + "@avh4/elm-format-linux-arm64": ["@avh4/elm-format-linux-arm64@0.8.8-1", "", { "os": "linux", "cpu": "arm64" }, "sha512-VNuXYphgxtnk7Gw+VBgWBeA9k8wKSo9r/O2F7udgurokYLO8S+RGhLHgD9mb6Yecv/veWz4v9n/O0IggH/BOCQ=="], + + "@avh4/elm-format-linux-x64": ["@avh4/elm-format-linux-x64@0.8.8-1", "", { "os": "linux", "cpu": "x64" }, "sha512-IvtmUTDw/V5mBeglLgtQMzWZPc0QvmqUmoJ+vipxYii3DJ/1KV2drtpvlLuFdBlFrehUivtrh4HhOTsdGXxyXQ=="], + + "@avh4/elm-format-win32-x64": ["@avh4/elm-format-win32-x64@0.8.8-1", "", { "os": "win32", "cpu": "x64" }, "sha512-qGYZM2oJFSVQ80Tayk1v15ba7PWCU3B89EkA3Fy4YQasvtA+UrYYR5Bv7MRF4kn6Zp7oSDk4FhknURFsZWZ7kg=="], + "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="], "@elm_binaries/darwin_arm64": ["@elm_binaries/darwin_arm64@0.19.1-0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mjbsH7BNHEAmoE2SCJFcfk5fIHwFIpxtSgnEAqMsVLpBUFoEtAeX+LQ+N0vSFJB3WAh73+QYx/xSluxxLcL6dA=="], @@ -36,54 +51,64 @@ "@elm_binaries/win32_x64": ["@elm_binaries/win32_x64@0.19.1-0", "", { "os": "win32", "cpu": "x64" }, "sha512-yDleiXqSE9EcqKtd9SkC/4RIW8I71YsXzMPL79ub2bBPHjWTcoyyeBbYjoOB9SxSlArJ74HaoBApzT6hY7Zobg=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.20.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.20.2", "", { "os": "android", "cpu": "arm" }, "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.20.2", "", { "os": "android", "cpu": "arm64" }, "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.7", "", { "os": "android", "cpu": "arm64" }, "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.20.2", "", { "os": "android", "cpu": "x64" }, "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.7", "", { "os": "android", "cpu": "x64" }, "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.20.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.20.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.20.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.7", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.20.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.20.2", "", { "os": "linux", "cpu": "arm" }, "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.7", "", { "os": "linux", "cpu": "arm" }, "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.20.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.20.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.7", "", { "os": "linux", "cpu": "ia32" }, "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.20.2", "", { "os": "linux", "cpu": "none" }, "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.20.2", "", { "os": "linux", "cpu": "none" }, "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.20.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.20.2", "", { "os": "linux", "cpu": "none" }, "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.20.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.20.2", "", { "os": "linux", "cpu": "x64" }, "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.20.2", "", { "os": "none", "cpu": "x64" }, "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.20.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.7", "", { "os": "none", "cpu": "x64" }, "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.20.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.7", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.20.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.7", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.20.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.20.2", "", { "os": "win32", "cpu": "x64" }, "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.7", "", { "os": "sunos", "cpu": "x64" }, "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], + + "@gar/promise-retry": ["@gar/promise-retry@1.0.3", "", {}, "sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA=="], "@glideapps/ts-necessities": ["@glideapps/ts-necessities@2.4.0", "", {}, "sha512-mDC+qosuNa4lxR3ioMBb6CD0XLRsQBplU+zRPUYiMLXKeVPZ6UYphdNG/EGReig0YyfnVlBKZEXl1wzTotYmPA=="], + "@isaacs/cliui": ["@isaacs/cliui@9.0.0", "", {}, "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], @@ -96,19 +121,43 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@lydell/elm": ["@lydell/elm@0.19.1-14", "", { "optionalDependencies": { "@lydell/elm_darwin_arm64": "0.19.1-3", "@lydell/elm_darwin_x64": "0.19.1-2", "@lydell/elm_linux_arm": "0.19.1-0", "@lydell/elm_linux_arm64": "0.19.1-4", "@lydell/elm_linux_x64": "0.19.1-1", "@lydell/elm_win32_x64": "0.19.1-1" }, "bin": { "elm": "bin/elm" } }, "sha512-otpGlYiNRvL7F9k6MJOTcuyIgHr+XWy/1NtHpGUgQi8lHrnuyCjwKFPPiimKpr3bcZTwpD4nebHuYR0bmPIKuA=="], + "@jsonjoy.com/base64": ["@jsonjoy.com/base64@1.1.2", "", { "peerDependencies": { "tslib": "2" } }, "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA=="], + + "@jsonjoy.com/buffers": ["@jsonjoy.com/buffers@17.67.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw=="], + + "@jsonjoy.com/codegen": ["@jsonjoy.com/codegen@1.0.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g=="], + + "@jsonjoy.com/fs-core": ["@jsonjoy.com/fs-core@4.80.0", "", { "dependencies": { "@jsonjoy.com/fs-node-builtins": "4.80.0", "@jsonjoy.com/fs-node-utils": "4.80.0", "thingies": "^2.5.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-qMKWshnyjbyhm+NbzqGE3w5y1mckFFEMj0aDPU2/JBNh1BzIjVy9esq9lBmRnNVmhMEkxwDzLZ8Gqh5G1P5Dag=="], + + "@jsonjoy.com/fs-fsa": ["@jsonjoy.com/fs-fsa@4.80.0", "", { "dependencies": { "@jsonjoy.com/fs-core": "4.80.0", "@jsonjoy.com/fs-node-builtins": "4.80.0", "@jsonjoy.com/fs-node-utils": "4.80.0", "thingies": "^2.5.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-ZBEKl7J6dbkRCfmrFV48Re211A/FHqniTUhsWCsaRteNSOqMgkX3qF1UreVgwB9oSPm81JLAwhIi6Lb/NH/PoA=="], + + "@jsonjoy.com/fs-node": ["@jsonjoy.com/fs-node@4.80.0", "", { "dependencies": { "@jsonjoy.com/fs-core": "4.80.0", "@jsonjoy.com/fs-node-builtins": "4.80.0", "@jsonjoy.com/fs-node-utils": "4.80.0", "@jsonjoy.com/fs-print": "4.80.0", "@jsonjoy.com/fs-snapshot": "4.80.0", "glob-to-regex.js": "^1.3.1", "thingies": "^2.5.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-yiBlUfkMMRFFGy8CD/h2zd5rPnrM6bjlF+nx2LRAxNV6hOSiuObQIUEE7m7y2VTMisjxCRtzINH94bFGySWL7g=="], + + "@jsonjoy.com/fs-node-builtins": ["@jsonjoy.com/fs-node-builtins@4.80.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-OIOIhqaWiwUySFMny4epIAoviXsyMaQQ63PTc3zH+5HEOvarl5hpUmZIhp2m5+OfyKAh5ylxXnQIgew1OgJDVw=="], + + "@jsonjoy.com/fs-node-to-fsa": ["@jsonjoy.com/fs-node-to-fsa@4.80.0", "", { "dependencies": { "@jsonjoy.com/fs-fsa": "4.80.0", "@jsonjoy.com/fs-node-builtins": "4.80.0", "@jsonjoy.com/fs-node-utils": "4.80.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-ljeaR5xwtX1EyRmB0wvXANUMQZ3mjKcm7z8s2N8D8SLQ04CcAGtUhHFRZQXFb9mhgFyEVMydQGQtSOFS7pcrFQ=="], + + "@jsonjoy.com/fs-node-utils": ["@jsonjoy.com/fs-node-utils@4.80.0", "", { "dependencies": { "@jsonjoy.com/fs-node-builtins": "4.80.0", "glob-to-regex.js": "^1.3.1" }, "peerDependencies": { "tslib": "2" } }, "sha512-xwHeVVi3f+Khg/Fmb8i5qoYVmQ08QznE5TWhQokUmIZjz4KBPzU+zt/+bahBI6G1ghtqajt27lWuAciIxApuzA=="], + + "@jsonjoy.com/fs-print": ["@jsonjoy.com/fs-print@4.80.0", "", { "dependencies": { "@jsonjoy.com/fs-node-utils": "4.80.0", "tree-dump": "^1.1.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-1ocZLJw/m/xlq0moaIHO7HV9nHRVBUvdc2zMzhsJGkFOrqfwWvexfCv5cYCPPLRhP+9p3yunoi4Ep5YhRORC9Q=="], + + "@jsonjoy.com/fs-snapshot": ["@jsonjoy.com/fs-snapshot@4.80.0", "", { "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", "@jsonjoy.com/fs-node-utils": "4.80.0", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-3AV23Q1H228KTtJKTUE0nNq8FCtxSvtENOLrEat80wkAJCKHuqQEv8yjhpS8Bei2OEFJAnluGXp9Ri2SWBlROw=="], - "@lydell/elm_darwin_arm64": ["@lydell/elm_darwin_arm64@0.19.1-3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RuKTz5ck+RBx4urj1EL/r0xWZZqBMPEXzNBQTEBCAMWLSi4Ck3TVz5pkhBaK+cRZXI+cCgytm/1bIttbp2fFIg=="], + "@jsonjoy.com/json-pack": ["@jsonjoy.com/json-pack@1.21.0", "", { "dependencies": { "@jsonjoy.com/base64": "^1.1.2", "@jsonjoy.com/buffers": "^1.2.0", "@jsonjoy.com/codegen": "^1.0.0", "@jsonjoy.com/json-pointer": "^1.0.2", "@jsonjoy.com/util": "^1.9.0", "hyperdyperid": "^1.2.0", "thingies": "^2.5.0", "tree-dump": "^1.1.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg=="], - "@lydell/elm_darwin_x64": ["@lydell/elm_darwin_x64@0.19.1-2", "", { "os": "darwin", "cpu": "x64" }, "sha512-MXfQwxdQfmuQ22iDCFlcXu5YTA0w6/ASzbxmWc+8DkgUkHTynjViGBVkQljAbYe4ZWgrYGWinZQQyhVnp/5oZw=="], + "@jsonjoy.com/json-pointer": ["@jsonjoy.com/json-pointer@1.0.2", "", { "dependencies": { "@jsonjoy.com/codegen": "^1.0.0", "@jsonjoy.com/util": "^1.9.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg=="], - "@lydell/elm_linux_arm": ["@lydell/elm_linux_arm@0.19.1-0", "", { "os": "linux", "cpu": "arm" }, "sha512-crKrLzuT6jn4OOS7PWKZGYFw6vHwPu3iNP7lg8rFkOog/HxlkRwX4S695aILBG8SGTLhEdfP9tg28SQ7vR4Lpg=="], + "@jsonjoy.com/util": ["@jsonjoy.com/util@1.9.0", "", { "dependencies": { "@jsonjoy.com/buffers": "^1.0.0", "@jsonjoy.com/codegen": "^1.0.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ=="], - "@lydell/elm_linux_arm64": ["@lydell/elm_linux_arm64@0.19.1-4", "", { "os": "linux", "cpu": "arm64" }, "sha512-JuUkkVBtJjUajtTriQFFANHDmwA14NhqNqgIcq5LCJ6vUQv5/LVd6NUOkl/Rdq7Ju/VN/XwBD1/vm7MGIMOTqA=="], + "@lamdera/compiler-darwin-arm64": ["@lamdera/compiler-darwin-arm64@0.19.1-1.4.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zLqkIm5wMtuWyFnWlpgXgN0/nfEYRqvcSXEg9R/SlDL5yb8cle3sJCkR5S7zcqBc3zknjb24gWgpWzd0BSkkZg=="], - "@lydell/elm_linux_x64": ["@lydell/elm_linux_x64@0.19.1-1", "", { "os": "linux", "cpu": "x64" }, "sha512-1Y8UAb+GfUqlSjUTX9CaaZhJqvhVcfNbYC0N9AEutlXf1CzFMvF4VsDeZdxzhNI4allPRWBD1IqtdlLhBTFacA=="], + "@lamdera/compiler-darwin-x64": ["@lamdera/compiler-darwin-x64@0.19.1-1.4.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-hMG/uKWeL7hp8EeodmSo9Tg9X1P8Xzshai8E/RNtn2LpLCZ6yeRsIjzxpKqV8cEkVCI9yamnT6QTMywexPceYg=="], - "@lydell/elm_win32_x64": ["@lydell/elm_win32_x64@0.19.1-1", "", { "os": "win32", "cpu": "x64" }, "sha512-3LMiJ+uUxDFLNnCd6HBmvVWSjSWjs/Z9dMXZWCMOcw3vrW9iOkRrsNGNxohRXun2YRd8wXOX8/DwVn8i2SJ3KA=="], + "@lamdera/compiler-linux-arm64": ["@lamdera/compiler-linux-arm64@0.19.1-1.4.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZLO4Z1jCW4O/9Zoa9LXME+DklUGaOOv6JW7ulWYxSdgvu68Lgkfx47HZidM96R9tehX0Q1wZ+fBmZQkU/a7biQ=="], + + "@lamdera/compiler-linux-x64": ["@lamdera/compiler-linux-x64@0.19.1-1.4.0", "", { "os": "linux", "cpu": "x64" }, "sha512-r7tx1p/+dSw9SLUL3K7dSj1RBb/1Y5kmE27i9jarOlTeEUr1pycUqt3FSomD0EbTp8Rcp7jRCaNWvb5IWFathg=="], + + "@lamdera/compiler-win32-x64": ["@lamdera/compiler-win32-x64@0.19.1-1.4.0", "", { "os": "win32", "cpu": "x64" }, "sha512-hLpi1eikdY9BA87ipqhTP8gY0l75yih7kjckD30CrIOMMqEWbgaK/0yr2JxTQJiSt6D2A1VZiUbqjHMiSTbPZg=="], "@mark.probst/typescript-json-schema": ["@mark.probst/typescript-json-schema@0.55.0", "", { "dependencies": { "@types/json-schema": "^7.0.9", "@types/node": "^16.9.2", "glob": "^7.1.7", "path-equal": "^1.1.2", "safe-stable-stringify": "^2.2.0", "ts-node": "^10.9.1", "typescript": "4.9.4", "yargs": "^17.1.1" }, "bin": { "typescript-json-schema": "bin/typescript-json-schema" } }, "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ=="], @@ -118,6 +167,18 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + "@npmcli/agent": ["@npmcli/agent@4.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^11.2.1", "socks-proxy-agent": "^8.0.3" } }, "sha512-EUEuWAxnL07Sp5/iC/1X6Xj+XThUvnbei9zfRWZdEXa7lss9RTHMhAHBeg+MZ5To9s/gGaSI+UwZTPdYMvKSeg=="], + + "@npmcli/fs": ["@npmcli/fs@5.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og=="], + + "@npmcli/redact": ["@npmcli/redact@4.0.0", "", {}, "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q=="], + + "@pnpm/config.env-replace": ["@pnpm/config.env-replace@1.1.0", "", {}, "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w=="], + + "@pnpm/network.ca-file": ["@pnpm/network.ca-file@1.0.2", "", { "dependencies": { "graceful-fs": "4.2.10" } }, "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA=="], + + "@pnpm/npm-conf": ["@pnpm/npm-conf@3.0.3", "", { "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", "config-chain": "^1.1.11" } }, "sha512-//0sR/cow/s4ICQaYoAobOl4aU8cjU6x/V24V7XkKotb9+O+3zySIYp146vpaobYHnxa4pZX8NkV54Z5AwbDKA=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.0", "", { "os": "android", "cpu": "arm" }, "sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A=="], "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.0", "", { "os": "android", "cpu": "arm64" }, "sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw=="], @@ -152,7 +213,7 @@ "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.0", "", { "os": "linux", "cpu": "x64" }, "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.55.1", "", { "os": "linux", "cpu": "x64" }, "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg=="], "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.0", "", { "os": "linux", "cpu": "x64" }, "sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw=="], @@ -170,6 +231,8 @@ "@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="], + "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], + "@szmarczak/http-timer": ["@szmarczak/http-timer@4.0.6", "", { "dependencies": { "defer-to-connect": "^2.0.0" } }, "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="], "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], @@ -214,24 +277,48 @@ "@types/cacheable-request": ["@types/cacheable-request@6.0.3", "", { "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", "@types/node": "*", "@types/responselike": "^1.0.0" } }, "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw=="], + "@types/configstore": ["@types/configstore@2.1.1", "", {}, "sha512-YY+hm3afkDHeSM2rsFXxeZtu0garnusBWNG1+7MknmDWQHqcH2w21/xOU9arJUi8ch4qyFklidANLCu3ihhVwQ=="], + + "@types/debug": ["@types/debug@0.0.30", "", {}, "sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ=="], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/get-port": ["@types/get-port@3.2.0", "", {}, "sha512-TiNg8R1kjDde5Pub9F9vCwZA/BNW9HeXP5b9j7Qucqncy/McfPZ6xze/EyBdXS5FhMIGN6Fx3vg75l5KHy3V1Q=="], + + "@types/glob": ["@types/glob@5.0.38", "", { "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, "sha512-rTtf75rwyP9G2qO5yRpYtdJ6aU1QqEhWbtW55qEgquEDa6bXW0s2TWZfDm02GuppjEozOWG/F2UnPq5hAQb+gw=="], + "@types/http-cache-semantics": ["@types/http-cache-semantics@4.2.0", "", {}, "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q=="], + "@types/jest": ["@types/jest@27.5.2", "", { "dependencies": { "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" } }, "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], "@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="], + "@types/lodash": ["@types/lodash@4.17.26", "", {}, "sha512-48NWfiY6oNcKOh47Z4h+sIvwcQR91h6KPhaYKgeMIrkT2jV82Gy90SErj60vW8jQbeMSOSbhIv3bZ7JoqPPVhA=="], + + "@types/minimatch": ["@types/minimatch@6.0.0", "", { "dependencies": { "minimatch": "*" } }, "sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA=="], + + "@types/mkdirp": ["@types/mkdirp@0.5.2", "", { "dependencies": { "@types/node": "*" } }, "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg=="], + "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], "@types/responselike": ["@types/responselike@1.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw=="], + "@types/rimraf": ["@types/rimraf@2.0.5", "", { "dependencies": { "@types/glob": "*", "@types/node": "*" } }, "sha512-YyP+VfeaqAyFmXoTh3HChxOQMyjByRMsHU7kc5KOJkSlXudhMhQIALbYV7rHh/l8d2lX3VUQzprrcAgWdRuU8g=="], + + "@types/tmp": ["@types/tmp@0.0.33", "", {}, "sha512-gVC1InwyVrO326wbBZw+AO3u2vRXz/iRWq9jYhpG4W8LXyIgDv3ZmcLQ5Q4Gs+gFMyqx+viFoFT+l3p61QFCmQ=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], "acorn-walk": ["acorn-walk@8.3.5", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw=="], + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + "ansi-escapes": ["ansi-escapes@4.3.2", "", { "dependencies": { "type-fest": "^0.21.3" } }, "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ=="], "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -242,12 +329,18 @@ "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + "application-config-path": ["application-config-path@0.1.1", "", {}, "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw=="], + "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], + "argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + "array-back": ["array-back@3.1.0", "", {}, "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q=="], "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + "array-flatten": ["array-flatten@1.1.1", "", {}, "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="], + "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], @@ -256,10 +349,14 @@ "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + "batch": ["batch@0.6.1", "", {}, "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw=="], + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + "body-parser": ["body-parser@1.20.8", "", { "dependencies": { "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "~1.2.0", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", "qs": "~6.16.0", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" } }, "sha512-JNcyFQ64OiijEkPzUBTCe+hyPXUD/3LEldGQ6iF5LR1w00mx9o7xtDWHXBY2iItjdCFGoilOLNQbH943ut7pHA=="], + "brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -272,6 +369,14 @@ "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], + "bundle-name": ["bundle-name@4.1.1", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-DdH81/zPLVS11EUgWq3tEu/xn+EzljlMYooDNdzWEnFha3R3NBMpMV1UqYIpjYHV/SgpFKMIX1Oh7o06SjM/oA=="], + + "busboy": ["busboy@1.6.0", "", { "dependencies": { "streamsearch": "^1.1.0" } }, "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA=="], + + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + + "cacache": ["cacache@20.0.4", "", { "dependencies": { "@npmcli/fs": "^5.0.0", "fs-minipass": "^3.0.0", "glob": "^13.0.0", "lru-cache": "^11.1.0", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", "ssri": "^13.0.0" } }, "sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA=="], + "cacheable-lookup": ["cacheable-lookup@5.0.4", "", {}, "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="], "cacheable-request": ["cacheable-request@7.0.4", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^6.0.1", "responselike": "^2.0.0" } }, "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg=="], @@ -288,9 +393,9 @@ "chalk-template": ["chalk-template@0.4.0", "", { "dependencies": { "chalk": "^4.1.2" } }, "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg=="], - "chokidar": ["chokidar@3.5.3", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="], + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], - "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="], "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], @@ -306,54 +411,96 @@ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + "command-exists": ["command-exists@1.2.9", "", {}, "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w=="], + "command-line-args": ["command-line-args@5.2.1", "", { "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", "lodash.camelcase": "^4.3.0", "typical": "^4.0.0" } }, "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg=="], "command-line-usage": ["command-line-usage@7.0.4", "", { "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", "table-layout": "^4.1.1", "typical": "^7.3.0" } }, "sha512-85UdvzTNx/+s5CkSgBm/0hzP80RFHAa7PsfeADE5ezZF3uHz3/Tqj9gIKGT9PTtpycc3Ua64T0oVulGfKxzfqg=="], - "commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + "commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + "config-chain": ["config-chain@1.1.13", "", { "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ=="], + + "connect": ["connect@3.7.0", "", { "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", "parseurl": "~1.3.3", "utils-merge": "1.0.1" } }, "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ=="], + + "content-disposition": ["content-disposition@0.5.4", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ=="], + + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + + "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + + "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], + "create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="], "cross-fetch": ["cross-fetch@4.1.0", "", { "dependencies": { "node-fetch": "^2.7.0" } }, "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw=="], - "cross-spawn": ["cross-spawn@7.0.3", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "css-what": ["css-what@5.1.0", "", {}, "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw=="], "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - "debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], + "debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], "deep-equal": ["deep-equal@2.2.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "isarray": "^2.0.5", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", "which-typed-array": "^1.1.13" } }, "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA=="], + "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], + + "default-browser": ["default-browser@5.5.1", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw=="], + + "default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="], + "defaults": ["defaults@1.0.4", "", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="], "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + + "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + "devcert": ["devcert@1.2.3", "", { "dependencies": { "@types/configstore": "^2.1.1", "@types/debug": "^0.0.30", "@types/get-port": "^3.2.0", "@types/glob": "^5.0.34", "@types/lodash": "^4.14.92", "@types/mkdirp": "^0.5.2", "@types/node": "^8.5.7", "@types/rimraf": "^2.0.2", "@types/tmp": "^0.0.33", "application-config-path": "^0.1.0", "command-exists": "^1.2.4", "debug": "^3.1.0", "eol": "^0.9.1", "get-port": "^3.2.0", "glob": "^7.1.2", "is-valid-domain": "^0.1.6", "lodash": "^4.17.4", "mkdirp": "^0.5.1", "password-prompt": "^1.0.4", "rimraf": "^2.6.2", "sudo-prompt": "^8.2.0", "tmp": "^0.0.33", "tslib": "^1.10.0" } }, "sha512-vmLo0hDNHmZ47HED1ZiouJ7cAcamL8HY7qa9YdmCBkXxHEVtdDgT9pN/Xy3ZkcF3pFjF0sqq8WMV93HF2nmHHw=="], + "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], "diff": ["diff@4.0.4", "", {}, "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ=="], + "diff-sequences": ["diff-sequences@27.5.1", "", {}, "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ=="], + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + "elm": ["elm@0.19.1-6", "", { "optionalDependencies": { "@elm_binaries/darwin_arm64": "0.19.1-0", "@elm_binaries/darwin_x64": "0.19.1-0", "@elm_binaries/linux_x64": "0.19.1-0", "@elm_binaries/win32_x64": "0.19.1-0" }, "bin": { "elm": "bin/elm" } }, "sha512-mKYyierHICPdMx/vhiIacdPmTPnh889gjHOZ75ZAoCxo3lZmSWbGP8HMw78wyctJH0HwvTmeKhlYSWboQNYPeQ=="], - "elm-land": ["elm-land@0.20.1", "", { "dependencies": { "@lydell/elm": "0.19.1-14", "chokidar": "3.5.3", "terser": "5.15.1", "typescript": "4.9.3", "vite": "5.2.8", "vite-plugin-elm-watch": "1.3.3" }, "bin": { "elm-land": "src/index.js" } }, "sha512-AY8BxYNT7mblaIO9SS2YQPdskZdMsLL6fqjAA5bORdkGIRDkMeaw+rXgiVSHUM2+TK0k/ld0TdQEAd24Moi5nw=="], + "elm-codegen": ["elm-codegen@0.6.3", "", { "dependencies": { "chalk": "^4.1.1", "chokidar": "^3.5.1", "commander": "^8.3.0", "node-elm-compiler": "^5.0.6" }, "bin": { "elm-codegen": "bin/elm-codegen" } }, "sha512-X9S7ltwF78gjOmL5Rl79sMszMJlsBh44VwSXBgUah8vkobkRog2yfyMmMzyZmac/hzoRTP6Z98FFJY4A/xtUpQ=="], + + "elm-doc-preview": ["elm-doc-preview@6.0.1", "", { "dependencies": { "chalk": "^5.3.0", "chokidar": "^3.6.0", "commander": "^12.1.0", "cross-spawn": "^7.0.6", "express": "^4.21.2", "express-ws": "^5.0.2", "glob": "^11.0.0", "latest-version": "^9.0.0", "open": "^10.1.0", "serve-index": "^1.9.1", "serve-static": "^1.16.2", "tmp": "0.2.3", "ws": "^8.18.0" }, "bin": { "edp": "cli.js", "elm-doc-preview": "cli.js" } }, "sha512-G/xgVRKpbLuqliQmBINQFE6I0YAwqET2+SabiyXE47kaVChkhIz91HlZudUvCzTG/CV2ci7AERtAwYzQ4bjOKA=="], + + "elm-format": ["elm-format@0.8.8", "", { "optionalDependencies": { "@avh4/elm-format-darwin-arm64": "0.8.8-1", "@avh4/elm-format-darwin-x64": "0.8.8-1", "@avh4/elm-format-linux-arm64": "0.8.8-1", "@avh4/elm-format-linux-x64": "0.8.8-1", "@avh4/elm-format-win32-x64": "0.8.8-1" }, "bin": { "elm-format": "bin/elm-format" } }, "sha512-OJYUtVnepuy8UZdnL5OCjSxUY5+dIGP2NdWTB6icxVVOOH0b8MpJIijTPsGW+ztnv9yzSoTK0dhCuVDh+AGhNQ=="], + + "elm-hot": ["elm-hot@1.1.6", "", {}, "sha512-zYZJlfs7Gt4BdjA+D+857K+XAWzwwySJmXCgFpHW1dIEfaHSZCIPYPf7/jinZBLfKRkOAlKzI32AA84DY50g7Q=="], "elm-open-api": ["elm-open-api@github:wolfadex/elm-open-api-cli#f77df0b", { "bin": "dist/elm-open-api.js" }, "wolfadex-elm-open-api-cli-f77df0b"], + "elm-optimize-level-2": ["elm-optimize-level-2@0.3.5", "", { "dependencies": { "@types/jest": "^27.0.3", "chalk": "^4.1.0", "commander": "^6.0.0", "node-elm-compiler": "^5.0.4", "ts-union": "^2.2.1", "typescript": "^4.5.5" }, "bin": { "elm-optimize-level-2": "bin/elm-optimize-level-2" } }, "sha512-t1xl8zR9UBspdmEMuLBE/qTLP+Ew3L4PzKLhSY/PsO21HU3jZ1ULmKxDtZmJPVG4ciqsY1JSl/GFbaSdQ1sX9Q=="], + + "elm-pages": ["elm-pages@3.5.1", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "busboy": "^1.6.0", "chokidar": "^5.0.0", "cli-cursor": "^5.0.0", "commander": "^14.0.3", "connect": "^3.7.0", "cookie-signature": "^1.2.2", "cross-spawn": "7.0.6", "devcert": "^1.2.3", "elm-doc-preview": "^6.0.1", "elm-hot": "^1.1.6", "elm-optimize-level-2": "^0.3.5", "esbuild": "^0.27.4", "fs-extra": "^11.3.3", "globby": "^16.2.0", "gray-matter": "^4.0.3", "kleur": "^4.1.5", "make-fetch-happen": "^15.0.5", "memfs": "^4.57.1", "micromatch": "^4.0.8", "serve-static": "^2.2.1", "terser": "^5.46.1", "vite": "^7.3.1", "which": "^6.0.1" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "4.55.1" }, "bin": { "elm-pages": "generator/src/cli.js" } }, "sha512-EWEVXHsAZcFJPOduzn1MCYixwmf7QgIY7+ABJKNI+eqibJDTDhzoyj/glBhZBDJ5MtXNaqxQSqUQHZ8xWv7BrA=="], + "elm-review": ["elm-review@2.13.5", "", { "dependencies": { "chalk": "^4.0.0", "chokidar": "^3.5.2", "cross-spawn": "^7.0.3", "elm-solve-deps-wasm": "^1.0.2 || ^2.0.0", "fastest-levenshtein": "^1.0.16", "find-up": "^4.1.0 || ^5.0.0", "folder-hash": "^3.3.0", "got": "^11.8.5", "graceful-fs": "^4.2.11", "minimist": "^1.2.6", "ora": "^5.4.0", "path-key": "^3.1.1", "prompts": "^2.2.1", "strip-ansi": "^6.0.0", "terminal-link": "^2.1.1", "tinyglobby": "^0.2.10", "which": "^2.0.2", "wrap-ansi": "^7.0.0" }, "bin": { "elm-review": "bin/elm-review" } }, "sha512-Iw3YztGjmuGyn4nIEVOxqx+dacJialprpB0ZVrBHA0sBBOQ9+QhBaQnQ0tp0G8U8UoIAush0M7XoBqzUN1F/+A=="], "elm-solve-deps-wasm": ["elm-solve-deps-wasm@2.0.0", "", {}, "sha512-11OV8FgB9qsth/F94q2SJjb1MoEgbworSyNM1L+YlxVoaxp7wtWPyA8cNcPEkSoIKG1B8Tqg68ED1P6dVamHSg=="], @@ -362,10 +509,14 @@ "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], "enhanced-resolve": ["enhanced-resolve@5.21.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-xe9vQb5kReirPUxgQrXA3ihgbCqssmTiM7cOZ+Gzu+VeGWgpV98lLZvp0dl4yriyAePcewxGUs9UpKD8PET9KQ=="], + "eol": ["eol@0.9.1", "", {}, "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg=="], + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], @@ -374,14 +525,26 @@ "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - "esbuild": ["esbuild@0.20.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.20.2", "@esbuild/android-arm": "0.20.2", "@esbuild/android-arm64": "0.20.2", "@esbuild/android-x64": "0.20.2", "@esbuild/darwin-arm64": "0.20.2", "@esbuild/darwin-x64": "0.20.2", "@esbuild/freebsd-arm64": "0.20.2", "@esbuild/freebsd-x64": "0.20.2", "@esbuild/linux-arm": "0.20.2", "@esbuild/linux-arm64": "0.20.2", "@esbuild/linux-ia32": "0.20.2", "@esbuild/linux-loong64": "0.20.2", "@esbuild/linux-mips64el": "0.20.2", "@esbuild/linux-ppc64": "0.20.2", "@esbuild/linux-riscv64": "0.20.2", "@esbuild/linux-s390x": "0.20.2", "@esbuild/linux-x64": "0.20.2", "@esbuild/netbsd-x64": "0.20.2", "@esbuild/openbsd-x64": "0.20.2", "@esbuild/sunos-x64": "0.20.2", "@esbuild/win32-arm64": "0.20.2", "@esbuild/win32-ia32": "0.20.2", "@esbuild/win32-x64": "0.20.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g=="], + "esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + "express": ["express@4.22.3", "", { "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "~1.20.5", "content-disposition": "~0.5.4", "content-type": "~1.0.4", "cookie": "~0.7.1", "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "~1.3.1", "fresh": "~0.5.2", "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "~0.1.13", "proxy-addr": "~2.0.7", "qs": "~6.16.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "~0.19.0", "serve-static": "~1.16.2", "setprototypeof": "1.2.0", "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "sha512-Bdcs4+3qlpVlx2NRn6fgX2Ue2/gGRaPeawebgclM0ERSCqDpA+owF1fdPwjJUTAJWMTuAaxjDf+hzb0/4eKvvw=="], + + "express-ws": ["express-ws@5.0.2", "", { "dependencies": { "ws": "^7.4.6" }, "peerDependencies": { "express": "^4.0.0 || ^5.0.0-alpha.1" } }, "sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ=="], + + "extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="], + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], "fastest-levenshtein": ["fastest-levenshtein@1.0.16", "", {}, "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg=="], @@ -392,15 +555,29 @@ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + "finalhandler": ["finalhandler@1.1.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA=="], + + "find-elm-dependencies": ["find-elm-dependencies@2.0.4", "", { "dependencies": { "firstline": "^1.2.0", "lodash": "^4.17.19" }, "bin": { "find-elm-dependencies": "bin/cli.js" } }, "sha512-x/4w4fVmlD2X4PD9oQ+yh9EyaQef6OtEULdMGBTuWx0Nkppvo2Z/bAiQioW2n+GdRYKypME2b9OmYTw5tw5qDg=="], + "find-replace": ["find-replace@3.0.0", "", { "dependencies": { "array-back": "^3.0.1" } }, "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ=="], "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], + "firstline": ["firstline@1.3.1", "", {}, "sha512-ycwgqtoxujz1dm0kjkBFOPQMESxB9uKc/PlD951dQDIG+tBXRpYZC2UmJb0gDxopQ1ZX6oyRQN3goRczYu7Deg=="], + "folder-hash": ["folder-hash@3.3.4", "", { "dependencies": { "debug": "~4.3.1", "graceful-fs": "~4.2.0", "minimatch": "~3.1.5" }, "bin": { "folder-hash": "bin/folder-hash" } }, "sha512-ygx41kOst5mOBJbcMq+BTtadOIPxLBtj0CAI9QVY8DUSW2WcKQd6yD/i49cL3qEwI5iJryoQ1+kzZE3FyJX4ug=="], "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], - "fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + + "fresh": ["fresh@0.5.2", "", {}, "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="], + + "fs-extra": ["fs-extra@11.4.1", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-KYAb4c9BJQI6QqGKthV68OHe0badztdXJWKo0WtBA9IuCFPTKvE5ZdUBglP833aMjhaSPNO4A5j/EkzZtGlKjA=="], + + "fs-minipass": ["fs-minipass@3.0.3", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw=="], "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], @@ -414,6 +591,8 @@ "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + "get-port": ["get-port@3.2.0", "", {}, "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="], + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], @@ -422,6 +601,10 @@ "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + "glob-to-regex.js": ["glob-to-regex.js@1.3.1", "", { "peerDependencies": { "tslib": "2" } }, "sha512-zhWhMRsgnOym+1txhUmYJGD6eUsbUdrZv55gCYKuJX8t2p3+M8My23PD09bEIsreGUs5pnSa/idmcfp2/IlqGg=="], + + "globby": ["globby@16.2.4", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "fast-glob": "^3.3.3", "ignore": "^7.0.5", "is-path-inside": "^4.0.0", "micromatch": "^4.0.8", "slash": "^5.1.0", "unicorn-magic": "^0.4.0" } }, "sha512-c8B/VNLmxRcmqqenRA9t+9IyOjf9+V6lTxPaUJLqOCONdQkWZ0ETYgX0qbtJqPsgCNusT9MZ5Jeidw8Eb9tn2g=="], + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], "got": ["got@11.8.6", "", { "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", "@types/cacheable-request": "^6.0.1", "@types/responselike": "^1.0.0", "cacheable-lookup": "^5.0.3", "cacheable-request": "^7.0.2", "decompress-response": "^6.0.0", "http2-wrapper": "^1.0.0-beta.5.2", "lowercase-keys": "^2.0.0", "p-cancelable": "^2.0.0", "responselike": "^2.0.0" } }, "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g=="], @@ -430,6 +613,8 @@ "graphql": ["graphql@0.11.7", "", { "dependencies": { "iterall": "1.1.3" } }, "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw=="], + "gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="], + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], @@ -444,16 +629,34 @@ "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + "http2-wrapper": ["http2-wrapper@1.0.3", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" } }, "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg=="], + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "hyperdyperid": ["hyperdyperid@1.2.0", "", {}, "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A=="], + + "iconv-lite": ["iconv-lite@0.7.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ=="], + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + "ignore": ["ignore@7.0.12", "", {}, "sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg=="], + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + "ip-address": ["ip-address@10.7.4", "", {}, "sha512-DWBMKyeM25D70nrIiTkgQth59/G+naKOTep6huF9j+GmeK3DMD60Zvxg5d5qQnz+38AHgou6ean2LECX+lrKDg=="], + + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], @@ -470,12 +673,18 @@ "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + + "is-extendable": ["is-extendable@0.1.1", "", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="], + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], + "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], @@ -484,6 +693,8 @@ "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + "is-path-inside": ["is-path-inside@4.0.0", "", {}, "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA=="], + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], @@ -498,29 +709,49 @@ "is-url": ["is-url@1.2.4", "", {}, "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="], + "is-valid-domain": ["is-valid-domain@0.1.6", "", { "dependencies": { "punycode": "^2.1.1" } }, "sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg=="], + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], + "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], "iterall": ["iterall@1.1.3", "", {}, "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ=="], + "jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="], + + "jest-diff": ["jest-diff@27.5.1", "", { "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^27.5.1", "jest-get-type": "^27.5.1", "pretty-format": "^27.5.1" } }, "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw=="], + + "jest-get-type": ["jest-get-type@27.5.1", "", {}, "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw=="], + + "jest-matcher-utils": ["jest-matcher-utils@27.5.1", "", { "dependencies": { "chalk": "^4.0.0", "jest-diff": "^27.5.1", "jest-get-type": "^27.5.1", "pretty-format": "^27.5.1" } }, "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw=="], + "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], "js-base64": ["js-base64@3.7.8", "", {}, "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow=="], + "js-yaml": ["js-yaml@3.15.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w=="], + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], - "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + + "ky": ["ky@1.14.3", "", {}, "sha512-9zy9lkjac+TR1c2tG+mkNSVlyOpInnWdSMiue4F+kq8TwJSgv6o8jhLRg8Ho6SnZ9wOYUq/yozts9qQCfk7bIw=="], - "launch-editor": ["launch-editor@2.6.1", "", { "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw=="], + "lamdera": ["lamdera@0.19.1-1.4.0", "", { "optionalDependencies": { "@lamdera/compiler-darwin-arm64": "0.19.1-1.4.0", "@lamdera/compiler-darwin-x64": "0.19.1-1.4.0", "@lamdera/compiler-linux-arm64": "0.19.1-1.4.0", "@lamdera/compiler-linux-x64": "0.19.1-1.4.0", "@lamdera/compiler-win32-x64": "0.19.1-1.4.0" }, "bin": { "lamdera": "bin/lamdera" } }, "sha512-F5HqnNJPXulkr6/0XCNhaRhESjewG2iTHc+EKg8mJLj76E2PscuUOVhnBEjPqeFrEZF6RT53qSeWtSYG61fhpQ=="], + + "latest-version": ["latest-version@9.0.0", "", { "dependencies": { "package-json": "^10.0.0" } }, "sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA=="], "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], @@ -560,32 +791,74 @@ "lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="], + "lru-cache": ["lru-cache@11.5.3", "", {}, "sha512-U4N8FgzmWxc8k1VH8Kr6lQg18U7Fjvby6wXHVRX/ZZ7IwWbRMgrRbP0Wrb5q5NVinryp4SQampHKdvtecItxUg=="], + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="], + "make-fetch-happen": ["make-fetch-happen@15.0.6", "", { "dependencies": { "@gar/promise-retry": "^1.0.0", "@npmcli/agent": "^4.0.0", "@npmcli/redact": "^4.0.0", "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^5.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^1.0.0", "proc-log": "^6.0.0", "ssri": "^13.0.0" } }, "sha512-Je0fLJ0F5atA7F+eIlLzk+Wkcl57JDf4kf+EW8xiP5E31xOQxkIxTbgf1Oi1Lw9tRI9UEMRdI5Vz2xTzoNU1Jw=="], + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + "media-typer": ["media-typer@0.3.0", "", {}, "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="], + + "memfs": ["memfs@4.80.0", "", { "dependencies": { "@jsonjoy.com/fs-core": "4.80.0", "@jsonjoy.com/fs-fsa": "4.80.0", "@jsonjoy.com/fs-node": "4.80.0", "@jsonjoy.com/fs-node-builtins": "4.80.0", "@jsonjoy.com/fs-node-to-fsa": "4.80.0", "@jsonjoy.com/fs-node-utils": "4.80.0", "@jsonjoy.com/fs-print": "4.80.0", "@jsonjoy.com/fs-snapshot": "4.80.0", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.3.1", "thingies": "^2.5.0", "tree-dump": "^1.0.3", "tslib": "^2.0.0" } }, "sha512-N70W2isi44XdGn7uPo9NJ4zRukcdkwSFHlnYx42SWOH/+hzqNc8P7+tVoA2up4z7faHvNi1RSNCFjxoYQ71VPQ=="], + + "merge-descriptors": ["merge-descriptors@1.0.3", "", {}, "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="], + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + "methods": ["methods@1.1.2", "", {}, "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="], + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + "mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], "minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], + + "minipass-collect": ["minipass-collect@2.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw=="], + + "minipass-fetch": ["minipass-fetch@5.0.2", "", { "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^2.0.0", "minizlib": "^3.0.1" }, "optionalDependencies": { "iconv-lite": "^0.7.2" } }, "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ=="], + + "minipass-flush": ["minipass-flush@1.0.7", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA=="], + + "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="], + + "minipass-sized": ["minipass-sized@2.0.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA=="], + + "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], + + "mkdirp": ["mkdirp@0.5.6", "", { "dependencies": { "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw=="], + "moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="], - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + "ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "negotiator": ["negotiator@1.1.0", "", { "dependencies": { "content-type": "^2.1.0" } }, "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg=="], + + "nice-try": ["nice-try@1.0.5", "", {}, "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="], + + "node-elm-compiler": ["node-elm-compiler@5.0.6", "", { "dependencies": { "cross-spawn": "6.0.5", "find-elm-dependencies": "^2.0.4", "lodash": "^4.17.19", "temp": "^0.9.0" } }, "sha512-DWTRQR8b54rvschcZRREdsz7K84lnS8A6YJu8du3QLQ8f204SJbyTaA6NzYYbfUG97OTRKRv/0KZl82cTfpLhA=="], + "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], @@ -604,20 +877,36 @@ "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + "on-finished": ["on-finished@2.3.0", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww=="], + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], + + "open": ["open@10.2.0", "", { "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "wsl-utils": "^0.1.0" } }, "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA=="], "ora": ["ora@5.4.1", "", { "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], + "os-tmpdir": ["os-tmpdir@1.0.2", "", {}, "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g=="], + "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="], "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="], + "p-map": ["p-map@7.1.1", "", {}, "sha512-6Lh3jQPLthYujSrlw6ccWXBGZTkoTCz27Hd92g79LH/kjAbgoEu0t442cCCNbegPSJsA0lwDX8z0bcKtkpA32g=="], + + "package-json": ["package-json@10.0.1", "", { "dependencies": { "ky": "^1.2.0", "registry-auth-token": "^5.0.2", "registry-url": "^6.0.1", "semver": "^7.6.0" } }, "sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + + "password-prompt": ["password-prompt@1.1.3", "", { "dependencies": { "ansi-escapes": "^4.3.2", "cross-spawn": "^7.0.3" } }, "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw=="], + "path-equal": ["path-equal@1.2.5", "", {}, "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g=="], "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], @@ -628,6 +917,10 @@ "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + "path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], + + "path-to-regexp": ["path-to-regexp@0.1.13", "", {}, "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="], + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], @@ -654,12 +947,24 @@ "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + "pretty-format": ["pretty-format@27.5.1", "", { "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } }, "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ=="], + + "proc-log": ["proc-log@6.1.0", "", {}, "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ=="], + "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + "proto-list": ["proto-list@1.2.4", "", {}, "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA=="], + + "proxy-addr": ["proxy-addr@2.0.8", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ=="], + "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "qs": ["qs@6.16.1", "", { "dependencies": { "es-define-property": "^1.0.1", "side-channel": "^1.1.1" } }, "sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg=="], + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], @@ -672,6 +977,14 @@ "quicktype-typescript-input": ["quicktype-typescript-input@23.2.6", "", { "dependencies": { "@mark.probst/typescript-json-schema": "0.55.0", "quicktype-core": "23.2.6", "typescript": "4.9.5" } }, "sha512-dCNMxR+7PGs9/9Tsth9H6LOQV1G+Tv4sUGT8ZUfDRJ5Hq371qOYLma5BnLX6VxkPu8JT7mAMpQ9VFlxstX6Qaw=="], + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "raw-body": ["raw-body@2.5.3", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "unpipe": "~1.0.0" } }, "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA=="], + + "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], + + "react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="], + "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], "readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], @@ -680,6 +993,10 @@ "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + "registry-auth-token": ["registry-auth-token@5.1.1", "", { "dependencies": { "@pnpm/npm-conf": "^3.0.2" } }, "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q=="], + + "registry-url": ["registry-url@6.0.1", "", { "dependencies": { "rc": "1.2.8" } }, "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q=="], + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], @@ -688,11 +1005,15 @@ "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="], - "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - "rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + "rimraf": ["rimraf@2.7.1", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w=="], + + "rollup": ["rollup@4.60.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.0", "@rollup/rollup-android-arm64": "4.60.0", "@rollup/rollup-darwin-arm64": "4.60.0", "@rollup/rollup-darwin-x64": "4.60.0", "@rollup/rollup-freebsd-arm64": "4.60.0", "@rollup/rollup-freebsd-x64": "4.60.0", "@rollup/rollup-linux-arm-gnueabihf": "4.60.0", "@rollup/rollup-linux-arm-musleabihf": "4.60.0", "@rollup/rollup-linux-arm64-gnu": "4.60.0", "@rollup/rollup-linux-arm64-musl": "4.60.0", "@rollup/rollup-linux-loong64-gnu": "4.60.0", "@rollup/rollup-linux-loong64-musl": "4.60.0", "@rollup/rollup-linux-ppc64-gnu": "4.60.0", "@rollup/rollup-linux-ppc64-musl": "4.60.0", "@rollup/rollup-linux-riscv64-gnu": "4.60.0", "@rollup/rollup-linux-riscv64-musl": "4.60.0", "@rollup/rollup-linux-s390x-gnu": "4.60.0", "@rollup/rollup-linux-x64-gnu": "4.60.0", "@rollup/rollup-linux-x64-musl": "4.60.0", "@rollup/rollup-openbsd-x64": "4.60.0", "@rollup/rollup-openharmony-arm64": "4.60.0", "@rollup/rollup-win32-arm64-msvc": "4.60.0", "@rollup/rollup-win32-ia32-msvc": "4.60.0", "@rollup/rollup-win32-x64-gnu": "4.60.0", "@rollup/rollup-win32-x64-msvc": "4.60.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ=="], + + "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], @@ -702,16 +1023,28 @@ "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="], + + "semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], + + "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], + + "serve-index": ["serve-index@1.9.2", "", { "dependencies": { "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", "http-errors": "~1.8.0", "mime-types": "~2.1.35", "parseurl": "~1.3.3" } }, "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ=="], + + "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], @@ -720,22 +1053,38 @@ "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], "sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="], + "slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="], + + "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], + + "socks": ["socks@2.8.10", "", { "dependencies": { "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" } }, "sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ=="], + + "socks-proxy-agent": ["socks-proxy-agent@8.0.5", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" } }, "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw=="], + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + + "ssri": ["ssri@13.0.1", "", { "dependencies": { "minipass": "^7.0.3" } }, "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ=="], + + "statuses": ["statuses@1.5.0", "", {}, "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="], + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], "stream-chain": ["stream-chain@2.2.5", "", {}, "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA=="], "stream-json": ["stream-json@1.8.0", "", { "dependencies": { "stream-chain": "^2.2.5" } }, "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw=="], + "streamsearch": ["streamsearch@1.1.0", "", {}, "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg=="], + "string-to-stream": ["string-to-stream@3.0.1", "", { "dependencies": { "readable-stream": "^3.4.0" } }, "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg=="], "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -744,8 +1093,14 @@ "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="], + + "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], + "sudo-prompt": ["sudo-prompt@8.2.5", "", {}, "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], "supports-hyperlinks": ["supports-hyperlinks@2.3.0", "", { "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" } }, "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA=="], @@ -758,32 +1113,44 @@ "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], + "temp": ["temp@0.9.4", "", { "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" } }, "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA=="], + "terminal-link": ["terminal-link@2.1.1", "", { "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" } }, "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ=="], - "terser": ["terser@5.15.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw=="], + "terser": ["terser@5.51.2", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q=="], "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], - "tiny-decoders": ["tiny-decoders@7.0.1", "", {}, "sha512-P1LaHTLASl/lCrdtwgAAVwxt4bEAPmxpf9HMQrlCkAseaT8oH8oxm8ndy4nx5rLTcL5U/Qxp1a+FDoQfS/ZgQQ=="], + "thingies": ["thingies@2.6.1", "", { "peerDependencies": { "tslib": "^2" } }, "sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw=="], "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "tmp": ["tmp@0.0.33", "", { "dependencies": { "os-tmpdir": "~1.0.2" } }, "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw=="], + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + "tree-dump": ["tree-dump@1.1.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA=="], + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="], + "ts-union": ["ts-union@2.3.0", "", {}, "sha512-OP+W9WoYvGlOMjc90D6nYz60jU1zQlXAg3VBtuSoMDejY94PaORkya9HtHjaaqqwA4I5/hN38fmKK0nSWj7jPg=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], + "type-is": ["type-is@1.6.18", "", { "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "typical": ["typical@4.0.0", "", {}, "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw=="], @@ -794,17 +1161,23 @@ "unicode-trie": ["unicode-trie@2.0.0", "", { "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" } }, "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ=="], + "unicorn-magic": ["unicorn-magic@0.4.1", "", {}, "sha512-lzlXPoVB0Uy/FvTaUgX39RbixYiSKoc3JSoSf01+0c2B6FR3qdYIPN7Qjo/AV7n6sqLCk0509cT3LRj1oSZ1+A=="], + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + "urijs": ["urijs@1.19.11", "", {}, "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="], "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + "utils-merge": ["utils-merge@1.0.1", "", {}, "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="], + "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="], - "vite": ["vite@5.2.8", "", { "dependencies": { "esbuild": "^0.20.1", "postcss": "^8.4.38", "rollup": "^4.13.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA=="], + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - "vite-plugin-elm-watch": ["vite-plugin-elm-watch@1.3.3", "", { "dependencies": { "cross-spawn": "7.0.3", "elm": "0.19.1-6", "launch-editor": "2.6.1", "terser": "5.26.0", "tiny-decoders": "7.0.1" } }, "sha512-rR78gmeYp08E4CvtpnZuumsmNXaG/XOJ/xtOVfEG3TOJqDChXy1DzE1pnPsERohbELkov7ZZPHRLGV1z2iyxKg=="], + "vite": ["vite@7.3.7", "", { "dependencies": { "esbuild": "^0.27.0 || ^0.28.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-AHEzTORMbi7/7aXp7w7KZ5+DCUdSeLsJz0grY8xHpc9DHdYb0vQu6DqJfm2tOw3gDExNgPgnJTXxM6syYFHaCA=="], "wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], @@ -812,7 +1185,7 @@ "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="], "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], @@ -828,8 +1201,14 @@ "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + "ws": ["ws@8.22.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg=="], + + "wsl-utils": ["wsl-utils@0.1.0", "", { "dependencies": { "is-wsl": "^3.1.0" } }, "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw=="], + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], @@ -842,10 +1221,22 @@ "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], + "@jsonjoy.com/fs-snapshot/@jsonjoy.com/json-pack": ["@jsonjoy.com/json-pack@17.67.0", "", { "dependencies": { "@jsonjoy.com/base64": "17.67.0", "@jsonjoy.com/buffers": "17.67.0", "@jsonjoy.com/codegen": "17.67.0", "@jsonjoy.com/json-pointer": "17.67.0", "@jsonjoy.com/util": "17.67.0", "hyperdyperid": "^1.2.0", "thingies": "^2.5.0", "tree-dump": "^1.1.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w=="], + + "@jsonjoy.com/fs-snapshot/@jsonjoy.com/util": ["@jsonjoy.com/util@17.67.0", "", { "dependencies": { "@jsonjoy.com/buffers": "17.67.0", "@jsonjoy.com/codegen": "17.67.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew=="], + + "@jsonjoy.com/json-pack/@jsonjoy.com/buffers": ["@jsonjoy.com/buffers@1.2.1", "", { "peerDependencies": { "tslib": "2" } }, "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA=="], + + "@jsonjoy.com/util/@jsonjoy.com/buffers": ["@jsonjoy.com/buffers@1.2.1", "", { "peerDependencies": { "tslib": "2" } }, "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA=="], + "@mark.probst/typescript-json-schema/@types/node": ["@types/node@16.18.126", "", {}, "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw=="], "@mark.probst/typescript-json-schema/typescript": ["typescript@4.9.4", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg=="], + "@npmcli/fs/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], + + "@pnpm/network.ca-file/graceful-fs": ["graceful-fs@4.2.10", "", {}, "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="], + "@tailwindcss/node/jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], "@tailwindcss/node/tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], @@ -866,12 +1257,22 @@ "@tailwindcss/postcss/tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], + "@types/minimatch/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + + "accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], + "anymatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], "bl/buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], "bl/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "body-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + + "body-parser/on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "cacache/glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], + "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="], @@ -880,14 +1281,88 @@ "command-line-usage/typical": ["typical@7.3.0", "", {}, "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw=="], - "elm-land/typescript": ["typescript@4.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA=="], + "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "devcert/@types/node": ["@types/node@8.10.66", "", {}, "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="], + + "devcert/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + + "devcert/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "elm-doc-preview/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + + "elm-doc-preview/commander": ["commander@12.1.0", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="], + + "elm-doc-preview/glob": ["glob@11.1.0", "", { "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw=="], + + "elm-doc-preview/serve-static": ["serve-static@1.16.3", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "~0.19.1" } }, "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA=="], + + "elm-doc-preview/tmp": ["tmp@0.2.3", "", {}, "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w=="], + + "elm-optimize-level-2/commander": ["commander@6.2.1", "", {}, "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="], + + "elm-optimize-level-2/typescript": ["typescript@4.9.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="], + + "elm-pages/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], + + "elm-pages/commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="], - "elm-review/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "elm-review/cross-spawn": ["cross-spawn@7.0.3", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="], + + "elm-review/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "elm-tailwind-modules/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + + "elm-tailwind-modules/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + + "elm-tailwind-modules/rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="], + + "express/cookie-signature": ["cookie-signature@1.0.7", "", {}, "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA=="], + + "express/finalhandler": ["finalhandler@1.3.2", "", { "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "~2.4.1", "parseurl": "~1.3.3", "statuses": "~2.0.2", "unpipe": "~1.0.0" } }, "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg=="], + + "express/on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "express/send": ["send@0.19.2", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "~0.5.2", "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "~2.4.1", "range-parser": "~1.2.1", "statuses": "~2.0.2" } }, "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg=="], + + "express/serve-static": ["serve-static@1.16.3", "", { "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "~0.19.1" } }, "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA=="], + + "express/statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + + "express-ws/ws": ["ws@7.5.13", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA=="], "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "finalhandler/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], + + "folder-hash/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], + + "http-errors/statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + + "http-proxy-agent/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "https-proxy-agent/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "negotiator/content-type": ["content-type@2.1.0", "", {}, "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag=="], + + "node-elm-compiler/cross-spawn": ["cross-spawn@6.0.5", "", { "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ=="], + + "ora/cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + + "package-json/semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], + + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + + "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + + "qs/side-channel": ["side-channel@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="], + "quicktype/typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], "quicktype-core/@glideapps/ts-necessities": ["@glideapps/ts-necessities@2.2.3", "", {}, "sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w=="], @@ -896,15 +1371,37 @@ "quicktype-typescript-input/typescript": ["typescript@4.9.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="], + "raw-body/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + "readdirp/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + "rollup/@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.0", "", { "os": "linux", "cpu": "x64" }, "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg=="], + + "send/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "send/fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], + + "send/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + + "send/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "send/on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "send/range-parser": ["range-parser@1.3.0", "", {}, "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw=="], + + "send/statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + + "serve-index/http-errors": ["http-errors@1.8.1", "", { "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.1" } }, "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g=="], + + "socks-proxy-agent/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "string-to-stream/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], "table-layout/array-back": ["array-back@6.2.3", "", {}, "sha512-SGDvmg6QTYiTxCBkYVmThcoa67uLl35pyzRHdpCGBOcqFy6BtwnphoFPk7LhJshD+Yk1Kt35WGWeZPTgwR4Fhw=="], - "tailwindcss/chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + "temp/rimraf": ["rimraf@2.6.3", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "./bin.js" } }, "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="], "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -912,14 +1409,132 @@ "unicode-trie/pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="], - "vite/rollup": ["rollup@4.60.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.0", "@rollup/rollup-android-arm64": "4.60.0", "@rollup/rollup-darwin-arm64": "4.60.0", "@rollup/rollup-darwin-x64": "4.60.0", "@rollup/rollup-freebsd-arm64": "4.60.0", "@rollup/rollup-freebsd-x64": "4.60.0", "@rollup/rollup-linux-arm-gnueabihf": "4.60.0", "@rollup/rollup-linux-arm-musleabihf": "4.60.0", "@rollup/rollup-linux-arm64-gnu": "4.60.0", "@rollup/rollup-linux-arm64-musl": "4.60.0", "@rollup/rollup-linux-loong64-gnu": "4.60.0", "@rollup/rollup-linux-loong64-musl": "4.60.0", "@rollup/rollup-linux-ppc64-gnu": "4.60.0", "@rollup/rollup-linux-ppc64-musl": "4.60.0", "@rollup/rollup-linux-riscv64-gnu": "4.60.0", "@rollup/rollup-linux-riscv64-musl": "4.60.0", "@rollup/rollup-linux-s390x-gnu": "4.60.0", "@rollup/rollup-linux-x64-gnu": "4.60.0", "@rollup/rollup-linux-x64-musl": "4.60.0", "@rollup/rollup-openbsd-x64": "4.60.0", "@rollup/rollup-openharmony-arm64": "4.60.0", "@rollup/rollup-win32-arm64-msvc": "4.60.0", "@rollup/rollup-win32-ia32-msvc": "4.60.0", "@rollup/rollup-win32-x64-gnu": "4.60.0", "@rollup/rollup-win32-x64-msvc": "4.60.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ=="], + "vite/esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], + + "vite/postcss": ["postcss@8.5.14", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg=="], + + "@jsonjoy.com/fs-snapshot/@jsonjoy.com/json-pack/@jsonjoy.com/base64": ["@jsonjoy.com/base64@17.67.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw=="], + + "@jsonjoy.com/fs-snapshot/@jsonjoy.com/json-pack/@jsonjoy.com/codegen": ["@jsonjoy.com/codegen@17.67.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q=="], + + "@jsonjoy.com/fs-snapshot/@jsonjoy.com/json-pack/@jsonjoy.com/json-pointer": ["@jsonjoy.com/json-pointer@17.67.0", "", { "dependencies": { "@jsonjoy.com/util": "17.67.0" }, "peerDependencies": { "tslib": "2" } }, "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA=="], + + "@jsonjoy.com/fs-snapshot/@jsonjoy.com/util/@jsonjoy.com/codegen": ["@jsonjoy.com/codegen@17.67.0", "", { "peerDependencies": { "tslib": "2" } }, "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q=="], + + "@types/minimatch/minimatch/brace-expansion": ["brace-expansion@5.0.12", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ=="], + + "cacache/glob/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + + "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "devcert/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "elm-doc-preview/glob/minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], + + "elm-doc-preview/serve-static/send": ["send@0.19.2", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "~0.5.2", "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "~2.4.1", "range-parser": "~1.2.1", "statuses": "~2.0.2" } }, "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg=="], + + "elm-pages/chokidar/readdirp": ["readdirp@5.1.1", "", {}, "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA=="], + + "elm-review/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "express/send/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "folder-hash/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "http-proxy-agent/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "https-proxy-agent/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "node-elm-compiler/cross-spawn/path-key": ["path-key@2.0.1", "", {}, "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw=="], + + "node-elm-compiler/cross-spawn/shebang-command": ["shebang-command@1.2.0", "", { "dependencies": { "shebang-regex": "^1.0.0" } }, "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg=="], + + "node-elm-compiler/cross-spawn/which": ["which@1.3.1", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "./bin/which" } }, "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ=="], + + "ora/cli-cursor/restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + + "qs/side-channel/side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], + + "send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + + "serve-index/http-errors/depd": ["depd@1.1.2", "", {}, "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="], + + "socks-proxy-agent/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="], + + "vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.2", "", { "os": "android", "cpu": "arm" }, "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg=="], + + "vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A=="], + + "vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.28.2", "", { "os": "android", "cpu": "x64" }, "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q=="], + + "vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw=="], + + "vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw=="], + + "vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw=="], + + "vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg=="], + + "vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.2", "", { "os": "linux", "cpu": "arm" }, "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w=="], + + "vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug=="], + + "vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ=="], + + "vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ=="], + + "vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA=="], + + "vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ=="], + + "vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA=="], + + "vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg=="], + + "vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.2", "", { "os": "linux", "cpu": "x64" }, "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ=="], + + "vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw=="], + + "vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.2", "", { "os": "none", "cpu": "x64" }, "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw=="], + + "vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ=="], + + "vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw=="], + + "vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q=="], + + "vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g=="], + + "vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ=="], + + "vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA=="], + + "vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g=="], + + "@types/minimatch/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + + "cacache/glob/minimatch/brace-expansion": ["brace-expansion@5.0.12", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ=="], + + "elm-doc-preview/glob/minimatch/brace-expansion": ["brace-expansion@5.0.12", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ=="], + + "elm-doc-preview/serve-static/send/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "elm-doc-preview/serve-static/send/on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + + "elm-doc-preview/serve-static/send/statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], + + "node-elm-compiler/cross-spawn/shebang-command/shebang-regex": ["shebang-regex@1.0.0", "", {}, "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ=="], + + "node-elm-compiler/cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - "vite-plugin-elm-watch/terser": ["terser@5.26.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ=="], + "ora/cli-cursor/restore-cursor/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - "elm-review/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "ora/cli-cursor/restore-cursor/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - "tailwindcss/chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "cacache/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "vite-plugin-elm-watch/terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + "elm-doc-preview/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], } } diff --git a/codegen/elm.codegen.json b/codegen/elm.codegen.json new file mode 100644 index 0000000..596beac --- /dev/null +++ b/codegen/elm.codegen.json @@ -0,0 +1,18 @@ +{ + "elm-codegen-version": "0.6.0", + "codegen-helpers": { + "packages": { + "elm/core": "1.0.5", + "dillonkearns/elm-form": "3.1.0", + "elm/html": "1.0.0", + "rtfeldman/elm-css": "18.0.0", + "dillonkearns/elm-pages": "12.2.1", + "elm/json": "1.1.3" + }, + "local": [ + ".elm-pages/", + "app/", + "src/" + ] + } +} \ No newline at end of file diff --git a/elm-land.json b/elm-land.json deleted file mode 100644 index 5daeeb8..0000000 --- a/elm-land.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "app": { - "elm": { - "development": { - "debugger": true - }, - "production": { - "debugger": false - } - }, - "env": [], - "html": { - "attributes": { - "html": { - "lang": "en" - }, - "head": {} - }, - "title": "Elm Land", - "meta": [ - { - "charset": "UTF-8" - }, - { - "http-equiv": "X-UA-Compatible", - "content": "IE=edge" - }, - { - "name": "viewport", - "content": "width=device-width, initial-scale=1.0" - } - ], - "link": [ - { - "rel": "stylesheet", - "href": "/base.css" - } - ], - "script": [ - { - "src": "https://kit.fontawesome.com/9bc6b8da88.js" - } - ] - }, - "router": { - "useHashRouting": false - }, - "proxy": null - } -} \ No newline at end of file diff --git a/elm-pages.config.mjs b/elm-pages.config.mjs new file mode 100644 index 0000000..8206c88 --- /dev/null +++ b/elm-pages.config.mjs @@ -0,0 +1,15 @@ +import { defineConfig } from "vite"; + +export default { + vite: defineConfig({}), + headTagsTemplate(context) { + return ` + + + +`; + }, + preloadTagForFile(file) { + return !file.endsWith(".css"); + }, +}; diff --git a/elm.json b/elm.json index 4982383..fce3849 100644 --- a/elm.json +++ b/elm.json @@ -2,32 +2,77 @@ "type": "application", "source-directories": [ "src", - ".elm-land/src", - "./gen" + "app", + ".elm-pages", + "gen" ], "elm-version": "0.19.1", "dependencies": { "direct": { + "avh4/elm-color": "1.0.0", + "danfishgold/base64-bytes": "1.1.0", + "danyx23/elm-mimetype": "4.0.1", + "dillonkearns/elm-bcp47-language-tag": "2.0.0", + "dillonkearns/elm-cli-options-parser": "5.0.1", + "dillonkearns/elm-form": "3.1.0", + "dillonkearns/elm-markdown": "7.0.1", + "dillonkearns/elm-pages": "12.3.0", "elm/browser": "1.0.2", "elm/bytes": "1.0.8", "elm/core": "1.0.5", - "elm/html": "1.0.0", + "elm/html": "1.0.1", "elm/http": "2.0.0", - "elm/json": "1.1.3", + "elm/json": "1.1.4", + "elm/parser": "1.1.0", + "elm/regex": "1.0.0", + "elm/time": "1.0.0", "elm/url": "1.0.0", - "matheus23/elm-tailwind-modules-base": "1.0.0", - "rtfeldman/elm-css": "18.0.0" + "elm/virtual-dom": "1.0.5", + "elm-community/dict-extra": "2.4.0", + "elm-community/list-extra": "8.7.0", + "elm-community/result-extra": "2.4.0", + "jluckyiv/elm-utc-date-strings": "1.0.0", + "justinmimbs/date": "4.1.0", + "mdgriffith/elm-codegen": "6.0.3", + "miniBill/elm-codec": "2.3.0", + "noahzgordon/elm-color-extra": "1.0.2", + "robinheghan/fnv1a": "1.0.0", + "rtfeldman/elm-css": "18.0.0", + "the-sett/elm-syntax-dsl": "6.0.5", + "turboMaCk/non-empty-list-alias": "1.4.0", + "vito/elm-ansi": "12.0.0", + "matheus23/elm-tailwind-modules-base": "1.0.0" }, "indirect": { + "BrianHicks/elm-string-graphemes": "1.0.4", + "BrianHicks/elm-trend": "2.1.3", + "Chadtech/elm-bool-extra": "2.4.2", + "MaybeJustJames/yaml": "2.1.7", + "dillonkearns/elm-date-or-date-time": "2.0.0", + "dillonkearns/elm-ts-json": "2.1.2", "elm/file": "1.0.5", - "elm/time": "1.0.0", - "elm/virtual-dom": "1.0.3", + "elm/random": "1.0.0", + "elm-explorations/benchmark": "1.0.2", + "elm-explorations/test": "2.2.1", + "elmcraft/core-extra": "2.3.0", + "fredcy/elm-parseint": "2.0.1", + "mdgriffith/style-elements": "5.0.2", + "miniBill/elm-unicode": "1.1.1", + "pithub/elm-parser-bug-workaround": "1.0.0", + "pithub/elm-parser-extra": "1.0.0", "robinheghan/murmur3": "1.0.0", - "rtfeldman/elm-hex": "1.0.0" + "rtfeldman/elm-hex": "1.0.0", + "rtfeldman/elm-iso8601-date-strings": "1.1.4", + "stil4m/elm-syntax": "7.3.9", + "stil4m/structured-writer": "1.0.3", + "the-sett/elm-pretty-printer": "3.3.1", + "wolfadex/elm-ansi": "3.0.1" } }, "test-dependencies": { - "direct": {}, + "direct": { + "elm-explorations/test": "2.2.1" + }, "indirect": {} } -} +} \ No newline at end of file diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..2579392 --- /dev/null +++ b/index.ts @@ -0,0 +1,16 @@ +type ElmPagesInit = { + load: (elmLoaded: Promise) => Promise; + flags: unknown; +}; + +const config: ElmPagesInit = { + load: async function (elmLoaded) { + const app = await elmLoaded; + console.log("App loaded", app); + }, + flags: function () { + return "You can decode this in Shared.elm using Json.Decode.string!"; + }, +}; + +export default config; diff --git a/package.json b/package.json index 5ae5c87..9855858 100644 --- a/package.json +++ b/package.json @@ -4,16 +4,22 @@ "private": true, "devDependencies": { "@types/bun": "latest", - "elm-land": "^0.20.1", "elm-open-api": "git+https://github.com/wolfadex/elm-open-api-cli.git#main", "elm-review": "^2.13.5", "quicktype": "^23.2.6", - "quicktype-core": "^23.2.6" + "quicktype-core": "^23.2.6", + "elm": "^0.19.1-6", + "elm-codegen": "^0.6.3", + "elm-format": "^0.8.8", + "elm-pages": "^3.5.0", + "lamdera": "^0.19.1-1.4.0", + "vite": "^7.3.2" }, "scripts": { - "tw": " elm-tailwind-modules --dir ./gen --tailwind-config tailwind.config.ts", - "server": "elm-land server", - "format": "elm-format src --yes" + "tw": "bunx --bun elm-tailwind-modules --dir ./gen --tailwind-config tailwind.config.ts", + "dev": "elm-pages dev", + "build": "elm-pages build", + "format": "elm-format src app --yes" }, "peerDependencies": { "typescript": "^5" diff --git a/static/base.css b/public/base.css similarity index 100% rename from static/base.css rename to public/base.css diff --git a/static/devden-banner.svg b/public/devden-banner.svg similarity index 100% rename from static/devden-banner.svg rename to public/devden-banner.svg diff --git a/static/devden-logo.svg b/public/devden-logo.svg similarity index 100% rename from static/devden-logo.svg rename to public/devden-logo.svg diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..30b118264e5d5ceb2a224d8cb2ec646054db7e2d GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dys{?#OT-^(NfK1lXXDrqC88}#g zYz7Wi5D5m1*XtPWl`%ZcW85{H;Y~W@`BvunyO@`4Vr{;`(tMq{^8(YMDNHAOnGQ~2 z-m;i!^J1nGJ*-_9SSFlcnRt?A#zE%k2btHbVqUwNLEn8TBd*shCN|SbCxsgsbHMl&bYsurSY)b z#F8aIS84Av8htFD5QkFcgbX{2S>>*=b)?wDU9DItY;^)>?s~jnuQ@68Gq~`wlO$saSG+fxn o@c*rTo%V(Wec??VU*FB!&0H<7o}R7Y&;<%}Pgg&ebxsLQ09-MvasU7T literal 0 HcmV?d00001 diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..7c4f2f7 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://developerden.org/sitemap.xml diff --git a/review/src/ReviewConfig.elm b/review/src/ReviewConfig.elm index 147a9da..4d2a462 100644 --- a/review/src/ReviewConfig.elm +++ b/review/src/ReviewConfig.elm @@ -40,7 +40,7 @@ config = (Rule.ignoreErrorsFor [ FilePattern.excludeDirectory "gen/" , FilePattern.excludeDirectory "src/OpenApi/" - , FilePattern.excludeDirectory ".elm-land" + , FilePattern.excludeDirectory ".elm-pages" , FilePattern.exclude "src/LearningResources/Json.elm" , FilePattern.exclude "src/LearningResources/Types.elm" ] diff --git a/src/Api.elm b/src/Api.elm deleted file mode 100644 index 9621511..0000000 --- a/src/Api.elm +++ /dev/null @@ -1,21 +0,0 @@ -module Api exposing (Data(..), getLearningResourcesIndex) - -import Effect exposing (Effect) -import Http -import LearningResources.Json as LearningResources -import LearningResources.Types as LearningResources - - -type Data value - = Success value - - -getLearningResourcesIndex : - { onResponse : Result Http.Error LearningResources.Database -> msg } - -> Effect msg -getLearningResourcesIndex { onResponse } = - Effect.sendCmd <| - Http.get - { url = "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@master/database.json" - , expect = Http.expectJson onResponse LearningResources.decodeDatabase - } diff --git a/src/Effect.elm b/src/Effect.elm deleted file mode 100644 index 4a55865..0000000 --- a/src/Effect.elm +++ /dev/null @@ -1,219 +0,0 @@ -module Effect exposing - ( Effect - , none, batch - , sendCmd, sendMsg - , pushRoute, replaceRoute - , pushRoutePath, replaceRoutePath - , loadExternalUrl, back - , map, toCmd - , sendSharedMsg - ) - -{-| - -@docs Effect - -@docs none, batch -@docs sendCmd, sendMsg - -@docs pushRoute, replaceRoute -@docs pushRoutePath, replaceRoutePath -@docs loadExternalUrl, back - -@docs map, toCmd - --} - -import Browser.Navigation -import Dict exposing (Dict) -import Route exposing (Route) -import Route.Path -import Shared.Model -import Shared.Msg -import Task -import Url exposing (Url) - - -type Effect msg - = -- BASICS - None - | Batch (List (Effect msg)) - | SendCmd (Cmd msg) - -- ROUTING - | PushUrl String - | ReplaceUrl String - | LoadExternalUrl String - | Back - -- SHARED - | SendSharedMsg Shared.Msg.Msg - - - --- BASICS - - -{-| Don't send any effect. --} -none : Effect msg -none = - None - - -{-| Send multiple effects at once. --} -batch : List (Effect msg) -> Effect msg -batch = - Batch - - -{-| Send a normal `Cmd msg` as an effect, something like `Http.get` or `Random.generate`. --} -sendCmd : Cmd msg -> Effect msg -sendCmd = - SendCmd - - -{-| Send a message as an effect. Useful when emitting events from UI components. --} -sendMsg : msg -> Effect msg -sendMsg msg = - Task.succeed msg - |> Task.perform identity - |> SendCmd - - - --- ROUTING - - -{-| Set the new route, and make the back button go back to the current route. --} -pushRoute : - { path : Route.Path.Path - , query : Dict String String - , hash : Maybe String - } - -> Effect msg -pushRoute route = - PushUrl (Route.toString route) - - -{-| Same as `Effect.pushRoute`, but without `query` or `hash` support --} -pushRoutePath : Route.Path.Path -> Effect msg -pushRoutePath path = - PushUrl (Route.Path.toString path) - - -{-| Set the new route, but replace the previous one, so clicking the back -button **won't** go back to the previous route. --} -replaceRoute : - { path : Route.Path.Path - , query : Dict String String - , hash : Maybe String - } - -> Effect msg -replaceRoute route = - ReplaceUrl (Route.toString route) - - -{-| Same as `Effect.replaceRoute`, but without `query` or `hash` support --} -replaceRoutePath : Route.Path.Path -> Effect msg -replaceRoutePath path = - ReplaceUrl (Route.Path.toString path) - - -{-| Redirect users to a new URL, somewhere external to your web application. --} -loadExternalUrl : String -> Effect msg -loadExternalUrl = - LoadExternalUrl - - -{-| Navigate back one page --} -back : Effect msg -back = - Back - - - --- INTERNALS - - -{-| Elm Land depends on this function to connect pages and layouts -together into the overall app. --} -map : (msg1 -> msg2) -> Effect msg1 -> Effect msg2 -map fn effect = - case effect of - None -> - None - - Batch list -> - Batch (List.map (map fn) list) - - SendCmd cmd -> - SendCmd (Cmd.map fn cmd) - - PushUrl url -> - PushUrl url - - ReplaceUrl url -> - ReplaceUrl url - - Back -> - Back - - LoadExternalUrl url -> - LoadExternalUrl url - - SendSharedMsg sharedMsg -> - SendSharedMsg sharedMsg - - -{-| Elm Land depends on this function to perform your effects. --} -toCmd : - { key : Browser.Navigation.Key - , url : Url - , shared : Shared.Model.Model - , fromSharedMsg : Shared.Msg.Msg -> msg - , batch : List msg -> msg - , toCmd : msg -> Cmd msg - } - -> Effect msg - -> Cmd msg -toCmd options effect = - case effect of - None -> - Cmd.none - - Batch list -> - Cmd.batch (List.map (toCmd options) list) - - SendCmd cmd -> - cmd - - PushUrl url -> - Browser.Navigation.pushUrl options.key url - - ReplaceUrl url -> - Browser.Navigation.replaceUrl options.key url - - Back -> - Browser.Navigation.back options.key 1 - - LoadExternalUrl url -> - Browser.Navigation.load url - - SendSharedMsg sharedMsg -> - Task.succeed sharedMsg - |> Task.perform options.fromSharedMsg - - -sendSharedMsg : Shared.Msg.Msg -> Effect msg -sendSharedMsg sharedMsg = - SendSharedMsg sharedMsg diff --git a/src/Layouts/Global.elm b/src/Layouts/Global.elm deleted file mode 100644 index be8e800..0000000 --- a/src/Layouts/Global.elm +++ /dev/null @@ -1,179 +0,0 @@ -module Layouts.Global exposing (Model, Msg, Props, layout) - -import Css -import Effect exposing (Effect) -import Html.Styled as Html exposing (Html, a, div, img, nav, text) -import Html.Styled.Attributes as Attr exposing (css, href) -import Layout exposing (Layout) -import Redirects -import Route exposing (Route) -import Route.Path -import Shared -import Tailwind.Theme as Tw -import Tailwind.Utilities as Tw -import Theming -import View exposing (View) - - -type alias Props = - { activePage : Route.Path.Path } - - -layout : Props -> Shared.Model -> Route () -> Layout () Model Msg contentMsg -layout props _ _ = - Layout.new - { init = init - , update = update - , view = view props - , subscriptions = subscriptions - } - - - --- MODEL - - -type alias Model = - {} - - -init : () -> ( Model, Effect Msg ) -init _ = - ( {} - , Effect.none - ) - - - --- UPDATE - - -type Msg - = ReplaceMe - - -update : Msg -> Model -> ( Model, Effect Msg ) -update msg model = - case msg of - ReplaceMe -> - ( model - , Effect.none - ) - - -subscriptions : Model -> Sub Msg -subscriptions _ = - Sub.none - - - --- VIEW - - -view : Props -> { toContentMsg : Msg -> contentMsg, content : View contentMsg, model : Model } -> View contentMsg -view layoutProps { content } = - { title = content.title ++ " | Developer Den" - , body = - [ Html.div - [ Attr.class "page" - , Attr.css - [ Tw.min_h_screen - , Tw.w_full - , Tw.overflow_x_hidden - , Tw.bg_color Tw.dd_deepblue - , Tw.text_color Tw.white - , Tw.font_sans - , Tw.antialiased - , Tw.flex - , Tw.flex_col - ] - ] - [ viewNavbar layoutProps.activePage - , Html.div [ css [ Tw.flex_grow, Tw.flex, Tw.flex_col ] ] - content.body - ] - ] - } - - -viewNavbar : Route.Path.Path -> Html msg -viewNavbar activePage = - nav - [ css - [ Tw.flex - , Tw.justify_between - , Tw.items_center - , Tw.max_w_7xl - , Tw.mx_auto - , Tw.w_full - , Tw.px_8 - , Tw.py_6 - ] - ] - [ a - [ Route.Path.href Route.Path.Home_ |> Attr.fromUnstyled - , css [ Theming.headingFont, Tw.text_xl, Tw.font_bold, Tw.no_underline, Theming.textGradient ] - ] - [ img - [ Attr.src "/static/devden-logo.svg" - , Attr.alt "Developer Den Logo" - , css [ Tw.h_16, Tw.w_auto, Tw.block ] - ] - [] - ] - , div [ css [ Tw.flex, Tw.gap_8 ] ] - [ viewNavLink "home" Route.Path.Home_ (activePage == Route.Path.Home_) - , viewNavLink "rules" Route.Path.Rules (activePage == Route.Path.Rules) - , viewNavLink "learning" Route.Path.Learning (activePage == Route.Path.Learning) - , a - [ href Redirects.discordURL - , Attr.target "_blank" - , css - [ Theming.headingFont - , Tw.text_sm - , Tw.text_color Tw.slate_400 - , Css.hover [ Tw.text_color Tw.white ] - , Tw.transition_colors - , Tw.no_underline - ] - ] - [ text "discord" ] - ] - ] - - -viewNavLink : String -> Route.Path.Path -> Bool -> Html msg -viewNavLink label path isActive = - a - [ Route.Path.href path |> Attr.fromUnstyled - , css - [ Theming.headingFont - , Tw.pb_1 - , Tw.no_underline - , if isActive then - Tw.text_color Tw.white - - else - Tw.text_color Tw.slate_400 - , Css.hover [ Tw.text_color Tw.white ] - , Tw.transition_colors - , Tw.relative - ] - ] - [ text label - , if isActive then - div - [ css - [ Tw.absolute - , Tw.bottom_0 - , Tw.left_0 - , Tw.right_0 - , Tw.h_1 - , Theming.brandGradientBg - ] - ] - [] - - else - text "" - ] diff --git a/src/LearningResources.elm b/src/LearningResources.elm index 46c1e58..00cefc0 100644 --- a/src/LearningResources.elm +++ b/src/LearningResources.elm @@ -1,8 +1,25 @@ -module LearningResources exposing (getMetadata, getResourcesByTag) +module LearningResources exposing (fetchDatabase, getMetadata, getResourcesByTag) +import BackendTask exposing (BackendTask) +import BackendTask.Http +import FatalError exposing (FatalError) +import LearningResources.Json as Json import LearningResources.Types exposing (CompiledMeta, Database, EntityTag, Resource) +databaseUrl : String +databaseUrl = + "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@master/database.json" + + +{-| Fetched at build time, so every topic page is pre-rendered. +-} +fetchDatabase : BackendTask FatalError Database +fetchDatabase = + BackendTask.Http.getJson databaseUrl Json.decodeDatabase + |> BackendTask.allowFatal + + getResourcesByTag : EntityTag -> Database -> List Resource getResourcesByTag tag database = List.filter (\resource -> List.member tag resource.teaches) database.resources diff --git a/src/Shared.elm b/src/Shared.elm deleted file mode 100644 index c24c59f..0000000 --- a/src/Shared.elm +++ /dev/null @@ -1,80 +0,0 @@ -module Shared exposing - ( Flags, decoder - , Model, Msg - , init, update, subscriptions - ) - -{-| - -@docs Flags, decoder -@docs Model, Msg -@docs init, update, subscriptions - --} - -import Api -import Effect exposing (Effect) -import Json.Decode -import Route exposing (Route) -import Shared.Model -import Shared.Msg - - - --- FLAGS - - -type alias Flags = - {} - - -decoder : Json.Decode.Decoder Flags -decoder = - Json.Decode.succeed {} - - - --- INIT - - -type alias Model = - Shared.Model.Model - - -init : Result Json.Decode.Error Flags -> Route () -> ( Model, Effect Msg ) -init _ _ = - ( { learningDatabase = Shared.Model.Loading } - , Api.getLearningResourcesIndex - { onResponse = Shared.Msg.LearningIndexResponded } - ) - - - --- UPDATE - - -type alias Msg = - Shared.Msg.Msg - - -update : Route () -> Msg -> Model -> ( Model, Effect Msg ) -update _ msg model = - case msg of - Shared.Msg.LearningIndexResponded (Ok entries) -> - ( { model | learningDatabase = Shared.Model.Success entries } - , Effect.none - ) - - Shared.Msg.LearningIndexResponded (Err error) -> - ( { model | learningDatabase = Shared.Model.Failure error } - , Effect.none - ) - - - --- SUBSCRIPTIONS - - -subscriptions : Route () -> Model -> Sub Msg -subscriptions _ _ = - Sub.none diff --git a/src/Shared/Model.elm b/src/Shared/Model.elm deleted file mode 100644 index 717d782..0000000 --- a/src/Shared/Model.elm +++ /dev/null @@ -1,27 +0,0 @@ -module Shared.Model exposing - ( LearningDatabaseStatus(..) - , Model - ) - -{-| -} - -import Http -import LearningResources.Types as LearningResources - - -{-| Normally, this value would live in "Shared.elm" -but that would lead to a circular dependency import cycle. - -For that reason, both `Shared.Model` and `Shared.Msg` are in their -own file, so they can be imported by `Effect.elm` - --} -type LearningDatabaseStatus - = Loading - | Success LearningResources.Database - | Failure Http.Error - - -type alias Model = - { learningDatabase : LearningDatabaseStatus - } diff --git a/src/Shared/Msg.elm b/src/Shared/Msg.elm deleted file mode 100644 index d7841e8..0000000 --- a/src/Shared/Msg.elm +++ /dev/null @@ -1,17 +0,0 @@ -module Shared.Msg exposing (Msg(..)) - -{-| -} - -import Http -import LearningResources.Types as LearningResources - - -{-| Normally, this value would live in "Shared.elm" -but that would lead to a circular dependency import cycle. - -For that reason, both `Shared.Model` and `Shared.Msg` are in their -own file, so they can be imported by `Effect.elm` - --} -type Msg - = LearningIndexResponded (Result Http.Error LearningResources.Database) diff --git a/src/View.elm b/src/View.elm deleted file mode 100644 index e5fbb7b..0000000 --- a/src/View.elm +++ /dev/null @@ -1,72 +0,0 @@ -module View exposing - ( View, map - , none, fromString - , toBrowserDocument - ) - -{-| - -@docs View, map -@docs none, fromString -@docs toBrowserDocument - --} - -import Browser -import Html.Styled as Html exposing (Html, toUnstyled) -import Route exposing (Route) -import Shared.Model - - -type alias View msg = - { title : String - , body : List (Html msg) - } - - -{-| Used internally by Elm Land to create your application -so it works with Elm's expected `Browser.Document msg` type. --} -toBrowserDocument : - { shared : Shared.Model.Model - , route : Route () - , view : View msg - } - -> Browser.Document msg -toBrowserDocument { view } = - { title = view.title - , body = List.map toUnstyled view.body - } - - -{-| Used internally by Elm Land to connect your pages together. --} -map : (msg1 -> msg2) -> View msg1 -> View msg2 -map fn view = - { title = view.title - , body = List.map (Html.map fn) view.body - } - - -{-| Used internally by Elm Land whenever transitioning between -authenticated pages. --} -none : View msg -none = - { title = "" - , body = [] - } - - -{-| If you customize the `View` module, anytime you run `elm-land add page`, -the generated page will use this when adding your `view` function. - -That way your app will compile after adding new pages, and you can see -the new page working in the web browser! - --} -fromString : String -> View msg -fromString moduleName = - { title = moduleName - , body = [ Html.text moduleName ] - } diff --git a/tailwind.config.ts b/tailwind.config.ts index 4caa1db..d9ff9d7 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,6 +1,6 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - content: ["./src/**/*.elm"], + content: ["./src/**/*.elm", "./app/**/*.elm"], theme: { extend: { colors: { From ca2f95f597e15fb980cfb108144b5c89ea6bdf49 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sat, 17 Oct 2026 10:11:46 +0100 Subject: [PATCH 30/48] chore: remove `elm-land` junk --- .elm-land/server/index.html | 15 - .elm-land/server/main.js | 48 -- .elm-land/src/Auth.elm | 30 - .elm-land/src/Auth/Action.elm | 153 ----- .elm-land/src/Layout.elm | 194 ------ .elm-land/src/Layouts.elm | 14 - .elm-land/src/Main.elm | 846 --------------------------- .elm-land/src/Main/Layouts/Model.elm | 7 - .elm-land/src/Main/Layouts/Msg.elm | 7 - .elm-land/src/Main/Pages/Model.elm | 18 - .elm-land/src/Main/Pages/Msg.elm | 15 - .elm-land/src/Page.elm | 230 -------- .elm-land/src/Pages/NotFound_.elm | 69 --- .elm-land/src/Route.elm | 44 -- .elm-land/src/Route/Path.elm | 80 --- .elm-land/src/Route/Query.elm | 55 -- .elm-land/src/interop.js | 9 - .elm-land/src/interop.ts | 25 - .gitignore | 1 - 19 files changed, 1860 deletions(-) delete mode 100644 .elm-land/server/index.html delete mode 100644 .elm-land/server/main.js delete mode 100644 .elm-land/src/Auth.elm delete mode 100644 .elm-land/src/Auth/Action.elm delete mode 100644 .elm-land/src/Layout.elm delete mode 100644 .elm-land/src/Layouts.elm delete mode 100644 .elm-land/src/Main.elm delete mode 100644 .elm-land/src/Main/Layouts/Model.elm delete mode 100644 .elm-land/src/Main/Layouts/Msg.elm delete mode 100644 .elm-land/src/Main/Pages/Model.elm delete mode 100644 .elm-land/src/Main/Pages/Msg.elm delete mode 100644 .elm-land/src/Page.elm delete mode 100644 .elm-land/src/Pages/NotFound_.elm delete mode 100644 .elm-land/src/Route.elm delete mode 100644 .elm-land/src/Route/Path.elm delete mode 100644 .elm-land/src/Route/Query.elm delete mode 100644 .elm-land/src/interop.js delete mode 100644 .elm-land/src/interop.ts diff --git a/.elm-land/server/index.html b/.elm-land/server/index.html deleted file mode 100644 index 5c773e5..0000000 --- a/.elm-land/server/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - Elm Land - - - - - - - - - - - \ No newline at end of file diff --git a/.elm-land/server/main.js b/.elm-land/server/main.js deleted file mode 100644 index ed507f4..0000000 --- a/.elm-land/server/main.js +++ /dev/null @@ -1,48 +0,0 @@ -import Main from '../src/Main.elm' - -let startApp = async ({ Interop }) => { - // Grab environment variables, but remove the "ELM_LAND_" prefix - let env = Object.keys(import.meta.env).reduce((env, key) => { - if (key.startsWith('ELM_LAND_')) { - env[key.slice('ELM_LAND_'.length)] = import.meta.env[key] - } - return env - }, {}) - - let flags = undefined - - if (Interop.flags) { - flags = await Interop.flags({ env }) - } - - if (Main && Main.init) { - let app = Main.init({ - flags - }) - - if (Interop.onReady) { - Interop.onReady({ app, env }) - } - } - -} - - -const main = async () => { - try { - // Attempt to find "interop.ts" file - let interopFiles = import.meta.glob('../../src/interop.ts', { eager: true }) - await startApp({ Interop: interopFiles['../../src/interop.ts'] }) - } catch (_) { - try { - // Attempt to find "interop.js" file - let interopFiles = import.meta.glob('../../src/interop.js', { eager: true }) - await startApp({ Interop: interopFiles['../../src/interop.js'] }) - } catch (_) { - // Run application without an interop file - await startApp({ Interop: {} }) - } - } -} - -main() \ No newline at end of file diff --git a/.elm-land/src/Auth.elm b/.elm-land/src/Auth.elm deleted file mode 100644 index d9883ca..0000000 --- a/.elm-land/src/Auth.elm +++ /dev/null @@ -1,30 +0,0 @@ -module Auth exposing (User, onPageLoad, viewCustomPage) - -import Auth.Action -import Dict -import Route exposing (Route) -import Route.Path -import Shared -import View exposing (View) - - -type alias User = - {} - - -{-| Called before an auth-only page is loaded. --} -onPageLoad : Shared.Model -> Route () -> Auth.Action.Action User -onPageLoad shared route = - Auth.Action.pushRoute - { path = Route.Path.NotFound_ - , query = Dict.empty - , hash = Nothing - } - - -{-| Renders whenever `Auth.Action.loadCustomPage` is returned from `onPageLoad`. --} -viewCustomPage : Shared.Model -> Route () -> View Never -viewCustomPage shared route = - View.fromString "Loading..." diff --git a/.elm-land/src/Auth/Action.elm b/.elm-land/src/Auth/Action.elm deleted file mode 100644 index 597ed78..0000000 --- a/.elm-land/src/Auth/Action.elm +++ /dev/null @@ -1,153 +0,0 @@ -module Auth.Action exposing - ( Action(..) - , loadPageWithUser, loadCustomPage - , replaceRoute, pushRoute, loadExternalUrl - , view, subscriptions, command - ) - -{-| - -@docs Action -@docs loadPageWithUser, loadCustomPage -@docs replaceRoute, pushRoute, loadExternalUrl - -@docs view, subscriptions, command - --} - -import Browser.Navigation -import Dict exposing (Dict) -import Route.Path -import Shared -import Url exposing (Url) -import View exposing (View) - - -{-| Describes the action to take for authenticated pages, based -on the current `Route` and `Shared.Model` --} -type Action user - = LoadPageWithUser user - | LoadCustomPage - | ReplaceRoute - { path : Route.Path.Path - , query : Dict String String - , hash : Maybe String - } - | PushRoute - { path : Route.Path.Path - , query : Dict String String - , hash : Maybe String - } - | LoadExternalUrl String - - -{-| Successfully pass the user along to the authenticated page. --} -loadPageWithUser : user -> Action user -loadPageWithUser = - LoadPageWithUser - - -{-| Rather than navigating to a different route, keep the URL, but render -what was defined in `Auth.loadCustomPage`. - -**Note:** `Auth.loadCustomPage` has access to the `Shared.Model`, so you -can render different pages in different authentication scenarios. - --} -loadCustomPage : Action user -loadCustomPage = - LoadCustomPage - - -{-| Replace the URL with the provided route. --} -replaceRoute : - { path : Route.Path.Path - , query : Dict String String - , hash : Maybe String - } - -> Action user -replaceRoute = - ReplaceRoute - - -{-| Push a new URL with the provided route. --} -pushRoute : - { path : Route.Path.Path - , query : Dict String String - , hash : Maybe String - } - -> Action user -pushRoute = - PushRoute - - -{-| Navigate to a URL for an external website. --} -loadExternalUrl : String -> Action user -loadExternalUrl = - LoadExternalUrl - - - --- USED INTERNALLY BY ELM LAND - - -view : View msg -> (user -> View msg) -> Action user -> View msg -view viewCustomPage viewPageWithUser authAction = - case authAction of - LoadPageWithUser user -> - viewPageWithUser user - - LoadCustomPage -> - viewCustomPage - - ReplaceRoute _ -> - View.none - - PushRoute _ -> - View.none - - LoadExternalUrl _ -> - View.none - - -subscriptions : (user -> Sub msg) -> Action user -> Sub msg -subscriptions toSub authAction = - case authAction of - LoadPageWithUser user -> - toSub user - - LoadCustomPage -> - Sub.none - - ReplaceRoute _ -> - Sub.none - - PushRoute _ -> - Sub.none - - LoadExternalUrl _ -> - Sub.none - - -command : (user -> Cmd msg) -> Action user -> Cmd msg -command toCmd authAction = - case authAction of - LoadPageWithUser user -> - toCmd user - - LoadCustomPage -> - Cmd.none - - ReplaceRoute _ -> - Cmd.none - - PushRoute _ -> - Cmd.none - - LoadExternalUrl _ -> - Cmd.none diff --git a/.elm-land/src/Layout.elm b/.elm-land/src/Layout.elm deleted file mode 100644 index 25d4e9e..0000000 --- a/.elm-land/src/Layout.elm +++ /dev/null @@ -1,194 +0,0 @@ -module Layout exposing - ( Layout, new - , withParentProps - , withOnUrlChanged, withOnQueryParameterChanged, withOnHashChanged - , init, update, view, subscriptions - , parentProps, toUrlMessages - ) - -{-| - -@docs Layout, new -@docs withParentProps -@docs withOnUrlChanged, withOnQueryParameterChanged, withOnHashChanged - -@docs init, update, view, subscriptions -@docs parentProps, toUrlMessages - --} - -import Dict exposing (Dict) -import Effect exposing (Effect) -import Route exposing (Route) -import View exposing (View) - - -type Layout parentProps model msg contentMsg - = Layout - { init : () -> ( model, Effect msg ) - , update : msg -> model -> ( model, Effect msg ) - , subscriptions : model -> Sub msg - , view : { model : model, toContentMsg : msg -> contentMsg, content : View contentMsg } -> View contentMsg - , parentProps : parentProps - , onUrlChanged : Maybe ({ from : Route (), to : Route () } -> msg) - , onHashChanged : Maybe ({ from : Maybe String, to : Maybe String } -> msg) - , onQueryParameterChangedDict : Dict String ({ from : Maybe String, to : Maybe String } -> msg) - } - - -new : - { init : () -> ( model, Effect msg ) - , update : msg -> model -> ( model, Effect msg ) - , subscriptions : model -> Sub msg - , view : { model : model, toContentMsg : msg -> contentMsg, content : View contentMsg } -> View contentMsg - } - -> Layout () model msg contentMsg -new options = - Layout - { init = options.init - , update = options.update - , subscriptions = options.subscriptions - , view = options.view - , parentProps = () - , onUrlChanged = Nothing - , onHashChanged = Nothing - , onQueryParameterChangedDict = Dict.empty - } - - -withParentProps : - parentProps - -> Layout () model msg contentMsg - -> Layout parentProps model msg contentMsg -withParentProps props (Layout layout) = - Layout - { init = layout.init - , update = layout.update - , subscriptions = layout.subscriptions - , view = layout.view - , parentProps = props - , onUrlChanged = layout.onUrlChanged - , onHashChanged = layout.onHashChanged - , onQueryParameterChangedDict = layout.onQueryParameterChangedDict - } - - - --- URL CHANGES - - -withOnUrlChanged : - ({ from : Route () - , to : Route () - } - -> msg - ) - -> Layout parentProps model msg contentMsg - -> Layout parentProps model msg contentMsg -withOnUrlChanged onChange (Layout layout) = - Layout { layout | onUrlChanged = Just onChange } - - -withOnHashChanged : - ({ from : Maybe String - , to : Maybe String - } - -> msg - ) - -> Layout parentProps model msg contentMsg - -> Layout parentProps model msg contentMsg -withOnHashChanged onChange (Layout layout) = - Layout { layout | onHashChanged = Just onChange } - - -withOnQueryParameterChanged : - { key : String - , onChange : - { from : Maybe String - , to : Maybe String - } - -> msg - } - -> Layout parentProps model msg contentMsg - -> Layout parentProps model msg contentMsg -withOnQueryParameterChanged { key, onChange } (Layout layout) = - Layout { layout | onQueryParameterChangedDict = Dict.insert key onChange layout.onQueryParameterChangedDict } - - -init : Layout parentProps model msg contentMsg -> () -> ( model, Effect msg ) -init (Layout layout) = - layout.init - - -update : Layout parentProps model msg contentMsg -> msg -> model -> ( model, Effect msg ) -update (Layout layout) = - layout.update - - -view : - Layout parentProps model msg contentMsg - -> { model : model, toContentMsg : msg -> contentMsg, content : View contentMsg } - -> View contentMsg -view (Layout layout) = - layout.view - - -subscriptions : Layout parentProps model msg contentMsg -> model -> Sub msg -subscriptions (Layout layout) = - layout.subscriptions - - -parentProps : Layout parentProps model msg contentMsg -> parentProps -parentProps (Layout layout) = - layout.parentProps - - -toUrlMessages : - { from : Route (), to : Route () } - -> Layout parentProps model msg contentMsg - -> List msg -toUrlMessages routes (Layout layout) = - List.concat - [ case layout.onUrlChanged of - Just onUrlChanged -> - [ onUrlChanged routes ] - - Nothing -> - [] - , case layout.onHashChanged of - Just onHashChanged -> - if routes.from.hash == routes.to.hash then - [] - - else - [ onHashChanged - { from = routes.from.hash - , to = routes.to.hash - } - ] - - Nothing -> - [] - , let - toQueryParameterMessage : - ( String - , { from : Maybe String, to : Maybe String } -> msg - ) - -> Maybe msg - toQueryParameterMessage ( key, onChange ) = - let - from = - Dict.get key routes.from.query - - to = - Dict.get key routes.to.query - in - if from == to then - Nothing - - else - Just (onChange { from = from, to = to }) - in - Dict.toList layout.onQueryParameterChangedDict - |> List.filterMap toQueryParameterMessage - ] diff --git a/.elm-land/src/Layouts.elm b/.elm-land/src/Layouts.elm deleted file mode 100644 index f2d9da7..0000000 --- a/.elm-land/src/Layouts.elm +++ /dev/null @@ -1,14 +0,0 @@ -module Layouts exposing (..) - -import Layouts.Global - - -type Layout msg - = Global Layouts.Global.Props - - -map : (msg1 -> msg2) -> Layout msg1 -> Layout msg2 -map fn layout = - case layout of - Global data -> - Global data diff --git a/.elm-land/src/Main.elm b/.elm-land/src/Main.elm deleted file mode 100644 index 7afbfc3..0000000 --- a/.elm-land/src/Main.elm +++ /dev/null @@ -1,846 +0,0 @@ -module Main exposing (..) - -import Auth -import Auth.Action -import Browser -import Browser.Navigation -import Effect exposing (Effect) -import Html exposing (Html) -import Json.Decode -import Layout -import Layouts -import Layouts.Global -import Main.Layouts.Model -import Main.Layouts.Msg -import Main.Pages.Model -import Main.Pages.Msg -import Page -import Pages.Home_ -import Pages.Learning -import Pages.Learning.Resource_ -import Pages.Rules -import Pages.NotFound_ -import Pages.NotFound_ -import Route exposing (Route) -import Route.Path -import Shared -import Task -import Url exposing (Url) -import View exposing (View) - - -main : Program Json.Decode.Value Model Msg -main = - Browser.application - { init = init - , update = update - , view = view - , subscriptions = subscriptions - , onUrlChange = UrlChanged - , onUrlRequest = UrlRequested - } - - - --- INIT - - -type alias Model = - { key : Browser.Navigation.Key - , url : Url - , page : Main.Pages.Model.Model - , layout : Maybe Main.Layouts.Model.Model - , shared : Shared.Model - } - - -init : Json.Decode.Value -> Url -> Browser.Navigation.Key -> ( Model, Cmd Msg ) -init json url key = - let - flagsResult : Result Json.Decode.Error Shared.Flags - flagsResult = - Json.Decode.decodeValue Shared.decoder json - - ( sharedModel, sharedEffect ) = - Shared.init flagsResult (Route.fromUrl () url) - - { page, layout } = - initPageAndLayout { key = key, url = url, shared = sharedModel, layout = Nothing } - in - ( { url = url - , key = key - , page = Tuple.first page - , layout = layout |> Maybe.map Tuple.first - , shared = sharedModel - } - , Cmd.batch - [ Tuple.second page - , layout |> Maybe.map Tuple.second |> Maybe.withDefault Cmd.none - , fromSharedEffect { key = key, url = url, shared = sharedModel } sharedEffect - ] - ) - - -initLayout : { key : Browser.Navigation.Key, url : Url, shared : Shared.Model, layout : Maybe Main.Layouts.Model.Model } -> Layouts.Layout Msg -> ( Main.Layouts.Model.Model, Cmd Msg ) -initLayout model layout = - case ( layout, model.layout ) of - ( Layouts.Global props, Just (Main.Layouts.Model.Global existing) ) -> - ( Main.Layouts.Model.Global existing - , Cmd.none - ) - - ( Layouts.Global props, _ ) -> - let - route : Route () - route = - Route.fromUrl () model.url - - globalLayout = - Layouts.Global.layout props model.shared route - - ( globalLayoutModel, globalLayoutEffect ) = - Layout.init globalLayout () - in - ( Main.Layouts.Model.Global { global = globalLayoutModel } - , fromLayoutEffect model (Effect.map Main.Layouts.Msg.Global globalLayoutEffect) - ) - - -initPageAndLayout : { key : Browser.Navigation.Key, url : Url, shared : Shared.Model, layout : Maybe Main.Layouts.Model.Model } -> { page : ( Main.Pages.Model.Model, Cmd Msg ), layout : Maybe ( Main.Layouts.Model.Model, Cmd Msg ) } -initPageAndLayout model = - case Route.Path.fromUrl model.url of - Route.Path.Home_ -> - let - page : Page.Page Pages.Home_.Model Pages.Home_.Msg - page = - Pages.Home_.page model.shared (Route.fromUrl () model.url) - - ( pageModel, pageEffect ) = - Page.init page () - in - { page = - Tuple.mapBoth - Main.Pages.Model.Home_ - (Effect.map Main.Pages.Msg.Home_ >> fromPageEffect model) - ( pageModel, pageEffect ) - , layout = - Page.layout pageModel page - |> Maybe.map (Layouts.map (Main.Pages.Msg.Home_ >> Page)) - |> Maybe.map (initLayout model) - } - - Route.Path.Learning -> - let - page : Page.Page Pages.Learning.Model Pages.Learning.Msg - page = - Pages.Learning.page model.shared (Route.fromUrl () model.url) - - ( pageModel, pageEffect ) = - Page.init page () - in - { page = - Tuple.mapBoth - Main.Pages.Model.Learning - (Effect.map Main.Pages.Msg.Learning >> fromPageEffect model) - ( pageModel, pageEffect ) - , layout = - Page.layout pageModel page - |> Maybe.map (Layouts.map (Main.Pages.Msg.Learning >> Page)) - |> Maybe.map (initLayout model) - } - - Route.Path.Learning_Resource_ params -> - let - page : Page.Page Pages.Learning.Resource_.Model Pages.Learning.Resource_.Msg - page = - Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url) - - ( pageModel, pageEffect ) = - Page.init page () - in - { page = - Tuple.mapBoth - (Main.Pages.Model.Learning_Resource_ params) - (Effect.map Main.Pages.Msg.Learning_Resource_ >> fromPageEffect model) - ( pageModel, pageEffect ) - , layout = - Page.layout pageModel page - |> Maybe.map (Layouts.map (Main.Pages.Msg.Learning_Resource_ >> Page)) - |> Maybe.map (initLayout model) - } - - Route.Path.Rules -> - let - page : Page.Page Pages.Rules.Model Pages.Rules.Msg - page = - Pages.Rules.page model.shared (Route.fromUrl () model.url) - - ( pageModel, pageEffect ) = - Page.init page () - in - { page = - Tuple.mapBoth - Main.Pages.Model.Rules - (Effect.map Main.Pages.Msg.Rules >> fromPageEffect model) - ( pageModel, pageEffect ) - , layout = - Page.layout pageModel page - |> Maybe.map (Layouts.map (Main.Pages.Msg.Rules >> Page)) - |> Maybe.map (initLayout model) - } - - Route.Path.NotFound_ -> - let - page : Page.Page Pages.NotFound_.Model Pages.NotFound_.Msg - page = - Pages.NotFound_.page model.shared (Route.fromUrl () model.url) - - ( pageModel, pageEffect ) = - Page.init page () - in - { page = - Tuple.mapBoth - Main.Pages.Model.NotFound_ - (Effect.map Main.Pages.Msg.NotFound_ >> fromPageEffect model) - ( pageModel, pageEffect ) - , layout = - Page.layout pageModel page - |> Maybe.map (Layouts.map (Main.Pages.Msg.NotFound_ >> Page)) - |> Maybe.map (initLayout model) - } - - -runWhenAuthenticated : { model | shared : Shared.Model, url : Url, key : Browser.Navigation.Key } -> (Auth.User -> ( Main.Pages.Model.Model, Cmd Msg )) -> ( Main.Pages.Model.Model, Cmd Msg ) -runWhenAuthenticated model toTuple = - let - record = - runWhenAuthenticatedWithLayout model (\user -> { page = toTuple user, layout = Nothing }) - in - record.page - - -runWhenAuthenticatedWithLayout : { model | shared : Shared.Model, url : Url, key : Browser.Navigation.Key } -> (Auth.User -> { page : ( Main.Pages.Model.Model, Cmd Msg ), layout : Maybe ( Main.Layouts.Model.Model, Cmd Msg ) }) -> { page : ( Main.Pages.Model.Model, Cmd Msg ), layout : Maybe ( Main.Layouts.Model.Model, Cmd Msg ) } -runWhenAuthenticatedWithLayout model toRecord = - let - authAction : Auth.Action.Action Auth.User - authAction = - Auth.onPageLoad model.shared (Route.fromUrl () model.url) - - toCmd : Effect Msg -> Cmd Msg - toCmd = - Effect.toCmd - { key = model.key - , url = model.url - , shared = model.shared - , fromSharedMsg = Shared - , batch = Batch - , toCmd = Task.succeed >> Task.perform identity - } - in - case authAction of - Auth.Action.LoadPageWithUser user -> - toRecord user - - Auth.Action.LoadCustomPage -> - { page = - ( Main.Pages.Model.Loading_ - , Cmd.none - ) - , layout = Nothing - } - - Auth.Action.ReplaceRoute options -> - { page = - ( Main.Pages.Model.Redirecting_ - , toCmd (Effect.replaceRoute options) - ) - , layout = Nothing - } - - Auth.Action.PushRoute options -> - { page = - ( Main.Pages.Model.Redirecting_ - , toCmd (Effect.pushRoute options) - ) - , layout = Nothing - } - - Auth.Action.LoadExternalUrl externalUrl -> - { page = - ( Main.Pages.Model.Redirecting_ - , Browser.Navigation.load externalUrl - ) - , layout = Nothing - } - - - --- UPDATE - - -type Msg - = UrlRequested Browser.UrlRequest - | UrlChanged Url - | Page Main.Pages.Msg.Msg - | Layout Main.Layouts.Msg.Msg - | Shared Shared.Msg - | Batch (List Msg) - - -update : Msg -> Model -> ( Model, Cmd Msg ) -update msg model = - case msg of - UrlRequested (Browser.Internal url) -> - ( model - , Browser.Navigation.pushUrl model.key (Url.toString url) - ) - - UrlRequested (Browser.External url) -> - if String.isEmpty (String.trim url) then - ( model, Cmd.none ) - - else - ( model - , Browser.Navigation.load url - ) - - UrlChanged url -> - if Route.Path.fromUrl url == Route.Path.fromUrl model.url then - let - newModel : Model - newModel = - { model | url = url } - in - ( newModel - , Cmd.batch - [ toPageUrlHookCmd newModel - { from = Route.fromUrl () model.url - , to = Route.fromUrl () newModel.url - } - , toLayoutUrlHookCmd model newModel - { from = Route.fromUrl () model.url - , to = Route.fromUrl () newModel.url - } - ] - ) - - else - let - { page, layout } = - initPageAndLayout { key = model.key, shared = model.shared, layout = model.layout, url = url } - - ( pageModel, pageCmd ) = - page - - ( layoutModel, layoutCmd ) = - case layout of - Just ( layoutModel_, layoutCmd_ ) -> - ( Just layoutModel_, layoutCmd_ ) - - Nothing -> - ( Nothing, Cmd.none ) - - newModel = - { model | url = url, page = pageModel, layout = layoutModel } - in - ( newModel - , Cmd.batch - [ pageCmd - , layoutCmd - , toLayoutUrlHookCmd model newModel - { from = Route.fromUrl () model.url - , to = Route.fromUrl () newModel.url - } - ] - ) - - Page pageMsg -> - let - ( pageModel, pageCmd ) = - updateFromPage pageMsg model - in - ( { model | page = pageModel } - , pageCmd - ) - - Layout layoutMsg -> - let - ( layoutModel, layoutCmd ) = - updateFromLayout layoutMsg model - in - ( { model | layout = layoutModel } - , layoutCmd - ) - - Shared sharedMsg -> - let - ( sharedModel, sharedEffect ) = - Shared.update (Route.fromUrl () model.url) sharedMsg model.shared - - ( oldAction, newAction ) = - ( Auth.onPageLoad model.shared (Route.fromUrl () model.url) - , Auth.onPageLoad sharedModel (Route.fromUrl () model.url) - ) - in - if isAuthProtected (Route.fromUrl () model.url).path && (hasActionTypeChanged oldAction newAction) then - let - { layout, page } = - initPageAndLayout { key = model.key, shared = sharedModel, url = model.url, layout = model.layout } - - ( pageModel, pageCmd ) = - page - - ( layoutModel, layoutCmd ) = - ( layout |> Maybe.map Tuple.first - , layout |> Maybe.map Tuple.second |> Maybe.withDefault Cmd.none - ) - in - ( { model | shared = sharedModel, page = pageModel, layout = layoutModel } - , Cmd.batch - [ pageCmd - , layoutCmd - , fromSharedEffect { model | shared = sharedModel } sharedEffect - ] - ) - - else - ( { model | shared = sharedModel } - , fromSharedEffect { model | shared = sharedModel } sharedEffect - ) - - Batch messages -> - ( model - , messages - |> List.map (Task.succeed >> Task.perform identity) - |> Cmd.batch - ) - - -updateFromPage : Main.Pages.Msg.Msg -> Model -> ( Main.Pages.Model.Model, Cmd Msg ) -updateFromPage msg model = - case ( msg, model.page ) of - ( Main.Pages.Msg.Home_ pageMsg, Main.Pages.Model.Home_ pageModel ) -> - Tuple.mapBoth - Main.Pages.Model.Home_ - (Effect.map Main.Pages.Msg.Home_ >> fromPageEffect model) - (Page.update (Pages.Home_.page model.shared (Route.fromUrl () model.url)) pageMsg pageModel) - - ( Main.Pages.Msg.Learning pageMsg, Main.Pages.Model.Learning pageModel ) -> - Tuple.mapBoth - Main.Pages.Model.Learning - (Effect.map Main.Pages.Msg.Learning >> fromPageEffect model) - (Page.update (Pages.Learning.page model.shared (Route.fromUrl () model.url)) pageMsg pageModel) - - ( Main.Pages.Msg.Learning_Resource_ pageMsg, Main.Pages.Model.Learning_Resource_ params pageModel ) -> - Tuple.mapBoth - (Main.Pages.Model.Learning_Resource_ params) - (Effect.map Main.Pages.Msg.Learning_Resource_ >> fromPageEffect model) - (Page.update (Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url)) pageMsg pageModel) - - ( Main.Pages.Msg.Rules pageMsg, Main.Pages.Model.Rules pageModel ) -> - Tuple.mapBoth - Main.Pages.Model.Rules - (Effect.map Main.Pages.Msg.Rules >> fromPageEffect model) - (Page.update (Pages.Rules.page model.shared (Route.fromUrl () model.url)) pageMsg pageModel) - - ( Main.Pages.Msg.NotFound_ pageMsg, Main.Pages.Model.NotFound_ pageModel ) -> - Tuple.mapBoth - Main.Pages.Model.NotFound_ - (Effect.map Main.Pages.Msg.NotFound_ >> fromPageEffect model) - (Page.update (Pages.NotFound_.page model.shared (Route.fromUrl () model.url)) pageMsg pageModel) - - _ -> - ( model.page - , Cmd.none - ) - - -updateFromLayout : Main.Layouts.Msg.Msg -> Model -> ( Maybe Main.Layouts.Model.Model, Cmd Msg ) -updateFromLayout msg model = - let - route : Route () - route = - Route.fromUrl () model.url - in - case ( toLayoutFromPage model, model.layout, msg ) of - ( Just (Layouts.Global props), Just (Main.Layouts.Model.Global layoutModel), Main.Layouts.Msg.Global layoutMsg ) -> - Tuple.mapBoth - (\newModel -> Just (Main.Layouts.Model.Global { layoutModel | global = newModel })) - (Effect.map Main.Layouts.Msg.Global >> fromLayoutEffect model) - (Layout.update (Layouts.Global.layout props model.shared route) layoutMsg layoutModel.global) - - _ -> - ( model.layout - , Cmd.none - ) - - -toLayoutFromPage : Model -> Maybe (Layouts.Layout Msg) -toLayoutFromPage model = - case model.page of - Main.Pages.Model.Home_ pageModel -> - Route.fromUrl () model.url - |> Pages.Home_.page model.shared - |> Page.layout pageModel - |> Maybe.map (Layouts.map (Main.Pages.Msg.Home_ >> Page)) - - Main.Pages.Model.Learning pageModel -> - Route.fromUrl () model.url - |> Pages.Learning.page model.shared - |> Page.layout pageModel - |> Maybe.map (Layouts.map (Main.Pages.Msg.Learning >> Page)) - - Main.Pages.Model.Learning_Resource_ params pageModel -> - Route.fromUrl params model.url - |> Pages.Learning.Resource_.page model.shared - |> Page.layout pageModel - |> Maybe.map (Layouts.map (Main.Pages.Msg.Learning_Resource_ >> Page)) - - Main.Pages.Model.Rules pageModel -> - Route.fromUrl () model.url - |> Pages.Rules.page model.shared - |> Page.layout pageModel - |> Maybe.map (Layouts.map (Main.Pages.Msg.Rules >> Page)) - - Main.Pages.Model.NotFound_ pageModel -> - Route.fromUrl () model.url - |> Pages.NotFound_.page model.shared - |> Page.layout pageModel - |> Maybe.map (Layouts.map (Main.Pages.Msg.NotFound_ >> Page)) - - Main.Pages.Model.Redirecting_ -> - Nothing - - Main.Pages.Model.Loading_ -> - Nothing - - -toAuthProtectedPage : Model -> (Auth.User -> Shared.Model -> Route params -> Page.Page model msg) -> Route params -> Maybe (Page.Page model msg) -toAuthProtectedPage model toPage route = - case Auth.onPageLoad model.shared (Route.fromUrl () model.url) of - Auth.Action.LoadPageWithUser user -> - Just (toPage user model.shared route) - - _ -> - Nothing - - -hasActionTypeChanged : Auth.Action.Action user -> Auth.Action.Action user -> Bool -hasActionTypeChanged oldAction newAction = - case ( newAction, oldAction ) of - ( Auth.Action.LoadPageWithUser _, Auth.Action.LoadPageWithUser _ ) -> - False - - ( Auth.Action.LoadCustomPage, Auth.Action.LoadCustomPage ) -> - False - - ( Auth.Action.ReplaceRoute _, Auth.Action.ReplaceRoute _ ) -> - False - - ( Auth.Action.PushRoute _, Auth.Action.PushRoute _ ) -> - False - - ( Auth.Action.LoadExternalUrl _, Auth.Action.LoadExternalUrl _ ) -> - False - - ( _, _ ) -> - True - - -subscriptions : Model -> Sub Msg -subscriptions model = - let - subscriptionsFromPage : Sub Msg - subscriptionsFromPage = - case model.page of - Main.Pages.Model.Home_ pageModel -> - Page.subscriptions (Pages.Home_.page model.shared (Route.fromUrl () model.url)) pageModel - |> Sub.map Main.Pages.Msg.Home_ - |> Sub.map Page - - Main.Pages.Model.Learning pageModel -> - Page.subscriptions (Pages.Learning.page model.shared (Route.fromUrl () model.url)) pageModel - |> Sub.map Main.Pages.Msg.Learning - |> Sub.map Page - - Main.Pages.Model.Learning_Resource_ params pageModel -> - Page.subscriptions (Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url)) pageModel - |> Sub.map Main.Pages.Msg.Learning_Resource_ - |> Sub.map Page - - Main.Pages.Model.Rules pageModel -> - Page.subscriptions (Pages.Rules.page model.shared (Route.fromUrl () model.url)) pageModel - |> Sub.map Main.Pages.Msg.Rules - |> Sub.map Page - - Main.Pages.Model.NotFound_ pageModel -> - Page.subscriptions (Pages.NotFound_.page model.shared (Route.fromUrl () model.url)) pageModel - |> Sub.map Main.Pages.Msg.NotFound_ - |> Sub.map Page - - Main.Pages.Model.Redirecting_ -> - Sub.none - - Main.Pages.Model.Loading_ -> - Sub.none - - maybeLayout : Maybe (Layouts.Layout Msg) - maybeLayout = - toLayoutFromPage model - - route : Route () - route = - Route.fromUrl () model.url - - subscriptionsFromLayout : Sub Msg - subscriptionsFromLayout = - case ( maybeLayout, model.layout ) of - ( Just (Layouts.Global props), Just (Main.Layouts.Model.Global layoutModel) ) -> - Layout.subscriptions (Layouts.Global.layout props model.shared route) layoutModel.global - |> Sub.map Main.Layouts.Msg.Global - |> Sub.map Layout - - _ -> - Sub.none - in - Sub.batch - [ Shared.subscriptions route model.shared - |> Sub.map Shared - , subscriptionsFromPage - , subscriptionsFromLayout - ] - - - --- VIEW - - -view : Model -> Browser.Document Msg -view model = - let - view_ : View Msg - view_ = - toView model - in - View.toBrowserDocument - { shared = model.shared - , route = Route.fromUrl () model.url - , view = view_ - } - - -toView : Model -> View Msg -toView model = - let - route : Route () - route = - Route.fromUrl () model.url - in - case ( toLayoutFromPage model, model.layout ) of - ( Just (Layouts.Global props), Just (Main.Layouts.Model.Global layoutModel) ) -> - Layout.view - (Layouts.Global.layout props model.shared route) - { model = layoutModel.global - , toContentMsg = Main.Layouts.Msg.Global >> Layout - , content = viewPage model - } - - _ -> - viewPage model - - -viewPage : Model -> View Msg -viewPage model = - case model.page of - Main.Pages.Model.Home_ pageModel -> - Page.view (Pages.Home_.page model.shared (Route.fromUrl () model.url)) pageModel - |> View.map Main.Pages.Msg.Home_ - |> View.map Page - - Main.Pages.Model.Learning pageModel -> - Page.view (Pages.Learning.page model.shared (Route.fromUrl () model.url)) pageModel - |> View.map Main.Pages.Msg.Learning - |> View.map Page - - Main.Pages.Model.Learning_Resource_ params pageModel -> - Page.view (Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url)) pageModel - |> View.map Main.Pages.Msg.Learning_Resource_ - |> View.map Page - - Main.Pages.Model.Rules pageModel -> - Page.view (Pages.Rules.page model.shared (Route.fromUrl () model.url)) pageModel - |> View.map Main.Pages.Msg.Rules - |> View.map Page - - Main.Pages.Model.NotFound_ pageModel -> - Page.view (Pages.NotFound_.page model.shared (Route.fromUrl () model.url)) pageModel - |> View.map Main.Pages.Msg.NotFound_ - |> View.map Page - - Main.Pages.Model.Redirecting_ -> - View.none - - Main.Pages.Model.Loading_ -> - Auth.viewCustomPage model.shared (Route.fromUrl () model.url) - |> View.map never - - - --- INTERNALS - - -fromPageEffect : { model | key : Browser.Navigation.Key, url : Url, shared : Shared.Model } -> Effect Main.Pages.Msg.Msg -> Cmd Msg -fromPageEffect model effect = - Effect.toCmd - { key = model.key - , url = model.url - , shared = model.shared - , fromSharedMsg = Shared - , batch = Batch - , toCmd = Task.succeed >> Task.perform identity - } - (Effect.map Page effect) - - -fromLayoutEffect : { model | key : Browser.Navigation.Key, url : Url, shared : Shared.Model } -> Effect Main.Layouts.Msg.Msg -> Cmd Msg -fromLayoutEffect model effect = - Effect.toCmd - { key = model.key - , url = model.url - , shared = model.shared - , fromSharedMsg = Shared - , batch = Batch - , toCmd = Task.succeed >> Task.perform identity - } - (Effect.map Layout effect) - - -fromSharedEffect : { model | key : Browser.Navigation.Key, url : Url, shared : Shared.Model } -> Effect Shared.Msg -> Cmd Msg -fromSharedEffect model effect = - Effect.toCmd - { key = model.key - , url = model.url - , shared = model.shared - , fromSharedMsg = Shared - , batch = Batch - , toCmd = Task.succeed >> Task.perform identity - } - (Effect.map Shared effect) - - - --- URL HOOKS FOR PAGES - - -toPageUrlHookCmd : Model -> { from : Route (), to : Route () } -> Cmd Msg -toPageUrlHookCmd model routes = - let - toCommands messages = - messages - |> List.map (Task.succeed >> Task.perform identity) - |> Cmd.batch - in - case model.page of - Main.Pages.Model.Home_ pageModel -> - Page.toUrlMessages routes (Pages.Home_.page model.shared (Route.fromUrl () model.url)) - |> List.map Main.Pages.Msg.Home_ - |> List.map Page - |> toCommands - - Main.Pages.Model.Learning pageModel -> - Page.toUrlMessages routes (Pages.Learning.page model.shared (Route.fromUrl () model.url)) - |> List.map Main.Pages.Msg.Learning - |> List.map Page - |> toCommands - - Main.Pages.Model.Learning_Resource_ params pageModel -> - Page.toUrlMessages routes (Pages.Learning.Resource_.page model.shared (Route.fromUrl params model.url)) - |> List.map Main.Pages.Msg.Learning_Resource_ - |> List.map Page - |> toCommands - - Main.Pages.Model.Rules pageModel -> - Page.toUrlMessages routes (Pages.Rules.page model.shared (Route.fromUrl () model.url)) - |> List.map Main.Pages.Msg.Rules - |> List.map Page - |> toCommands - - Main.Pages.Model.NotFound_ pageModel -> - Page.toUrlMessages routes (Pages.NotFound_.page model.shared (Route.fromUrl () model.url)) - |> List.map Main.Pages.Msg.NotFound_ - |> List.map Page - |> toCommands - - Main.Pages.Model.Redirecting_ -> - Cmd.none - - Main.Pages.Model.Loading_ -> - Cmd.none - - -toLayoutUrlHookCmd : Model -> Model -> { from : Route (), to : Route () } -> Cmd Msg -toLayoutUrlHookCmd oldModel model routes = - let - toCommands messages = - if shouldFireUrlChangedEvents then - messages - |> List.map (Task.succeed >> Task.perform identity) - |> Cmd.batch - - else - Cmd.none - - shouldFireUrlChangedEvents = - hasNavigatedWithinNewLayout - { from = toLayoutFromPage oldModel - , to = toLayoutFromPage model - } - - route = - Route.fromUrl () model.url - in - case ( toLayoutFromPage model, model.layout ) of - ( Just (Layouts.Global props), Just (Main.Layouts.Model.Global layoutModel) ) -> - Layout.toUrlMessages routes (Layouts.Global.layout props model.shared route) - |> List.map Main.Layouts.Msg.Global - |> List.map Layout - |> toCommands - - _ -> - Cmd.none - - -hasNavigatedWithinNewLayout : { from : Maybe (Layouts.Layout msg), to : Maybe (Layouts.Layout msg) } -> Bool -hasNavigatedWithinNewLayout { from, to } = - let - isRelated maybePair = - case maybePair of - Just ( Layouts.Global _, Layouts.Global _ ) -> - True - - _ -> - False - in - List.any isRelated - [ Maybe.map2 Tuple.pair from to - , Maybe.map2 Tuple.pair to from - ] - - -isAuthProtected : Route.Path.Path -> Bool -isAuthProtected routePath = - case routePath of - Route.Path.Home_ -> - False - - Route.Path.Learning -> - False - - Route.Path.Learning_Resource_ _ -> - False - - Route.Path.Rules -> - False - - Route.Path.NotFound_ -> - False diff --git a/.elm-land/src/Main/Layouts/Model.elm b/.elm-land/src/Main/Layouts/Model.elm deleted file mode 100644 index ae70763..0000000 --- a/.elm-land/src/Main/Layouts/Model.elm +++ /dev/null @@ -1,7 +0,0 @@ -module Main.Layouts.Model exposing (..) - -import Layouts.Global - - -type Model - = Global { global : Layouts.Global.Model } diff --git a/.elm-land/src/Main/Layouts/Msg.elm b/.elm-land/src/Main/Layouts/Msg.elm deleted file mode 100644 index dd3c3a0..0000000 --- a/.elm-land/src/Main/Layouts/Msg.elm +++ /dev/null @@ -1,7 +0,0 @@ -module Main.Layouts.Msg exposing (..) - -import Layouts.Global - - -type Msg - = Global Layouts.Global.Msg diff --git a/.elm-land/src/Main/Pages/Model.elm b/.elm-land/src/Main/Pages/Model.elm deleted file mode 100644 index 85b37ea..0000000 --- a/.elm-land/src/Main/Pages/Model.elm +++ /dev/null @@ -1,18 +0,0 @@ -module Main.Pages.Model exposing (Model(..)) - -import Pages.Home_ -import Pages.Learning -import Pages.Learning.Resource_ -import Pages.Rules -import Pages.NotFound_ -import View exposing (View) - - -type Model - = Home_ Pages.Home_.Model - | Learning Pages.Learning.Model - | Learning_Resource_ { resource : String } Pages.Learning.Resource_.Model - | Rules Pages.Rules.Model - | NotFound_ Pages.NotFound_.Model - | Redirecting_ - | Loading_ diff --git a/.elm-land/src/Main/Pages/Msg.elm b/.elm-land/src/Main/Pages/Msg.elm deleted file mode 100644 index d233f40..0000000 --- a/.elm-land/src/Main/Pages/Msg.elm +++ /dev/null @@ -1,15 +0,0 @@ -module Main.Pages.Msg exposing (Msg(..)) - -import Pages.Home_ -import Pages.Learning -import Pages.Learning.Resource_ -import Pages.Rules -import Pages.NotFound_ - - -type Msg - = Home_ Pages.Home_.Msg - | Learning Pages.Learning.Msg - | Learning_Resource_ Pages.Learning.Resource_.Msg - | Rules Pages.Rules.Msg - | NotFound_ Pages.NotFound_.Msg diff --git a/.elm-land/src/Page.elm b/.elm-land/src/Page.elm deleted file mode 100644 index f1df9b2..0000000 --- a/.elm-land/src/Page.elm +++ /dev/null @@ -1,230 +0,0 @@ -module Page exposing - ( Page, new - , sandbox, element - , withLayout - , withOnUrlChanged, withOnQueryParameterChanged, withOnHashChanged - , init, update, view, subscriptions, layout, toUrlMessages - ) - -{-| - -@docs Page, new -@docs sandbox, element -@docs withLayout -@docs withOnUrlChanged, withOnQueryParameterChanged, withOnHashChanged - -@docs init, update, view, subscriptions, layout, toUrlMessages - --} - -import Dict exposing (Dict) -import Effect exposing (Effect) -import Layouts exposing (Layout) -import Route exposing (Route) -import View exposing (View) - - -type Page model msg - = Page - { init : () -> ( model, Effect msg ) - , update : msg -> model -> ( model, Effect msg ) - , subscriptions : model -> Sub msg - , view : model -> View msg - , toLayout : Maybe (model -> Layout msg) - , onUrlChanged : Maybe ({ from : Route (), to : Route () } -> msg) - , onHashChanged : Maybe ({ from : Maybe String, to : Maybe String } -> msg) - , onQueryParameterChangedDict : Dict String ({ from : Maybe String, to : Maybe String } -> msg) - } - - -new : - { init : () -> ( model, Effect msg ) - , update : msg -> model -> ( model, Effect msg ) - , subscriptions : model -> Sub msg - , view : model -> View msg - } - -> Page model msg -new options = - Page - { init = options.init - , update = options.update - , subscriptions = options.subscriptions - , view = options.view - , toLayout = Nothing - , onUrlChanged = Nothing - , onHashChanged = Nothing - , onQueryParameterChangedDict = Dict.empty - } - - -sandbox : - { init : model - , update : msg -> model -> model - , view : model -> View msg - } - -> Page model msg -sandbox options = - Page - { init = \_ -> ( options.init, Effect.none ) - , update = \msg model -> ( options.update msg model, Effect.none ) - , subscriptions = \_ -> Sub.none - , view = options.view - , toLayout = Nothing - , onUrlChanged = Nothing - , onHashChanged = Nothing - , onQueryParameterChangedDict = Dict.empty - } - - -element : - { init : ( model, Cmd msg ) - , update : msg -> model -> ( model, Cmd msg ) - , subscriptions : model -> Sub msg - , view : model -> View msg - } - -> Page model msg -element options = - Page - { init = - \_ -> - options.init - |> Tuple.mapSecond Effect.sendCmd - , update = - \msg model -> - options.update msg model - |> Tuple.mapSecond Effect.sendCmd - , subscriptions = options.subscriptions - , view = options.view - , toLayout = Nothing - , onUrlChanged = Nothing - , onHashChanged = Nothing - , onQueryParameterChangedDict = Dict.empty - } - - - --- LAYOUTS - - -withLayout : (model -> Layout msg) -> Page model msg -> Page model msg -withLayout toLayout_ (Page page) = - Page { page | toLayout = Just toLayout_ } - - - --- URL CHANGES - - -withOnUrlChanged : - ({ from : Route () - , to : Route () - } - -> msg - ) - -> Page model msg - -> Page model msg -withOnUrlChanged onChange (Page page) = - Page { page | onUrlChanged = Just onChange } - - -withOnHashChanged : - ({ from : Maybe String - , to : Maybe String - } - -> msg - ) - -> Page model msg - -> Page model msg -withOnHashChanged onChange (Page page) = - Page { page | onHashChanged = Just onChange } - - -withOnQueryParameterChanged : - { key : String - , onChange : - { from : Maybe String - , to : Maybe String - } - -> msg - } - -> Page model msg - -> Page model msg -withOnQueryParameterChanged { key, onChange } (Page page) = - Page { page | onQueryParameterChangedDict = Dict.insert key onChange page.onQueryParameterChangedDict } - - - --- USED INTERNALLY BY ELM LAND - - -init : Page model msg -> () -> ( model, Effect msg ) -init (Page page) = - page.init - - -update : Page model msg -> msg -> model -> ( model, Effect msg ) -update (Page page) = - page.update - - -view : Page model msg -> model -> View msg -view (Page page) = - page.view - - -subscriptions : Page model msg -> model -> Sub msg -subscriptions (Page page) = - page.subscriptions - - -layout : model -> Page model msg -> Maybe (Layouts.Layout msg) -layout model (Page page) = - Maybe.map (\fn -> fn model) page.toLayout - - -toUrlMessages : { from : Route (), to : Route () } -> Page model msg -> List msg -toUrlMessages routes (Page page) = - List.concat - [ case page.onUrlChanged of - Just onUrlChanged -> - [ onUrlChanged routes ] - - Nothing -> - [] - , case page.onHashChanged of - Just onHashChanged -> - if routes.from.hash == routes.to.hash then - [] - - else - [ onHashChanged - { from = routes.from.hash - , to = routes.to.hash - } - ] - - Nothing -> - [] - , let - toQueryParameterMessage : - ( String - , { from : Maybe String, to : Maybe String } -> msg - ) - -> Maybe msg - toQueryParameterMessage ( key, onChange ) = - let - from = - Dict.get key routes.from.query - - to = - Dict.get key routes.to.query - in - if from == to then - Nothing - - else - Just (onChange { from = from, to = to }) - in - Dict.toList page.onQueryParameterChangedDict - |> List.filterMap toQueryParameterMessage - ] diff --git a/.elm-land/src/Pages/NotFound_.elm b/.elm-land/src/Pages/NotFound_.elm deleted file mode 100644 index 581cf20..0000000 --- a/.elm-land/src/Pages/NotFound_.elm +++ /dev/null @@ -1,69 +0,0 @@ -module Pages.NotFound_ exposing (Model, Msg, page) - -import Effect exposing (Effect) -import Html exposing (..) -import Page exposing (Page) -import Route exposing (Route) -import Route.Path -import Shared -import View exposing (View) - - -page : Shared.Model -> Route () -> Page Model Msg -page shared route = - Page.new - { init = init - , update = update - , subscriptions = subscriptions - , view = view - } - - - --- INIT - - -type alias Model = - {} - - -init : () -> ( Model, Effect Msg ) -init () = - ( {} - , Effect.none - ) - - - --- UPDATE - - -type Msg - = NoOp - - -update : Msg -> Model -> ( Model, Effect Msg ) -update msg model = - case msg of - NoOp -> - ( model - , Effect.none - ) - - - --- SUBSCRIPTIONS - - -subscriptions : Model -> Sub Msg -subscriptions model = - Sub.none - - - --- VIEW - - -view : Model -> View Msg -view model = - View.fromString "Page not found" diff --git a/.elm-land/src/Route.elm b/.elm-land/src/Route.elm deleted file mode 100644 index 7beff5c..0000000 --- a/.elm-land/src/Route.elm +++ /dev/null @@ -1,44 +0,0 @@ -module Route exposing (Route, fromUrl, href, toString) - -import Dict exposing (Dict) -import Html -import Html.Attributes -import Route.Path -import Route.Query -import Url exposing (Url) - - -type alias Route params = - { path : Route.Path.Path - , params : params - , query : Dict String String - , hash : Maybe String - , url : Url - } - - -fromUrl : params -> Url -> Route params -fromUrl params url = - { path = Route.Path.fromUrl url - , params = params - , query = Route.Query.fromUrl url - , hash = url.fragment - , url = url - } - - -href : { path : Route.Path.Path, query : Dict String String, hash : Maybe String } -> Html.Attribute msg -href route = - Html.Attributes.href (toString route) - - -toString : { route | path : Route.Path.Path, query : Dict String String, hash : Maybe String } -> String -toString route = - String.join - "" - [ Route.Path.toString route.path - , Route.Query.toString route.query - , route.hash - |> Maybe.map (String.append "#") - |> Maybe.withDefault "" - ] diff --git a/.elm-land/src/Route/Path.elm b/.elm-land/src/Route/Path.elm deleted file mode 100644 index 9094deb..0000000 --- a/.elm-land/src/Route/Path.elm +++ /dev/null @@ -1,80 +0,0 @@ -module Route.Path exposing (Path(..), fromString, fromUrl, href, toString) - -import Html -import Html.Attributes -import Url exposing (Url) -import Url.Parser exposing (()) - - -type Path - = Home_ - | Learning - | Learning_Resource_ { resource : String } - | Rules - | NotFound_ - - -fromUrl : Url -> Path -fromUrl url = - fromString url.path - |> Maybe.withDefault NotFound_ - - -fromString : String -> Maybe Path -fromString urlPath = - let - urlPathSegments : List String - urlPathSegments = - urlPath - |> String.split "/" - |> List.filter (String.trim >> String.isEmpty >> Basics.not) - in - case urlPathSegments of - [] -> - Just Home_ - - "learning" :: [] -> - Just Learning - - "learning" :: resource_ :: [] -> - Learning_Resource_ - { resource = resource_ - } - |> Just - - "rules" :: [] -> - Just Rules - - _ -> - Nothing - - -href : Path -> Html.Attribute msg -href path = - Html.Attributes.href (toString path) - - -toString : Path -> String -toString path = - let - pieces : List String - pieces = - case path of - Home_ -> - [] - - Learning -> - [ "learning" ] - - Learning_Resource_ params -> - [ "learning", params.resource ] - - Rules -> - [ "rules" ] - - NotFound_ -> - [ "404" ] - in - pieces - |> String.join "/" - |> String.append "/" diff --git a/.elm-land/src/Route/Query.elm b/.elm-land/src/Route/Query.elm deleted file mode 100644 index 64f9c60..0000000 --- a/.elm-land/src/Route/Query.elm +++ /dev/null @@ -1,55 +0,0 @@ -module Route.Query exposing (fromUrl, toString) - -import Dict exposing (Dict) -import Url exposing (Url) -import Url.Parser exposing (query) -import Url.Builder exposing (QueryParameter) - - -fromUrl : Url -> Dict String String -fromUrl url = - case url.query of - Nothing -> - Dict.empty - - Just query -> - if String.isEmpty query then - Dict.empty - - else - query - |> String.split "&" - |> List.filterMap (String.split "=" >> queryPiecesToTuple) - |> Dict.fromList - - -queryPiecesToTuple : List String -> Maybe (String, String) -queryPiecesToTuple pieces = - case pieces of - [] -> - Nothing - - key :: [] -> - Just ( decodeQueryToken key, "" ) - - key :: value :: _ -> - Just ( decodeQueryToken key, decodeQueryToken value ) - - -decodeQueryToken : String -> String -decodeQueryToken val = - Url.percentDecode val - |> Maybe.withDefault val - - -toString : Dict String String -> String -toString queryParameterList = - queryParameterList - |> Dict.toList - |> List.map tupleToQueryPiece - |> Url.Builder.toQuery - - -tupleToQueryPiece : (String, String) -> QueryParameter -tupleToQueryPiece ( key, value ) = - Url.Builder.string key value diff --git a/.elm-land/src/interop.js b/.elm-land/src/interop.js deleted file mode 100644 index cdd813b..0000000 --- a/.elm-land/src/interop.js +++ /dev/null @@ -1,9 +0,0 @@ -// This returns the flags passed into your Elm application -export const flags = async ({ env }) => { - return {} -} - -// This function is called once your Elm app is running -export const onReady = ({ app, env }) => { - console.log('Elm is ready', app) -} \ No newline at end of file diff --git a/.elm-land/src/interop.ts b/.elm-land/src/interop.ts deleted file mode 100644 index 73ebe76..0000000 --- a/.elm-land/src/interop.ts +++ /dev/null @@ -1,25 +0,0 @@ -// This returns the flags passed into your Elm application -export const flags = async ({ env } : ElmLand.FlagsArgs) => { - return {} -} - -// This function is called after your Elm app starts -export const onReady = ({ app, env } : ElmLand.OnReadyArgs) => { - console.log('Elm is ready', app) -} - - -// Type definitions for Elm Land -namespace ElmLand { - export type FlagsArgs = { - env: Record - } - export type OnReadyArgs = { - env: Record - app: { ports?: Record } - } - export type Port = { - send?: (data: unknown) => void - subscribe?: (callback: (data: unknown) => unknown) => void - } -} \ No newline at end of file diff --git a/.gitignore b/.gitignore index d5e3415..e47eaf3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,6 @@ node_modules .vscode dist .elm-pages -.elm-pages .env *.pem gen/Tailwind \ No newline at end of file From dacb97a15dbe4a889d0d475c6ca5d4a882736840 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sun, 18 Oct 2026 11:51:07 +0100 Subject: [PATCH 31/48] style: make learning and rules look _way_ better, and use a flatter design language in general --- app/Route/Learning.elm | 94 +++++++++--------- app/Route/Learning/Resource_.elm | 111 +++++++++++----------- app/Route/Rules.elm | 63 ++++++------ src/Theming.elm | 158 ++++++++++++++++++++++++++++--- tailwind.config.ts | 4 + 5 files changed, 278 insertions(+), 152 deletions(-) diff --git a/app/Route/Learning.elm b/app/Route/Learning.elm index ddcd3b5..6c214ed 100644 --- a/app/Route/Learning.elm +++ b/app/Route/Learning.elm @@ -89,7 +89,7 @@ update _ _ (SearchQueryChanged query) model = view : App Data ActionData RouteParams -> Shared.Model -> Model -> View (PagesMsg Msg) view app _ model = View.fromStyled "Learning Directory" - [ div [ css [ Tw.pt_12, Tw.pb_24, Tw.max_w_7xl, Tw.mx_auto, Tw.px_6 ] ] + [ div [ css [ Tw.pt_12, Tw.pb_24, Tw.max_w_7xl, Tw.mx_auto, Theming.gutter ] ] [ viewHeader model.searchQuery , viewCategorisedGrid model.searchQuery app.data.metadata ] @@ -99,12 +99,10 @@ view app _ model = viewHeader : String -> Html Msg viewHeader query = - div [ css [ Tw.flex, Tw.flex_col, Tw.items_center, Tw.text_center, Tw.mb_16 ] ] - [ Html.h1 - [ css [ Theming.headingFont, Tw.text_5xl, Tw.font_bold, Tw.tracking_widest, Tw.uppercase, Tw.mb_4 ] ] - [ text "Learning Resources" ] + div [ css [ Tw.flex, Tw.flex_col, Tw.items_start, Tw.mb_16 ] ] + [ div [ css [ Tw.mb_6 ] ] [ Theming.pageTitle "learning resources" ] , Html.p - [ css [ Theming.bodyFont, Tw.text_lg, Tw.text_color Tw.gray_400, Tw.max_w_2xl, Tw.mb_8 ] ] + [ css [ Theming.bodyFont, Tw.text_lg, Tw.m_0, Tw.max_w_2xl, Tw.mb_8 ] ] [ text "Explore our curated directory of programming languages, tools, and concepts." ] , Html.input [ Attr.value query @@ -115,11 +113,12 @@ viewHeader query = , Tw.w_full , Tw.max_w_lg , Tw.p_4 - , Tw.rounded_xl - , Tw.bg_color Tw.slate_800 + , Tw.bg_color Tw.dd_deepblueLighter , Tw.border - , Tw.border_color Tw.slate_700 - , Tw.text_color Tw.white + , Tw.border_color Tw.dd_border + , Tw.text_color Tw.dd_text + , Css.focus [ Tw.border_color Tw.dd_teal ] + , Css.pseudoElement "placeholder" [ Tw.text_color Tw.dd_subtle ] ] ] [] @@ -162,15 +161,24 @@ viewCategorisedGrid query metadata = viewCategorySection : String -> List LearningResources.CompiledMeta -> Html msg viewCategorySection category items = + let + accent : Theming.Accent + accent = + categoryAccent category + in div [] [ Html.h2 [ css [ Theming.headingFont - , Tw.text_3xl - , Tw.font_bold - , Tw.mb_8 - , Theming.textGradient + , Tw.text_2xl + , Tw.font_semibold + , Tw.lowercase , Tw.inline_block + , Tw.m_0 + , Tw.mb_6 + , Tw.pb_2 + , Tw.border_b_2 + , Tw.border_color (Theming.accentColour accent) ] ] [ text category ] @@ -183,12 +191,24 @@ viewCategorySection category items = , Tw.gap_6 ] ] - (List.map viewTopicCard items) + (List.map (viewTopicCard accent) items) ] +categoryAccent : String -> Theming.Accent +categoryAccent category = + case category of + "Language" -> + Theming.Teal + + "Platform" -> + Theming.Indigo + + _ -> + Theming.Pink -viewTopicCard : LearningResources.CompiledMeta -> Html msg -viewTopicCard meta = + +viewTopicCard : Theming.Accent -> LearningResources.CompiledMeta -> Html msg +viewTopicCard accent meta = Html.a [ Attr.href (UrlPath.toAbsolute (Route.toPath (Route.Learning__Resource_ { resource = LearningResources.entityTagToString meta.id }))) , css @@ -198,34 +218,17 @@ viewTopicCard meta = ] ] [ Theming.cardShell - [ Tw.relative - , Tw.transform - , Tw.transition_all - , Tw.duration_300 - , Css.hover - [ Tw.border - , Tw.border_color Tw.dd_pink - , Tw.neg_translate_y_1 - ] + [ Tw.h_full + , Tw.transition_colors + , Css.hover [ Tw.border_color (Theming.accentColour accent) ] ] - [ div - [ css - [ Tw.absolute - , Tw.top_0 - , Tw.left_0 - , Tw.right_0 - , Tw.h_1 - , Theming.brandGradientBg - ] - ] - [] - , div [ css [ Tw.p_5, Tw.bg_color Tw.dd_deepblue ] ] - [ div [ css [ Tw.flex, Tw.items_center, Tw.gap_3, Tw.mb_2 ] ] - [ div [ css [ Tw.text_3xl, Tw.drop_shadow_md ] ] [ text (Emojis.emojiOrBackup meta) ] - , Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.font_bold ] ] [ text meta.name ] + [ div [ css [ Tw.p_6 ] ] + [ div [ css [ Tw.flex, Tw.items_center, Tw.gap_3, Tw.mb_3 ] ] + [ div [ css [ Tw.text_2xl ] ] [ text (Emojis.emojiOrBackup meta) ] + , Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.font_semibold, Tw.m_0 ] ] [ text meta.name ] ] , Html.p - [ css [ Theming.bodyFont, Tw.text_sm, Tw.text_color Tw.gray_300, Tw.mb_4 ] ] + [ css [ Theming.bodyFont, Tw.text_sm, Tw.leading_relaxed, Tw.m_0, Tw.mb_4 ] ] [ text meta.description ] , div [ css [ Tw.flex, Tw.flex_wrap, Tw.gap_2 ] ] (List.map (LearningResources.languageDomainToString >> viewBadge) meta.domains) @@ -241,14 +244,9 @@ viewBadge label = [ Theming.headingFont , Tw.text_xs , Tw.font_medium - , Tw.bg_color Tw.slate_800 - , Tw.text_color Tw.slate_300 - , Tw.border - , Tw.border_color Tw.slate_600 - , Tw.text_color Tw.slate_300 + , Theming.badgeStyle Theming.Indigo , Tw.px_3 , Tw.py_1 - , Tw.rounded_full ] ] [ text label ] diff --git a/app/Route/Learning/Resource_.elm b/app/Route/Learning/Resource_.elm index 570bbbe..167cc3f 100644 --- a/app/Route/Learning/Resource_.elm +++ b/app/Route/Learning/Resource_.elm @@ -109,21 +109,37 @@ view app _ = viewExplorerLayout : Data -> String -> Html Msg viewExplorerLayout topic activeSlug = - div [ css [ Tw.flex, Tw.max_w_7xl, Tw.mx_auto, Tw.pt_12, Tw.pb_24, Tw.gap_12 ] ] + div [ css [ Tw.flex, Tw.max_w_7xl, Tw.mx_auto, Theming.gutter, Tw.pt_12, Tw.pb_24, Tw.gap_12 ] ] [ div [ css [ Tw.w_64, Tw.flex_shrink_0, Tw.hidden, Breakpoints.lg [ Tw.block ] ] ] - [ Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.mb_6, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_2 ] ] + [ Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.mb_6, Tw.border_b, Tw.border_color Tw.dd_border, Tw.pb_2, Tw.lowercase ] ] [ text "Topics" ] , viewSidebarTopicList topic.allMetadata activeSlug ] - , div [ css [ Tw.flex_1 ] ] - [ div [] - [ viewTopicHeader (Just topic.meta) - , viewResourceGrid topic.resources - ] + , div [ css [ Tw.flex_1, Tw.min_w_0 ] ] + [ viewMobileTopics topic.allMetadata activeSlug + , viewTopicHeader (Just topic.meta) + , viewResourceGrid topic.resources ] ] +{-| The sidebar only fits on wide screens, so we use a details section instead on mobile +-} +viewMobileTopics : List LearningResources.CompiledMeta -> String -> Html Msg +viewMobileTopics metadata activeSlug = + Html.details + [ css + [ Breakpoints.lg [ Tw.hidden ] + , Tw.mb_8 + , Tw.border + , Tw.border_color Tw.dd_border + ] + ] + [ Html.summary [ css [ Theming.headingFont, Tw.p_4, Tw.cursor_pointer ] ] [ text "all topics" ] + , div [ css [ Tw.p_2 ] ] [ viewSidebarTopicList metadata activeSlug ] + ] + + viewSidebarTopicList : List LearningResources.CompiledMeta -> String -> Html Msg viewSidebarTopicList metadata activeSlug = div [ css [ Tw.flex, Tw.flex_col, Tw.gap_2 ] ] @@ -144,21 +160,27 @@ viewSidebarLink activeSlug meta = , css [ Theming.headingFont , Tw.text_sm + , Tw.no_underline , Tw.py_2 , Tw.px_3 - , Tw.rounded_lg + , Tw.border_l_2 , Tw.transition_colors , if isActive then - Tw.bg_color Tw.slate_800 + Tw.border_color Tw.dd_teal + + else + Tw.border_color Tw.transparent + , if isActive then + Tw.bg_color Tw.dd_deepblueLighter else Tw.bg_color Tw.transparent , if isActive then - Tw.text_color Tw.white + Tw.text_color Tw.dd_text else - Tw.text_color Tw.gray_400 - , Css.hover [ Tw.text_color Tw.white, Tw.bg_color Tw.slate_800 ] + Tw.text_color Tw.dd_subtle + , Css.hover [ Tw.text_color Tw.dd_text, Tw.bg_color Tw.dd_deepblueLighter ] ] ] [ text (Emojis.emojiOrBackup meta ++ " " ++ meta.name) ] @@ -171,12 +193,12 @@ viewTopicHeader maybeMeta = text "" Just meta -> - div [ css [ Tw.mb_12, Tw.border_b, Tw.border_color Tw.slate_700, Tw.pb_8 ] ] - [ div [ css [ Tw.flex, Tw.items_center, Tw.gap_4, Tw.mb_4 ] ] + div [ css [ Tw.mb_12, Tw.border_b, Tw.border_color Tw.dd_border, Tw.pb_8 ] ] + [ div [ css [ Tw.flex, Tw.items_center, Tw.gap_4, Tw.mb_6 ] ] [ div [ css [ Tw.text_5xl ] ] [ text (Emojis.emojiOrBackup meta) ] - , Html.h1 [ css [ Theming.headingFont, Tw.text_4xl, Tw.font_bold ] ] [ text meta.name ] + , Theming.pageTitle meta.name ] - , Html.p [ css [ Theming.bodyFont, Tw.text_xl, Tw.text_color Tw.gray_300, Tw.mb_4 ] ] + , Html.p [ css [ Theming.bodyFont, Tw.text_xl, Tw.m_0, Tw.mb_4 ] ] [ text meta.description ] ] @@ -184,7 +206,7 @@ viewTopicHeader maybeMeta = viewResourceGrid : List LearningResources.Resource -> Html Msg viewResourceGrid resources = if List.isEmpty resources then - div [ css [ Theming.bodyFont, Tw.text_color Tw.gray_400, Tw.italic ] ] [ text "No resources found for this topic yet." ] + div [ css [ Theming.bodyFont, Tw.italic ] ] [ text "No resources found for this topic yet." ] else div [ css [ Tw.grid, Tw.grid_cols_1, Breakpoints.md [ Tw.grid_cols_2 ], Tw.gap_6 ] ] @@ -193,7 +215,7 @@ viewResourceGrid resources = viewResourceCard : LearningResources.Resource -> Html Msg viewResourceCard resource = - Theming.cardShell [ Tw.p_6, Tw.flex, Tw.flex_col ] + Theming.cardShell [ Tw.p_6, Tw.flex, Tw.flex_col, Tw.transition_colors, Css.hover [ Tw.border_color Tw.dd_indigo ] ] [ div [ css [ Tw.flex, Tw.justify_between, Tw.items_start, Tw.mb_4 ] ] [ Html.h3 [ css [ Theming.headingFont, Tw.text_lg ] ] [ text resource.name ] , viewPricingBadge resource.pricing @@ -207,58 +229,33 @@ viewResourceCard resource = , Attr.target "_blank" , css [ Theming.headingFont - , Tw.text_color Tw.dd_pink - , Css.hover [ Tw.text_color Tw.white ] + , Tw.text_color Tw.dd_indigo + , Css.hover [ Tw.text_color Tw.dd_pink ] , Tw.transition_colors + , Tw.no_underline ] ] - [ text "Read more ->" ] + [ text "view resource" ] ] viewTypeBadge : LearningResources.ResourceType -> Html Msg viewTypeBadge resourceType = - span - [ css - [ Tw.text_xs - , Tw.font_medium - , Tw.bg_color Tw.indigo_900 - , Tw.text_color Tw.indigo_200 - , Tw.px_2 - , Tw.py_1 - , Tw.rounded_md - ] - ] - [ text (LearningResources.resourceTypeToString resourceType) ] + viewTag Tw.font_medium Theming.Indigo (LearningResources.resourceTypeToString resourceType) viewPricingBadge : LearningResources.Pricing -> Html Msg viewPricingBadge pricing = case pricing of LearningResources.FreePricing_Or_PaidPricing__FreePricing free -> - span - [ css - [ Tw.text_xs - , Tw.font_bold - , Tw.bg_color Tw.emerald_900 - , Tw.text_color Tw.emerald_400 - , Tw.px_2 - , Tw.py_1 - , Tw.rounded_md - ] - ] - [ text free.model ] + viewTag Tw.font_bold Theming.Teal free.model LearningResources.FreePricing_Or_PaidPricing__PaidPricing paid -> - span - [ css - [ Tw.text_xs - , Tw.font_bold - , Tw.bg_color Tw.slate_700 - , Tw.text_color Tw.slate_300 - , Tw.px_2 - , Tw.py_1 - , Tw.rounded_md - ] - ] - [ text (paid.model ++ ": $" ++ String.fromFloat paid.amount) ] + viewTag Tw.font_bold Theming.Pink (paid.model ++ ": $" ++ String.fromFloat paid.amount) + + +viewTag : Css.Style -> Theming.Accent -> String -> Html Msg +viewTag weight accent label = + span + [ css [ Tw.text_xs, weight, Theming.badgeStyle accent, Tw.px_2, Tw.py_1 ] ] + [ text label ] diff --git a/app/Route/Rules.elm b/app/Route/Rules.elm index 25378d0..761f56a 100644 --- a/app/Route/Rules.elm +++ b/app/Route/Rules.elm @@ -1,19 +1,18 @@ module Route.Rules exposing (ActionData, Data, Model, Msg, route) -import BackendTask exposing (BackendTask) +import BackendTask import Css -import FatalError exposing (FatalError) import Head import Head.Seo as Seo -import Html.Styled as Html exposing (Html, a, div, h1, h2, h3, p, text) +import Html.Styled as Html exposing (Html, a, div, h2, h3, p, text) import Html.Styled.Attributes as Attr exposing (css) import Pages.Url import PagesMsg exposing (PagesMsg) import RouteBuilder exposing (App, StatelessRoute) import Shared -import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw +import Tailwind.Breakpoints as Breakpoints import Theming import UrlPath import View exposing (View) @@ -68,7 +67,7 @@ head _ = view : App Data ActionData RouteParams -> Shared.Model -> View (PagesMsg Msg) view _ _ = - View.fromStyled "Rules" [ div [ css [ Tw.max_w_4xl, Tw.mx_auto, Tw.pt_2, Tw.pb_24, Tw.px_6 ] ] [ viewHeader, div [] (List.map viewRuleSection rulesData) ] ] + View.fromStyled "Rules" [ div [ css [ Tw.max_w_7xl, Tw.mx_auto, Tw.w_full, Tw.pt_12, Tw.pb_24, Theming.gutter ] ] [ viewHeader, div [] (List.map viewRuleSection rulesData) ] ] |> View.map PagesMsg.fromMsg @@ -84,13 +83,13 @@ rulesData = [ { id = 1 , title = "Conduct and Communication" , rules = - [ [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Respect the Community: " ] + [ [ Html.b [ css [ Tw.text_color Tw.dd_text ] ] [ text "Respect the Community: " ] , text "No rudeness, insults, harassment, or \"dogpiling\" (ganging up on someone)." ] - , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Engage in good faith: " ] + , [ Html.b [ css [ Tw.text_color Tw.dd_text ] ] [ text "Engage in good faith: " ] , text "No intentional derailing, \"sealioning\" (disingenuous questions), extreme sarcasm, or ragebait. Keep debates respectful and fair." ] - , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Keep Criticism Constructive: " ] + , [ Html.b [ css [ Tw.text_color Tw.dd_text ] ] [ text "Keep Criticism Constructive: " ] , text "Stay objective about code/tools. No flaming, elitism, or mocking others for their choices, especially beginners." ] ] @@ -98,13 +97,13 @@ rulesData = , { id = 2 , title = "Moderation Protocols" , rules = - [ [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "No public moderation disputes: " ] + [ [ Html.b [ css [ Tw.text_color Tw.dd_text ] ] [ text "No public moderation disputes: " ] , text "Do not argue about warnings, mutes, or deleted messages in public. Mocking or undermining staff instructions leads to immediate escalation." ] - , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Official Channels: " ] + , [ Html.b [ css [ Tw.text_color Tw.dd_text ] ] [ text "Official Channels: " ] , text "DM @Modmail to open a ticket for moderation issues." ] - , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "Staff Discretion: " ] + , [ Html.b [ css [ Tw.text_color Tw.dd_text ] ] [ text "Staff Discretion: " ] , text "Staff may remove users who are a net negative to the community vibe, even without a specific rule break." ] ] @@ -112,10 +111,10 @@ rulesData = , { id = 3 , title = "Sensitive Content & Personal Boundaries" , rules = - [ [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "No trauma-dumping: " ] + [ [ Html.b [ css [ Tw.text_color Tw.dd_text ] ] [ text "No trauma-dumping: " ] , text "Keep sensitive personal topics (mental health, self-harm, politics) out of public channels." ] - , [ Html.b [ css [ Tw.text_color Tw.white ] ] [ text "No Vigilante Justice / Minimodding: " ] + , [ Html.b [ css [ Tw.text_color Tw.dd_text ] ] [ text "No Vigilante Justice / Minimodding: " ] , text "Report rule-breakers. Do not act as a moderator or take it upon yourself to \"teach them a lesson.\"" ] ] @@ -144,20 +143,10 @@ rulesData = viewHeader : Html Msg viewHeader = - div [ css [ Tw.mb_8, Tw.text_center ] ] - [ h1 - [ css - [ Theming.headingFont - , Tw.text_5xl - , Tw.font_bold - , Tw.mb_2 - , Theming.textGradient - , Tw.inline_block - ] - ] - [ text "Server Rules" ] + div [ css [ Tw.mb_10 ] ] + [ div [ css [ Tw.mb_6 ] ] [ Theming.pageTitle "server rules" ] , h2 - [ css [ Theming.bodyFont, Tw.text_lg, Tw.text_color Tw.gray_300 ] ] + [ css [ Theming.bodyFont, Tw.text_lg, Tw.m_0 ] ] [ text "You are welcome in our community as long as you follow the rules." ] ] @@ -166,12 +155,21 @@ viewRuleSection : RuleSection -> Html Msg viewRuleSection section = div [ css - [ Tw.mb_6 ] + [ Tw.border_t + , Tw.border_color Tw.dd_border + , Tw.py_8 + , Tw.flex + , Tw.flex_col + , Tw.gap_4 + , Breakpoints.md [ Tw.flex_row, Tw.gap_12 ] + ] ] [ h3 - [ css [ Theming.headingFont, Tw.text_2xl, Tw.text_color Tw.dd_teal, Tw.mb_3 ] ] - [ text (String.fromInt section.id ++ ". " ++ section.title) ] - , div [ css [ Tw.flex, Tw.flex_col, Tw.gap_2 ] ] + [ css [ Theming.headingFont, Tw.text_xl, Tw.font_semibold, Tw.m_0, Tw.flex_shrink_0, Breakpoints.md [ Tw.w_72 ] ] ] + [ Html.span [ css [ Tw.text_color Tw.dd_subtle ] ] [ text (String.fromInt section.id ++ ". ") ] + , text section.title + ] + , div [ css [ Tw.flex, Tw.flex_col, Tw.gap_3, Tw.max_w_2xl ] ] (List.indexedMap viewRuleLine section.rules) ] @@ -187,7 +185,6 @@ viewRuleLine index content = [ css [ Theming.bodyFont , Tw.text_base - , Tw.text_color Tw.gray_300 , Tw.leading_snug , Tw.m_0 ] @@ -201,10 +198,10 @@ inlineLink val url = [ Attr.href url , Attr.target "_blank" , css - [ Tw.text_color Tw.dd_pink + [ Tw.text_color Tw.dd_indigo , Tw.font_semibold , Tw.no_underline - , Css.hover [ Tw.text_color Tw.white ] + , Css.hover [ Tw.text_color Tw.dd_pink ] , Tw.transition_colors ] ] diff --git a/src/Theming.elm b/src/Theming.elm index ab4fd32..19e1d57 100644 --- a/src/Theming.elm +++ b/src/Theming.elm @@ -1,38 +1,170 @@ -module Theming exposing (bodyFont, brandGradientBg, cardShell, headingFont, textGradient) +module Theming exposing (Accent(..), accentColour, badgeStyle, bodyFont, brandGradientBg, cardShell, gradientButton, gutter, headingFont, pageTitle, quietLink, themedImage) import Css import Html.Styled as Html exposing (Html) import Html.Styled.Attributes as Attr +import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw +brandGradient : String +brandGradient = + "linear-gradient(to right, var(--color-den-teal), var(--color-den-indigo), var(--color-den-pink))" + + brandGradientBg : Css.Style brandGradientBg = -- elm tailwind doesnt seem to play well with this - Css.property "background-image" - "linear-gradient(to right, var(--color-den-teal), var(--color-den-indigo), var(--color-den-pink))" + Css.property "background-image" brandGradient -textGradient : Css.Style -textGradient = +{-| The brand gradient made to render as an underline of some text +-} +gradientUnderline : Css.Style +gradientUnderline = Css.batch [ brandGradientBg - , Css.property "-webkit-background-clip" "text" - , Css.property "background-clip" "text" - , Css.property "-webkit-text-fill-color" "transparent" - , Css.color Css.transparent + , Css.property "background-size" "100% 4px" + , Css.property "background-repeat" "no-repeat" + , Css.property "background-position" "bottom left" ] headingFont : Css.Style headingFont = - Css.batch [ Tw.font_mono, Tw.text_color Tw.white ] + Css.batch [ Tw.font_mono, Tw.text_color Tw.dd_text ] bodyFont : Css.Style bodyFont = - Css.batch [ Tw.font_sans, Tw.text_color Tw.gray_300 ] + Css.batch [ Tw.font_sans, Tw.font_medium, Tw.text_color Tw.dd_muted ] + + +{-| Lowercase Cascadia Code left-aligned title with the gradient underline. +-} +pageTitle : String -> Html msg +pageTitle title = + Html.h1 + [ Attr.css + [ headingFont + , Tw.text_4xl + , Breakpoints.md [ Tw.text_5xl ] + , Tw.font_semibold + , Tw.lowercase + , Tw.inline_block + , Tw.pb_3 + , Tw.m_0 + , gradientUnderline + ] + ] + [ Html.text title ] + + +{-| A large button outlined with the brand gradient on the deep-blue background ground. +-} +gradientButton : Css.Style +gradientButton = + let + layers : String -> String + layers fill = + "linear-gradient(" ++ fill ++ ", " ++ fill ++ ") padding-box, " ++ brandGradient ++ " border-box" + in + Css.batch + [ headingFont + , Tw.text_lg + , Tw.font_semibold + , Tw.px_8 + , Tw.py_4 + , Tw.border_2 + , Tw.border_color Tw.transparent + , Tw.no_underline + , Tw.inline_flex + , Tw.items_center + , Tw.justify_center + , Tw.gap_3 + , Css.property "background" (layers "var(--color-den-deepblue)") + , Css.hover [ Css.property "background" (layers "var(--color-den-deepblue-lighter)") ] + ] + + +{-| Muted text that brightens on hover, for navigation-style links and buttons. +-} +quietLink : Css.Style +quietLink = + Css.batch + [ Tw.text_color Tw.dd_subtle + , Css.hover [ Tw.text_color Tw.dd_text ] + , Tw.transition_colors + , Tw.no_underline + ] + + +{-| Side padding shared by every page container, so content lines up with the navbar at every width. +-} +gutter : Css.Style +gutter = + Css.batch [ Tw.px_5, Breakpoints.md [ Tw.px_8 ] ] + + +{-| An image with dark and light variants. +-} +themedImage : { dark : String, light : String, alt : String } -> List Css.Style -> List (Html msg) +themedImage config styles = + let + image : String -> Html msg + image src = + Html.img [ Attr.src src, Attr.alt config.alt, Attr.css styles ] [] + in + [ Html.span [ Attr.class "on-dark" ] [ image config.dark ] + , Html.span [ Attr.class "on-light" ] [ image config.light ] + ] + + +type Accent + = Teal + | Indigo + | Pink + + +accentColour : Accent -> Tw.Color +accentColour accent = + case accent of + Teal -> + Tw.dd_teal + + Indigo -> + Tw.dd_indigo + + Pink -> + Tw.dd_pink + + +accentVar : Accent -> String +accentVar accent = + case accent of + Teal -> + "--color-den-teal" + + Indigo -> + "--color-den-indigo" + + Pink -> + "--color-den-pink" + + +badgeStyle : Accent -> Css.Style +badgeStyle accent = + let + colourVar : String + colourVar = + accentVar accent + in + Css.batch + [ Css.property "color" ("var(" ++ colourVar ++ ")") + , Css.property "background-color" ("color-mix(in srgb, var(" ++ colourVar ++ ") 14%, transparent)") + , Css.property "border" ("1px solid color-mix(in srgb, var(" ++ colourVar ++ ") 35%, transparent)") + ] cardShell : List Css.Style -> List (Html msg) -> Html msg @@ -40,10 +172,8 @@ cardShell extraStyles children = Html.div [ Attr.css ([ Tw.bg_color Tw.dd_deepblueLighter - , Tw.rounded_xl - , Tw.overflow_hidden , Tw.border - , Tw.border_color Tw.slate_700 + , Tw.border_color Tw.dd_border ] ++ extraStyles ) diff --git a/tailwind.config.ts b/tailwind.config.ts index d9ff9d7..7a766b8 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -10,6 +10,10 @@ module.exports = { teal: 'var(--color-den-teal)', pink: 'var(--color-den-pink)', indigo: 'var(--color-den-indigo)', + text: 'var(--color-den-text)', + muted: 'var(--color-den-muted)', + subtle: 'var(--color-den-subtle)', + border: 'var(--color-den-border)', } }, fontFamily: { From 078343e32a9c786d8e4f3fbc1f654f32946d02a5 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sun, 18 Oct 2026 11:59:27 +0100 Subject: [PATCH 32/48] feat: use the logo svg for the banner and title, allow text selecting the title --- app/Route/Index.elm | 145 +++++++++++++++------------------------ public/devden-banner.svg | 2 +- public/devden-logo.svg | 2 +- public/devden-title.svg | 61 ++++++++++++++++ 4 files changed, 120 insertions(+), 90 deletions(-) create mode 100644 public/devden-title.svg diff --git a/app/Route/Index.elm b/app/Route/Index.elm index c3b29c4..30548b3 100644 --- a/app/Route/Index.elm +++ b/app/Route/Index.elm @@ -1,11 +1,10 @@ module Route.Index exposing (ActionData, Data, Model, Msg, route) -import BackendTask exposing (BackendTask) +import BackendTask import Css -import FatalError exposing (FatalError) import Head import Head.Seo as Seo -import Html.Styled exposing (Html, a, div, h2, i, img, text) +import Html.Styled exposing (Html, a, div, h1, i, p, text) import Html.Styled.Attributes as Attr exposing (css, href, target) import Pages.Url import PagesMsg exposing (PagesMsg) @@ -13,7 +12,6 @@ import Redirects import RouteBuilder exposing (App, StatelessRoute) import Shared import Tailwind.Breakpoints as Breakpoints -import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming import UrlPath @@ -60,7 +58,7 @@ head _ = , dimensions = Nothing , mimeType = Nothing } - , description = "The Developer Den is a community of programmers learning and building together." + , description = "Developer Den is a community of programmers learning and building together." , locale = Nothing , title = "Home" } @@ -69,109 +67,80 @@ head _ = view : App Data ActionData RouteParams -> Shared.Model -> View (PagesMsg Msg) view _ _ = - View.fromStyled "Home" [ div [ css [ Tw.flex, Tw.flex_col, Tw.items_center, Tw.justify_center, Tw.w_full, Tw.flex_grow, Tw.px_6 ] ] [ viewBanner ], viewFloatingSocials ] + View.fromStyled "Home" + [ div [ css [ Tw.flex, Tw.flex_col, Tw.items_center, Tw.justify_center, Tw.w_full, Tw.flex_grow, Theming.gutter, Tw.py_16 ] ] + [ viewHero ] + ] |> View.map PagesMsg.fromMsg -viewBanner : Html Msg -viewBanner = - div [ css [ Tw.text_center ] ] - [ img - [ Attr.src "/devden-banner.svg" - , Attr.alt "Developer Den Banner" - , css - [ Theming.headingFont - , Tw.font_bold - , Tw.mb_2 - , Theming.textGradient - , Tw.inline_block - , Tw.tracking_widest - , Tw.pb_2 - , Tw.block - , Tw.mx_auto - ] - ] - [] - , h2 +viewHero : Html Msg +viewHero = + div [ css [ Tw.text_center, Tw.flex, Tw.flex_col, Tw.items_center ] ] + [ viewTitle + , p [ css [ Theming.bodyFont , Tw.text_xl , Breakpoints.md [ Tw.text_2xl ] - , Tw.text_color Tw.gray_300 - , Tw.max_w_3xl - , Tw.mx_auto - , Tw.mb_10 + , Tw.max_w_2xl , Tw.leading_relaxed + , Tw.mt_10 + , Tw.mb_12 + , Tw.mx_0 ] ] [ text "A closely-knit community anchored in a common passion for programming." ] - , a - [ href Redirects.discordURL - , target "_blank" - , css - [ Tw.font_sans - , Tw.tracking_wide - , Tw.text_lg - , Tw.font_bold - , Tw.text_color Tw.white - , Theming.brandGradientBg - , Tw.px_8 - , Tw.py_4 - , Tw.rounded_2xl - , Tw.no_underline - , Css.hover [ Tw.opacity_90, Tw.scale_105 ] - , Tw.transition_all - , Tw.inline_flex - , Tw.items_center - , Tw.justify_center - , Tw.gap_3 - , Tw.drop_shadow_lg - ] - ] - [ i [ Attr.class "fab fa-discord", css [ Tw.text_3xl ] ] [] - , text "Interested? Join our Discord!" + , div [ css [ Tw.flex, Tw.flex_col, Tw.w_full, Tw.max_w_xs, Tw.gap_4, Breakpoints.sm [ Tw.flex_row, Tw.w_auto, Tw.max_w_none ] ] ] + [ viewButton Redirects.discordURL "fab fa-discord" "join our discord" + , viewButton Redirects.githubURL "fab fa-github" "view our github" ] ] -viewFloatingSocials : Html Msg -viewFloatingSocials = +{-| A fake text layer on top of the SVG logo to allow the text to be highlighted and read by screen readers etc +-} +viewTitle : Html Msg +viewTitle = div [ css - [ Tw.fixed - , Tw.bottom_6 - , Tw.right_6 - , Tw.flex - , Tw.gap_2 - , Tw.bg_color Tw.slate_800 - , Tw.p_2 - , Tw.rounded_xl - , Tw.border - , Tw.border_color Tw.slate_700 - , Tw.drop_shadow_lg - , Tw.z_50 + [ Tw.relative + , Tw.w_full + , Tw.max_w_3xl + , Css.property "container-type" "inline-size" ] ] - [ viewSocialIcon Redirects.discordURL - (i [ Attr.class "fab fa-discord", css [ Tw.text_2xl ] ] []) - (Tw.text_color Tw.indigo_400) - , viewSocialIcon Redirects.githubURL - (i [ Attr.class "fab fa-github", css [ Tw.text_2xl ] ] []) - (Tw.text_color Tw.white) - ] - - -viewSocialIcon : String -> Html Msg -> Css.Style -> Html Msg -viewSocialIcon url icon hoverStyle = + (Theming.themedImage + { dark = "/devden-title.svg", light = "/devden-title-light.svg", alt = "" } + [ Tw.block, Tw.w_full, Tw.h_auto ] + ++ [ h1 + [ css + [ Theming.headingFont + , Tw.absolute + , Tw.inset_0 + , Css.property "top" "-1.2cqw" + , Tw.m_0 + , Tw.text_left + , Tw.whitespace_nowrap + , Tw.font_normal + , Css.property "font-size" "12.86cqw" + , Tw.leading_none + , Css.property "padding-left" "1.5%" + , Css.property "color" "transparent" + ] + ] + [ text "developer den" ] + ] + ) + + +viewButton : String -> String -> String -> Html Msg +viewButton url iconClass label = a [ href url , target "_blank" - , css - [ Tw.text_color Tw.gray_400 - , Css.hover [ hoverStyle ] - , Tw.transition_colors - , Tw.p_2 - , Tw.block - ] + , css [ Theming.gradientButton, Tw.w_full, Breakpoints.sm [ Tw.w_auto ] ] + ] + [ i [ Attr.class iconClass, css [ Tw.text_2xl ] ] [] + , text label ] - [ icon ] diff --git a/public/devden-banner.svg b/public/devden-banner.svg index 1f68873..b478c9d 100644 --- a/public/devden-banner.svg +++ b/public/devden-banner.svg @@ -56,6 +56,6 @@ - + diff --git a/public/devden-logo.svg b/public/devden-logo.svg index c3e22f2..18205d6 100644 --- a/public/devden-logo.svg +++ b/public/devden-logo.svg @@ -53,7 +53,7 @@ - + diff --git a/public/devden-title.svg b/public/devden-title.svg new file mode 100644 index 0000000..dd430d3 --- /dev/null +++ b/public/devden-title.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From af8f7c50b39930b30ac6439868c05db93312220f Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sun, 18 Oct 2026 12:08:15 +0100 Subject: [PATCH 33/48] feat: add toggleable light/dark theme --- app/Shared.elm | 75 +++++++++++++++++++++++++++-------- elm-pages.config.mjs | 1 + index.ts | 10 ++++- public/base.css | 60 ++++++++++++++++++++++------ public/devden-logo-light.svg | 59 +++++++++++++++++++++++++++ public/devden-title-light.svg | 61 ++++++++++++++++++++++++++++ public/theme.js | 7 ++++ src/Ports.elm | 12 ++++++ 8 files changed, 255 insertions(+), 30 deletions(-) create mode 100644 public/devden-logo-light.svg create mode 100644 public/devden-title-light.svg create mode 100644 public/theme.js create mode 100644 src/Ports.elm diff --git a/app/Shared.elm b/app/Shared.elm index 5f3ba65..53475ff 100644 --- a/app/Shared.elm +++ b/app/Shared.elm @@ -5,10 +5,12 @@ import Css import Effect exposing (Effect) import FatalError exposing (FatalError) import Html exposing (Html) -import Html.Styled as Styled exposing (a, div, img, nav, text) +import Html.Styled as Styled exposing (a, div, nav, text) import Html.Styled.Attributes as Attr exposing (css, href) +import Html.Styled.Events as Events import Pages.Flags import Pages.PageUrl exposing (PageUrl) +import Ports import Redirects import Route exposing (Route) import SharedTemplate exposing (SharedTemplate) @@ -31,7 +33,12 @@ template = type Msg - = NoOp + = SetTheme Theme + + +type Theme + = Light + | Dark type alias Data = @@ -60,8 +67,8 @@ init _ _ = update : Msg -> Model -> ( Model, Effect Msg ) -update NoOp model = - ( model, Effect.none ) +update (SetTheme theme) model = + ( model, Effect.fromCmd (Ports.setTheme (themeToString theme)) ) subscriptions : UrlPath -> Model -> Sub Msg @@ -84,7 +91,7 @@ view : -> (Msg -> msg) -> View msg -> { body : List (Html msg), title : String } -view _ page _ _ pageView = +view _ page _ toMsg pageView = { title = pageView.title ++ " | Developer Den" , body = [ Styled.toUnstyled @@ -102,7 +109,7 @@ view _ page _ _ pageView = , Tw.flex_col ] ] - [ viewNavbar page.route + [ viewNavbar toMsg page.route , div [ css [ Tw.flex_grow, Tw.flex, Tw.flex_col ] ] (List.map Styled.fromUnstyled pageView.body) ] @@ -111,8 +118,8 @@ view _ page _ _ pageView = } -viewNavbar : Maybe Route -> Styled.Html msg -viewNavbar activeRoute = +viewNavbar : (Msg -> msg) -> Maybe Route -> Styled.Html msg +viewNavbar toMsg activeRoute = nav [ css [ Tw.flex @@ -127,15 +134,12 @@ viewNavbar activeRoute = ] [ a [ routeHref Route.Index - , css [ Theming.headingFont, Tw.text_xl, Tw.font_bold, Tw.no_underline, Theming.textGradient ] - ] - [ img - [ Attr.src "/devden-logo.svg" - , Attr.alt "Developer Den Logo" - , css [ Tw.h_16, Tw.w_auto, Tw.block ] - ] - [] + , css [ Tw.block ] ] + (Theming.themedImage + { dark = "/devden-logo.svg", light = "/devden-logo-light.svg", alt = "Developer Den Logo" } + [ Tw.h_16, Tw.w_auto, Tw.block ] + ) , div [ css [ Tw.flex, Tw.gap_8 ] ] [ viewNavLink "home" Route.Index (activeRoute == Just Route.Index) , viewNavLink "rules" Route.Rules (activeRoute == Just Route.Rules) @@ -153,8 +157,47 @@ viewNavbar activeRoute = ] ] [ text "discord" ] + , viewThemeToggle toMsg + ] + ] + + +themeToString : Theme -> String +themeToString theme = + case theme of + Light -> + "light" + + Dark -> + "dark" + + +viewThemeToggle : (Msg -> msg) -> Styled.Html msg +viewThemeToggle toMsg = + Styled.span [] + [ Styled.span [ Attr.class "on-dark" ] [ themeButton (toMsg (SetTheme Light)) "light mode" ] + , Styled.span [ Attr.class "on-light" ] [ themeButton (toMsg (SetTheme Dark)) "dark mode" ] + ] + + +themeButton : msg -> String -> Styled.Html msg +themeButton msg label = + Styled.button + [ Attr.type_ "button" + , Events.onClick msg + , css + [ Theming.headingFont + , Theming.quietLink + , Tw.bg_color Tw.transparent + , Tw.border_0 + , Tw.p_0 + , Tw.pb_1 + , Tw.cursor_pointer + , Css.property "font-size" "inherit" + , Css.property "line-height" "inherit" ] ] + [ text label ] isLearning : Maybe Route -> Bool diff --git a/elm-pages.config.mjs b/elm-pages.config.mjs index 8206c88..f92e6d2 100644 --- a/elm-pages.config.mjs +++ b/elm-pages.config.mjs @@ -5,6 +5,7 @@ export default { headTagsTemplate(context) { return ` + `; diff --git a/index.ts b/index.ts index 2579392..7ea0a25 100644 --- a/index.ts +++ b/index.ts @@ -5,8 +5,14 @@ type ElmPagesInit = { const config: ElmPagesInit = { load: async function (elmLoaded) { - const app = await elmLoaded; - console.log("App loaded", app); + const app: any = await elmLoaded; + + app.ports.setTheme.subscribe((theme: string) => { + document.documentElement.dataset.theme = theme; + try { + localStorage.setItem("den-theme", theme); + } catch (e) {} + }); }, flags: function () { return "You can decode this in Shared.elm using Json.Decode.string!"; diff --git a/public/base.css b/public/base.css index 9f8cdbf..54d478d 100644 --- a/public/base.css +++ b/public/base.css @@ -17,22 +17,58 @@ :root { - --color-den-deepblue: #171834; - --color-den-deepblue-lighter: #1e1f3d; - --color-den-teal: #00AFC3; - --color-den-pink: #FF52F9; - --color-den-indigo: #8099FF; + color-scheme: dark; /* dark by default */ + + --color-den-deepblue: light-dark(#ffffff, #171834); + --color-den-deepblue-lighter: light-dark(#f1f2fb, #1e1f3d); + --color-den-teal: light-dark(#007684, #00AFC3); + --color-den-pink: light-dark(#BF00B9, #FF52F9); + --color-den-indigo: light-dark(#005FF1, #8099FF); + --color-den-text: light-dark(#171834, #ffffff); + --color-den-muted: light-dark(#2f3170, #c5c9ec); + --color-den-subtle: light-dark(#474A9F, #8e93c6); + --color-den-border: light-dark(#d5d7ef, #2d2f5c); +} + +:root[data-theme="light"] { + color-scheme: light; +} + +/* make elements only visible in light/dark mode */ +.on-light { + display: none; +} + +:root[data-theme="light"] .on-light { + display: contents; } -.theme-light { - --color-den-deepblue: #474A9F; - --color-den-teal: #007684; - --color-den-pink: #BF00B9; - --color-den-indigo: #005FF1; +:root[data-theme="light"] .on-dark { + display: none; +} + +*, ::before, ::after { + box-sizing: border-box; + border-width: 0; + border-style: solid; } html, body { background-color: var(--color-den-deepblue); - color: #ffffff; + color: var(--color-den-text); + font-family: 'Montserrat', sans-serif; + font-weight: 500; margin: 0; -} \ No newline at end of file +} + +:focus-visible { + outline: 2px solid var(--color-den-teal); + outline-offset: 2px; +} + +@media (prefers-reduced-motion: reduce) { + *, ::before, ::after { + transition: none !important; + animation: none !important; + } +} diff --git a/public/devden-logo-light.svg b/public/devden-logo-light.svg new file mode 100644 index 0000000..09ff33b --- /dev/null +++ b/public/devden-logo-light.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/devden-title-light.svg b/public/devden-title-light.svg new file mode 100644 index 0000000..695c3c5 --- /dev/null +++ b/public/devden-title-light.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/theme.js b/public/theme.js new file mode 100644 index 0000000..6a44ee3 --- /dev/null +++ b/public/theme.js @@ -0,0 +1,7 @@ +try { + if (localStorage.getItem("den-theme") === "light") { + document.documentElement.dataset.theme = "light"; + } +} catch (e) { + console.error("Couldn't load theme from localStorage" ,e) +} diff --git a/src/Ports.elm b/src/Ports.elm new file mode 100644 index 0000000..177c42d --- /dev/null +++ b/src/Ports.elm @@ -0,0 +1,12 @@ +port module Ports exposing (setTheme) + +{-| Ports to the browser. Handlers live in `index.ts`. + +@docs setTheme + +-} + + +{-| Apply a theme (`"dark"` or `"light"`) to the page and remember it for next visit. +-} +port setTheme : String -> Cmd msg From 88c607a06ac56ea92aafd0403a53a10c5c94af87 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sun, 18 Oct 2026 12:09:00 +0100 Subject: [PATCH 34/48] feat: add a footer to non-home pages and general tidy up --- app/Shared.elm | 68 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 12 deletions(-) diff --git a/app/Shared.elm b/app/Shared.elm index 53475ff..5804b29 100644 --- a/app/Shared.elm +++ b/app/Shared.elm @@ -14,6 +14,7 @@ import Ports import Redirects import Route exposing (Route) import SharedTemplate exposing (SharedTemplate) +import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming @@ -102,8 +103,9 @@ view _ page _ toMsg pageView = , Tw.w_full , Tw.overflow_x_hidden , Tw.bg_color Tw.dd_deepblue - , Tw.text_color Tw.white + , Tw.text_color Tw.dd_text , Tw.font_sans + , Tw.font_medium , Tw.antialiased , Tw.flex , Tw.flex_col @@ -112,6 +114,11 @@ view _ page _ toMsg pageView = [ viewNavbar toMsg page.route , div [ css [ Tw.flex_grow, Tw.flex, Tw.flex_col ] ] (List.map Styled.fromUnstyled pageView.body) + , if page.route == Just Route.Index then + text "" + + else + viewFooter ] ) ] @@ -128,8 +135,10 @@ viewNavbar toMsg activeRoute = , Tw.max_w_7xl , Tw.mx_auto , Tw.w_full - , Tw.px_8 + , Theming.gutter , Tw.py_6 + , Tw.flex_wrap + , Tw.gap_y_4 ] ] [ a @@ -140,7 +149,7 @@ viewNavbar toMsg activeRoute = { dark = "/devden-logo.svg", light = "/devden-logo-light.svg", alt = "Developer Den Logo" } [ Tw.h_16, Tw.w_auto, Tw.block ] ) - , div [ css [ Tw.flex, Tw.gap_8 ] ] + , div [ css [ Tw.flex, Tw.flex_wrap, Tw.gap_x_6, Tw.gap_y_2, Breakpoints.md [ Tw.gap_x_8 ] ] ] [ viewNavLink "home" Route.Index (activeRoute == Just Route.Index) , viewNavLink "rules" Route.Rules (activeRoute == Just Route.Rules) , viewNavLink "learning" Route.Learning (isLearning activeRoute) @@ -149,11 +158,8 @@ viewNavbar toMsg activeRoute = , Attr.target "_blank" , css [ Theming.headingFont - , Tw.text_sm - , Tw.text_color Tw.slate_400 - , Css.hover [ Tw.text_color Tw.white ] - , Tw.transition_colors - , Tw.no_underline + , Theming.quietLink + , Tw.pb_1 ] ] [ text "discord" ] @@ -200,6 +206,44 @@ themeButton msg label = [ text label ] +viewFooter : Styled.Html msg +viewFooter = + Styled.footer + [ css + [ Tw.max_w_7xl + , Tw.mx_auto + , Tw.w_full + , Theming.gutter + , Tw.py_8 + , Tw.flex_wrap + , Tw.gap_y_2 + , Tw.flex + , Tw.justify_between + , Tw.items_center + , Tw.border_t + , Tw.border_color Tw.dd_border + , Theming.headingFont + , Tw.text_sm + ] + ] + [ div [ css [ Tw.text_color Tw.dd_subtle ] ] [ text "developer den" ] + , div [ css [ Tw.flex, Tw.gap_6 ] ] + [ footerLink "discord" Redirects.discordURL + , footerLink "github" Redirects.githubURL + ] + ] + + +footerLink : String -> String -> Styled.Html msg +footerLink label url = + a + [ href url + , Attr.target "_blank" + , css [ Theming.quietLink ] + ] + [ text label ] + + isLearning : Maybe Route -> Bool isLearning activeRoute = case activeRoute of @@ -227,11 +271,11 @@ viewNavLink label route isActive = , Tw.pb_1 , Tw.no_underline , if isActive then - Tw.text_color Tw.white + Tw.text_color Tw.dd_text else - Tw.text_color Tw.slate_400 - , Css.hover [ Tw.text_color Tw.white ] + Tw.text_color Tw.dd_subtle + , Css.hover [ Tw.text_color Tw.dd_text ] , Tw.transition_colors , Tw.relative ] @@ -244,7 +288,7 @@ viewNavLink label route isActive = , Tw.bottom_0 , Tw.left_0 , Tw.right_0 - , Tw.h_1 + , Css.property "height" "2px" , Theming.brandGradientBg ] ] From a047980447c28f4e753fe53eb924d7ba3c1d6c83 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Sun, 18 Oct 2026 12:09:08 +0100 Subject: [PATCH 35/48] build: add `dom` mode to tsconfig --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 5a30381..c22d5d4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { // Environment setup & latest features - "lib": ["ESNext"], + "lib": ["ESNext", "dom"], "target": "ESNext", "module": "Preserve", "moduleDetection": "force", From c58be9e55ca6c7be075fea586c47f93a64f09830 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 10:06:17 +0100 Subject: [PATCH 36/48] build: use new LearningResources schema --- generate-elm-types.ts | 2 +- src/LearningResources.elm | 16 +- src/LearningResources/Json.elm | 687 +++++++++++++++++--------------- src/LearningResources/Types.elm | 575 +++++++++++++------------- src/OpenApi/Common.elm | 501 +++++++++-------------- 5 files changed, 869 insertions(+), 912 deletions(-) diff --git a/generate-elm-types.ts b/generate-elm-types.ts index 7c470a9..2ab0985 100644 --- a/generate-elm-types.ts +++ b/generate-elm-types.ts @@ -8,7 +8,7 @@ import path from "path"; import fs from "fs" import { $ } from "bun"; -const SCHEMA_URL = "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@cb31652/openapi.schema.json"; +const SCHEMA_URL = "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@790043e153f15fee0fa18cdd64a529d7b58c80af/openapi.schema.json"; const OUTPUT_DIR = path.join(__dirname, "./src"); const MODULE_NAME = "LearningResources"; diff --git a/src/LearningResources.elm b/src/LearningResources.elm index 00cefc0..ffaae29 100644 --- a/src/LearningResources.elm +++ b/src/LearningResources.elm @@ -1,4 +1,4 @@ -module LearningResources exposing (fetchDatabase, getMetadata, getResourcesByTag) +module LearningResources exposing (fetchDatabase, getMetadata, getResourcesByTag, iconUrl) import BackendTask exposing (BackendTask) import BackendTask.Http @@ -7,9 +7,21 @@ import LearningResources.Json as Json import LearningResources.Types exposing (CompiledMeta, Database, EntityTag, Resource) +repoUrl : String +repoUrl = + "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@790043e153f15fee0fa18cdd64a529d7b58c80af/" + + databaseUrl : String databaseUrl = - "https://cdn.jsdelivr.net/gh/TheDeveloperDen/LearningResources@master/database.json" + repoUrl ++ "database.json" + + +{-| Resolves an icon path from the database (e.g. `icons/rust.svg`) to a URL. +-} +iconUrl : String -> String +iconUrl path = + repoUrl ++ path {-| Fetched at build time, so every topic page is pre-rendered. diff --git a/src/LearningResources/Json.elm b/src/LearningResources/Json.elm index 4f6eafa..c38fa54 100644 --- a/src/LearningResources/Json.elm +++ b/src/LearningResources/Json.elm @@ -1,8 +1,8 @@ module LearningResources.Json exposing - ( encodeCategoryLanguage, encodeCategoryPlatform, encodeCategoryTool, encodeCompiledMeta, encodeDatabase + ( encodeCategoryLanguage, encodeCategoryPlatform, encodeCategoryTool, encodeCompiledMeta, encodeDatabase, encodeEntityIcon , encodeEntityTag, encodeFreePricing, encodeLanguageDomain, encodeMeta, encodePaidPricing, encodePricing , encodeProgrammingParadigm, encodeResource, encodeResourceCategory, encodeResourceType - , decodeCategoryLanguage, decodeCategoryPlatform, decodeCategoryTool, decodeCompiledMeta, decodeDatabase + , decodeCategoryLanguage, decodeCategoryPlatform, decodeCategoryTool, decodeCompiledMeta, decodeDatabase, decodeEntityIcon , decodeEntityTag, decodeFreePricing, decodeLanguageDomain, decodeMeta, decodePaidPricing, decodePricing , decodeProgrammingParadigm, decodeResource, decodeResourceCategory, decodeResourceType ) @@ -12,14 +12,14 @@ module LearningResources.Json exposing ## Encoders -@docs encodeCategoryLanguage, encodeCategoryPlatform, encodeCategoryTool, encodeCompiledMeta, encodeDatabase +@docs encodeCategoryLanguage, encodeCategoryPlatform, encodeCategoryTool, encodeCompiledMeta, encodeDatabase, encodeEntityIcon @docs encodeEntityTag, encodeFreePricing, encodeLanguageDomain, encodeMeta, encodePaidPricing, encodePricing @docs encodeProgrammingParadigm, encodeResource, encodeResourceCategory, encodeResourceType ## Decoders -@docs decodeCategoryLanguage, decodeCategoryPlatform, decodeCategoryTool, decodeCompiledMeta, decodeDatabase +@docs decodeCategoryLanguage, decodeCategoryPlatform, decodeCategoryTool, decodeCompiledMeta, decodeDatabase, decodeEntityIcon @docs decodeEntityTag, decodeFreePricing, decodeLanguageDomain, decodeMeta, decodePaidPricing, decodePricing @docs decodeProgrammingParadigm, decodeResource, decodeResourceCategory, decodeResourceType @@ -29,118 +29,128 @@ import Json.Decode import Json.Encode import LearningResources.Types import OpenApi.Common +import Url -decodeResourceType : Json.Decode.Decoder LearningResources.Types.ResourceType -decodeResourceType = - Json.Decode.andThen - (\andThenUnpack -> - case - LearningResources.Types.resourceTypeFromString andThenUnpack - of - Maybe.Just a -> - Json.Decode.succeed a +encodeCategoryLanguage : LearningResources.Types.CategoryLanguage -> Json.Encode.Value +encodeCategoryLanguage rec = + Json.Encode.object + [ ( "paradigms" + , Json.Encode.list encodeProgrammingParadigm rec.paradigms + ) + , ( "type", Json.Encode.string rec.type_ ) + ] - Maybe.Nothing -> - Json.Decode.fail - (andThenUnpack ++ " is not a valid ResourceType") - ) - Json.Decode.string +encodeCategoryPlatform : LearningResources.Types.CategoryPlatform -> Json.Encode.Value +encodeCategoryPlatform rec = + Json.Encode.object [ ( "type", Json.Encode.string rec.type_ ) ] -encodeResourceType : LearningResources.Types.ResourceType -> Json.Encode.Value -encodeResourceType rec = - Json.Encode.string (LearningResources.Types.resourceTypeToString rec) +encodeCategoryTool : LearningResources.Types.CategoryTool -> Json.Encode.Value +encodeCategoryTool rec = + Json.Encode.object [ ( "type", Json.Encode.string rec.type_ ) ] -decodeResourceCategory : Json.Decode.Decoder LearningResources.Types.ResourceCategory -decodeResourceCategory = - Json.Decode.oneOf - [ Json.Decode.map - LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryLanguage - decodeCategoryLanguage - , Json.Decode.map - LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryPlatform - decodeCategoryPlatform - , Json.Decode.map - LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryTool - decodeCategoryTool + +encodeCompiledMeta : LearningResources.Types.CompiledMeta -> Json.Encode.Value +encodeCompiledMeta rec = + Json.Encode.object + (List.filterMap + Basics.identity + [ Just ( "category", encodeResourceCategory rec.category ) + , Just ( "description", Json.Encode.string rec.description ) + , Just + ( "domains" + , Json.Encode.list encodeLanguageDomain rec.domains + ) + , Maybe.map + (\mapUnpack -> ( "emoji", Json.Encode.string mapUnpack )) + rec.emoji + , Maybe.map + (\mapUnpack -> ( "icon", encodeEntityIcon mapUnpack )) + rec.icon + , Just ( "id", encodeEntityTag rec.id ) + , Just ( "name", Json.Encode.string rec.name ) + ] + ) + + +encodeDatabase : LearningResources.Types.Database -> Json.Encode.Value +encodeDatabase rec = + Json.Encode.object + [ ( "metadata", Json.Encode.list encodeCompiledMeta rec.metadata ) + , ( "resources", Json.Encode.list encodeResource rec.resources ) ] -encodeResourceCategory : LearningResources.Types.ResourceCategory -> Json.Encode.Value -encodeResourceCategory rec = - case rec of - LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryLanguage content -> - encodeCategoryLanguage content +encodeEntityIcon : LearningResources.Types.EntityIcon -> Json.Encode.Value +encodeEntityIcon rec = + Json.Encode.object + (List.filterMap + Basics.identity + [ Maybe.map + (\mapUnpack -> ( "dark", Json.Encode.string mapUnpack )) + rec.dark + , Just ( "default", Json.Encode.string rec.default ) + ] + ) - LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryPlatform content -> - encodeCategoryPlatform content - LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryTool content -> - encodeCategoryTool content +encodeEntityTag : LearningResources.Types.EntityTag -> Json.Encode.Value +encodeEntityTag rec = + Json.Encode.string (LearningResources.Types.entityTagToString rec) -decodeResource : Json.Decode.Decoder LearningResources.Types.Resource -decodeResource = - Json.Decode.succeed - (\cons description name pricing pros teaches type_ url -> - { cons = cons - , description = description - , name = name - , pricing = pricing - , pros = pros - , teaches = teaches - , type_ = type_ - , url = url - } - ) - |> OpenApi.Common.jsonDecodeAndMap - (OpenApi.Common.decodeOptionalField - "cons" - (Json.Decode.list Json.Decode.string) - ) - |> OpenApi.Common.jsonDecodeAndMap - (OpenApi.Common.decodeOptionalField - "description" - Json.Decode.string - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "name" - Json.Decode.string - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "pricing" - decodePricing - ) - |> OpenApi.Common.jsonDecodeAndMap - (OpenApi.Common.decodeOptionalField - "pros" - (Json.Decode.list - Json.Decode.string - ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "teaches" - (Json.Decode.list - decodeEntityTag - ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "type" - (Json.Decode.list - decodeResourceType +encodeFreePricing : LearningResources.Types.FreePricing -> Json.Encode.Value +encodeFreePricing rec = + Json.Encode.object [ ( "model", Json.Encode.string rec.model ) ] + + +encodeLanguageDomain : LearningResources.Types.LanguageDomain -> Json.Encode.Value +encodeLanguageDomain rec = + Json.Encode.string (LearningResources.Types.languageDomainToString rec) + + +encodeMeta : LearningResources.Types.Meta -> Json.Encode.Value +encodeMeta rec = + Json.Encode.object + (List.filterMap + Basics.identity + [ Just ( "category", encodeResourceCategory rec.category ) + , Just ( "description", Json.Encode.string rec.description ) + , Just + ( "domains" + , Json.Encode.list encodeLanguageDomain rec.domains ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "url" - Json.Decode.string - ) + , Maybe.map + (\mapUnpack -> ( "emoji", Json.Encode.string mapUnpack )) + rec.emoji + , Just ( "name", Json.Encode.string rec.name ) + ] + ) + + +encodePaidPricing : LearningResources.Types.PaidPricing -> Json.Encode.Value +encodePaidPricing rec = + Json.Encode.object + [ ( "amount", Json.Encode.float rec.amount ) + , ( "model", Json.Encode.string rec.model ) + ] + + +encodePricing : LearningResources.Types.Pricing -> Json.Encode.Value +encodePricing rec = + case rec of + LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing content -> + encodeFreePricing content + + LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing content -> + encodePaidPricing content + + +encodeProgrammingParadigm : LearningResources.Types.ProgrammingParadigm -> Json.Encode.Value +encodeProgrammingParadigm rec = + Json.Encode.string (LearningResources.Types.programmingParadigmToString rec) encodeResource : LearningResources.Types.Resource -> Json.Encode.Value @@ -165,325 +175,368 @@ encodeResource rec = rec.pros , Just ( "teaches", Json.Encode.list encodeEntityTag rec.teaches ) , Just ( "type", Json.Encode.list encodeResourceType rec.type_ ) - , Just ( "url", Json.Encode.string rec.url ) + , Just ( "url", OpenApi.Common.encodeStringUri rec.url ) ] ) -decodeProgrammingParadigm : Json.Decode.Decoder LearningResources.Types.ProgrammingParadigm -decodeProgrammingParadigm = - Json.Decode.andThen - (\andThenUnpack -> - case - LearningResources.Types.programmingParadigmFromString - andThenUnpack - of - Maybe.Just a -> - Json.Decode.succeed a - - Maybe.Nothing -> - Json.Decode.fail - (andThenUnpack ++ " is not a valid ProgrammingParadigm") - ) - Json.Decode.string - - -encodeProgrammingParadigm : LearningResources.Types.ProgrammingParadigm -> Json.Encode.Value -encodeProgrammingParadigm rec = - Json.Encode.string (LearningResources.Types.programmingParadigmToString rec) - +encodeResourceCategory : LearningResources.Types.ResourceCategory -> Json.Encode.Value +encodeResourceCategory rec = + case rec of + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryLanguage content -> + encodeCategoryLanguage content -decodePricing : Json.Decode.Decoder LearningResources.Types.Pricing -decodePricing = - Json.Decode.oneOf - [ Json.Decode.map - LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing - decodeFreePricing - , Json.Decode.map - LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing - decodePaidPricing - ] + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryPlatform content -> + encodeCategoryPlatform content + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryTool content -> + encodeCategoryTool content -encodePricing : LearningResources.Types.Pricing -> Json.Encode.Value -encodePricing rec = - case rec of - LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing content -> - encodeFreePricing content - LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing content -> - encodePaidPricing content +encodeResourceType : LearningResources.Types.ResourceType -> Json.Encode.Value +encodeResourceType rec = + Json.Encode.string (LearningResources.Types.resourceTypeToString rec) -decodePaidPricing : Json.Decode.Decoder LearningResources.Types.PaidPricing -decodePaidPricing = +decodeCategoryLanguage : Json.Decode.Decoder LearningResources.Types.CategoryLanguage +decodeCategoryLanguage = Json.Decode.succeed - (\amount model -> { amount = amount, model = model }) + (\paradigms type_ -> { paradigms = paradigms, type_ = type_ }) |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field "amount" Json.Decode.float) + (Json.Decode.field + "paradigms" + (Json.Decode.list decodeProgrammingParadigm) + ) |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field "model" Json.Decode.string) + (Json.Decode.field + "type" + (Json.Decode.andThen + (\andThenUnpack -> + case andThenUnpack of + "Language" -> + Json.Decode.succeed "Language" + + _ -> + Json.Decode.fail + (("Value \"" ++ andThenUnpack) + ++ "\" is not valid for the enum, possible values: \"Language\"" + ) + ) + Json.Decode.string + ) + ) -encodePaidPricing : LearningResources.Types.PaidPricing -> Json.Encode.Value -encodePaidPricing rec = - Json.Encode.object - [ ( "amount", Json.Encode.float rec.amount ) - , ( "model", Json.Encode.string rec.model ) - ] +decodeCategoryPlatform : Json.Decode.Decoder LearningResources.Types.CategoryPlatform +decodeCategoryPlatform = + Json.Decode.succeed (\type_ -> { type_ = type_ }) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "type" + (Json.Decode.andThen + (\andThenUnpack -> + case andThenUnpack of + "Platform" -> + Json.Decode.succeed "Platform" + + _ -> + Json.Decode.fail + (("Value \"" ++ andThenUnpack) + ++ "\" is not valid for the enum, possible values: \"Platform\"" + ) + ) + Json.Decode.string + ) + ) -decodeMeta : Json.Decode.Decoder LearningResources.Types.Meta -decodeMeta = +decodeCategoryTool : Json.Decode.Decoder LearningResources.Types.CategoryTool +decodeCategoryTool = + Json.Decode.succeed (\type_ -> { type_ = type_ }) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field + "type" + (Json.Decode.andThen + (\andThenUnpack -> + case andThenUnpack of + "Tool" -> + Json.Decode.succeed "Tool" + + _ -> + Json.Decode.fail + (("Value \"" ++ andThenUnpack) + ++ "\" is not valid for the enum, possible values: \"Tool\"" + ) + ) + Json.Decode.string + ) + ) + + +decodeCompiledMeta : Json.Decode.Decoder LearningResources.Types.CompiledMeta +decodeCompiledMeta = Json.Decode.succeed - (\category description domains emoji name -> + (\category description domains emoji icon id name -> { category = category , description = description , domains = domains , emoji = emoji + , icon = icon + , id = id , name = name } ) |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field "category" decodeResourceCategory) |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "description" - Json.Decode.string - ) + (Json.Decode.field "description" Json.Decode.string) |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field "domains" - (Json.Decode.list - decodeLanguageDomain - ) - ) - |> OpenApi.Common.jsonDecodeAndMap - (OpenApi.Common.decodeOptionalField - "emoji" - Json.Decode.string + (Json.Decode.list decodeLanguageDomain) ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField "emoji" Json.Decode.string) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField "icon" decodeEntityIcon) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "id" decodeEntityTag) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "name" Json.Decode.string) + + +decodeDatabase : Json.Decode.Decoder LearningResources.Types.Database +decodeDatabase = + Json.Decode.succeed + (\metadata resources -> { metadata = metadata, resources = resources }) |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field - "name" - Json.Decode.string + "metadata" + (Json.Decode.list decodeCompiledMeta) ) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "resources" (Json.Decode.list decodeResource)) -encodeMeta : LearningResources.Types.Meta -> Json.Encode.Value -encodeMeta rec = - Json.Encode.object - (List.filterMap - Basics.identity - [ Just ( "category", encodeResourceCategory rec.category ) - , Just ( "description", Json.Encode.string rec.description ) - , Just - ( "domains" - , Json.Encode.list encodeLanguageDomain rec.domains - ) - , Maybe.map - (\mapUnpack -> ( "emoji", Json.Encode.string mapUnpack )) - rec.emoji - , Just ( "name", Json.Encode.string rec.name ) - ] - ) +decodeEntityIcon : Json.Decode.Decoder LearningResources.Types.EntityIcon +decodeEntityIcon = + Json.Decode.succeed (\dark default -> { dark = dark, default = default }) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField "dark" Json.Decode.string) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "default" Json.Decode.string) -decodeLanguageDomain : Json.Decode.Decoder LearningResources.Types.LanguageDomain -decodeLanguageDomain = +decodeEntityTag : Json.Decode.Decoder LearningResources.Types.EntityTag +decodeEntityTag = Json.Decode.andThen (\andThenUnpack -> - case - LearningResources.Types.languageDomainFromString andThenUnpack - of + case LearningResources.Types.entityTagFromString andThenUnpack of Maybe.Just a -> Json.Decode.succeed a Maybe.Nothing -> Json.Decode.fail - (andThenUnpack ++ " is not a valid LanguageDomain") + (andThenUnpack ++ " is not a valid EntityTag") ) Json.Decode.string -encodeLanguageDomain : LearningResources.Types.LanguageDomain -> Json.Encode.Value -encodeLanguageDomain rec = - Json.Encode.string (LearningResources.Types.languageDomainToString rec) - - decodeFreePricing : Json.Decode.Decoder LearningResources.Types.FreePricing decodeFreePricing = - Json.Decode.succeed - (\model -> { model = model }) + Json.Decode.succeed (\model -> { model = model }) |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field "model" - Json.Decode.string + (Json.Decode.andThen + (\andThenUnpack -> + case andThenUnpack of + "Free" -> + Json.Decode.succeed "Free" + + "Freemium" -> + Json.Decode.succeed "Freemium" + + _ -> + Json.Decode.fail + (("Value \"" ++ andThenUnpack) + ++ "\" is not valid for the enum, possible values: \"Free\", \"Freemium\"" + ) + ) + Json.Decode.string + ) ) -encodeFreePricing : LearningResources.Types.FreePricing -> Json.Encode.Value -encodeFreePricing rec = - Json.Encode.object [ ( "model", Json.Encode.string rec.model ) ] - - -decodeEntityTag : Json.Decode.Decoder LearningResources.Types.EntityTag -decodeEntityTag = +decodeLanguageDomain : Json.Decode.Decoder LearningResources.Types.LanguageDomain +decodeLanguageDomain = Json.Decode.andThen (\andThenUnpack -> - case LearningResources.Types.entityTagFromString andThenUnpack of + case + LearningResources.Types.languageDomainFromString andThenUnpack + of Maybe.Just a -> Json.Decode.succeed a Maybe.Nothing -> Json.Decode.fail - (andThenUnpack ++ " is not a valid EntityTag") + (andThenUnpack ++ " is not a valid LanguageDomain") ) Json.Decode.string -encodeEntityTag : LearningResources.Types.EntityTag -> Json.Encode.Value -encodeEntityTag rec = - Json.Encode.string (LearningResources.Types.entityTagToString rec) - - -decodeDatabase : Json.Decode.Decoder LearningResources.Types.Database -decodeDatabase = - Json.Decode.succeed - (\metadata resources -> { metadata = metadata, resources = resources }) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "metadata" - (Json.Decode.list decodeCompiledMeta) - ) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "resources" - (Json.Decode.list decodeResource) - ) - - -encodeDatabase : LearningResources.Types.Database -> Json.Encode.Value -encodeDatabase rec = - Json.Encode.object - [ ( "metadata", Json.Encode.list encodeCompiledMeta rec.metadata ) - , ( "resources", Json.Encode.list encodeResource rec.resources ) - ] - - -decodeCompiledMeta : Json.Decode.Decoder LearningResources.Types.CompiledMeta -decodeCompiledMeta = +decodeMeta : Json.Decode.Decoder LearningResources.Types.Meta +decodeMeta = Json.Decode.succeed - (\category description domains emoji id name -> + (\category description domains emoji name -> { category = category , description = description , domains = domains , emoji = emoji - , id = id , name = name } ) |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field "category" decodeResourceCategory) |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "description" - Json.Decode.string - ) + (Json.Decode.field "description" Json.Decode.string) |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field "domains" - (Json.Decode.list - decodeLanguageDomain - ) + (Json.Decode.list decodeLanguageDomain) ) |> OpenApi.Common.jsonDecodeAndMap - (OpenApi.Common.decodeOptionalField - "emoji" - Json.Decode.string - ) + (OpenApi.Common.decodeOptionalField "emoji" Json.Decode.string) |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "id" - decodeEntityTag - ) + (Json.Decode.field "name" Json.Decode.string) + + +decodePaidPricing : Json.Decode.Decoder LearningResources.Types.PaidPricing +decodePaidPricing = + Json.Decode.succeed (\amount model -> { amount = amount, model = model }) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "amount" Json.Decode.float) |> OpenApi.Common.jsonDecodeAndMap (Json.Decode.field - "name" - Json.Decode.string + "model" + (Json.Decode.andThen + (\andThenUnpack -> + case andThenUnpack of + "One Time" -> + Json.Decode.succeed "One Time" + + "Subscription" -> + Json.Decode.succeed "Subscription" + + _ -> + Json.Decode.fail + (("Value \"" ++ andThenUnpack) + ++ "\" is not valid for the enum, possible values: \"One Time\", \"Subscription\"" + ) + ) + Json.Decode.string + ) ) -encodeCompiledMeta : LearningResources.Types.CompiledMeta -> Json.Encode.Value -encodeCompiledMeta rec = - Json.Encode.object - (List.filterMap - Basics.identity - [ Just ( "category", encodeResourceCategory rec.category ) - , Just ( "description", Json.Encode.string rec.description ) - , Just - ( "domains" - , Json.Encode.list encodeLanguageDomain rec.domains - ) - , Maybe.map - (\mapUnpack -> ( "emoji", Json.Encode.string mapUnpack )) - rec.emoji - , Just ( "id", encodeEntityTag rec.id ) - , Just ( "name", Json.Encode.string rec.name ) - ] - ) - +decodePricing : Json.Decode.Decoder LearningResources.Types.Pricing +decodePricing = + Json.Decode.oneOf + [ Json.Decode.map + LearningResources.Types.FreePricing_Or_PaidPricing__FreePricing + decodeFreePricing + , Json.Decode.map + LearningResources.Types.FreePricing_Or_PaidPricing__PaidPricing + decodePaidPricing + ] -decodeCategoryTool : Json.Decode.Decoder LearningResources.Types.CategoryTool -decodeCategoryTool = - Json.Decode.succeed - (\type_ -> { type_ = type_ }) - |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "type" - Json.Decode.string - ) +decodeProgrammingParadigm : Json.Decode.Decoder LearningResources.Types.ProgrammingParadigm +decodeProgrammingParadigm = + Json.Decode.andThen + (\andThenUnpack -> + case + LearningResources.Types.programmingParadigmFromString + andThenUnpack + of + Maybe.Just a -> + Json.Decode.succeed a -encodeCategoryTool : LearningResources.Types.CategoryTool -> Json.Encode.Value -encodeCategoryTool rec = - Json.Encode.object [ ( "type", Json.Encode.string rec.type_ ) ] + Maybe.Nothing -> + Json.Decode.fail + (andThenUnpack ++ " is not a valid ProgrammingParadigm") + ) + Json.Decode.string -decodeCategoryPlatform : Json.Decode.Decoder LearningResources.Types.CategoryPlatform -decodeCategoryPlatform = +decodeResource : Json.Decode.Decoder LearningResources.Types.Resource +decodeResource = Json.Decode.succeed - (\type_ -> { type_ = type_ }) + (\cons description name pricing pros teaches type_ url -> + { cons = cons + , description = description + , name = name + , pricing = pricing + , pros = pros + , teaches = teaches + , type_ = type_ + , url = url + } + ) |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "type" + (OpenApi.Common.decodeOptionalField + "cons" + (Json.Decode.list Json.Decode.string) + ) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "description" Json.Decode.string ) - - -encodeCategoryPlatform : LearningResources.Types.CategoryPlatform -> Json.Encode.Value -encodeCategoryPlatform rec = - Json.Encode.object [ ( "type", Json.Encode.string rec.type_ ) ] - - -decodeCategoryLanguage : Json.Decode.Decoder LearningResources.Types.CategoryLanguage -decodeCategoryLanguage = - Json.Decode.succeed - (\paradigms type_ -> { paradigms = paradigms, type_ = type_ }) |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field - "paradigms" - (Json.Decode.list decodeProgrammingParadigm) + (Json.Decode.field "name" Json.Decode.string) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "pricing" decodePricing) + |> OpenApi.Common.jsonDecodeAndMap + (OpenApi.Common.decodeOptionalField + "pros" + (Json.Decode.list Json.Decode.string) ) |> OpenApi.Common.jsonDecodeAndMap - (Json.Decode.field "type" Json.Decode.string) + (Json.Decode.field "teaches" (Json.Decode.list decodeEntityTag)) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "type" (Json.Decode.list decodeResourceType)) + |> OpenApi.Common.jsonDecodeAndMap + (Json.Decode.field "url" OpenApi.Common.decodeStringUri) -encodeCategoryLanguage : LearningResources.Types.CategoryLanguage -> Json.Encode.Value -encodeCategoryLanguage rec = - Json.Encode.object - [ ( "paradigms" - , Json.Encode.list encodeProgrammingParadigm rec.paradigms - ) - , ( "type", Json.Encode.string rec.type_ ) +decodeResourceCategory : Json.Decode.Decoder LearningResources.Types.ResourceCategory +decodeResourceCategory = + Json.Decode.oneOf + [ Json.Decode.map + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryLanguage + decodeCategoryLanguage + , Json.Decode.map + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryPlatform + decodeCategoryPlatform + , Json.Decode.map + LearningResources.Types.CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool__CategoryTool + decodeCategoryTool ] + + +decodeResourceType : Json.Decode.Decoder LearningResources.Types.ResourceType +decodeResourceType = + Json.Decode.andThen + (\andThenUnpack -> + case + LearningResources.Types.resourceTypeFromString andThenUnpack + of + Maybe.Just a -> + Json.Decode.succeed a + + Maybe.Nothing -> + Json.Decode.fail + (andThenUnpack ++ " is not a valid ResourceType") + ) + Json.Decode.string diff --git a/src/LearningResources/Types.elm b/src/LearningResources/Types.elm index 1b5de6a..d7a8c0a 100644 --- a/src/LearningResources/Types.elm +++ b/src/LearningResources/Types.elm @@ -1,10 +1,9 @@ module LearningResources.Types exposing - ( CategoryLanguage, CategoryPlatform, CategoryTool, CompiledMeta, Database, FreePricing, Meta, PaidPricing - , Pricing, Resource, ResourceCategory + ( CategoryLanguage, CategoryPlatform, CategoryTool, CompiledMeta, Database, EntityIcon + , FreePricing, Meta, PaidPricing, Pricing, Resource, ResourceCategory , EntityTag(..), LanguageDomain(..), ProgrammingParadigm(..), ResourceType(..), entityTagFromString, entityTagToString - , entityTagVariants, languageDomainFromString, languageDomainToString, languageDomainVariants - , programmingParadigmFromString, programmingParadigmToString, programmingParadigmVariants - , resourceTypeFromString, resourceTypeToString, resourceTypeVariants + , entityTagVariants, languageDomainFromString, languageDomainToString, languageDomainVariants, programmingParadigmFromString, programmingParadigmToString + , programmingParadigmVariants, resourceTypeFromString, resourceTypeToString, resourceTypeVariants , CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool(..), FreePricing_Or_PaidPricing(..) ) @@ -13,16 +12,15 @@ module LearningResources.Types exposing ## Aliases -@docs CategoryLanguage, CategoryPlatform, CategoryTool, CompiledMeta, Database, FreePricing, Meta, PaidPricing -@docs Pricing, Resource, ResourceCategory +@docs CategoryLanguage, CategoryPlatform, CategoryTool, CompiledMeta, Database, EntityIcon +@docs FreePricing, Meta, PaidPricing, Pricing, Resource, ResourceCategory ## Enum @docs EntityTag, LanguageDomain, ProgrammingParadigm, ResourceType, entityTagFromString, entityTagToString -@docs entityTagVariants, languageDomainFromString, languageDomainToString, languageDomainVariants -@docs programmingParadigmFromString, programmingParadigmToString, programmingParadigmVariants -@docs resourceTypeFromString, resourceTypeToString, resourceTypeVariants +@docs entityTagVariants, languageDomainFromString, languageDomainToString, languageDomainVariants, programmingParadigmFromString, programmingParadigmToString +@docs programmingParadigmVariants, resourceTypeFromString, resourceTypeToString, resourceTypeVariants ## One of @@ -31,152 +29,91 @@ module LearningResources.Types exposing -} +import Url -{-| The type of the resource --} -type ResourceType - = ResourceType__Article - | ResourceType__Book - | ResourceType__Course - | ResourceType__InteractiveTutorial - | ResourceType__Video - - -resourceTypeToString : ResourceType -> String -resourceTypeToString value = - case value of - ResourceType__Article -> - "Article" - - ResourceType__Book -> - "Book" - - ResourceType__Course -> - "Course" - - ResourceType__InteractiveTutorial -> - "Interactive Tutorial" - - ResourceType__Video -> - "Video" - - -resourceTypeFromString : String -> Maybe ResourceType -resourceTypeFromString value = - case value of - "Article" -> - Just ResourceType__Article - - "Book" -> - Just ResourceType__Book - "Course" -> - Just ResourceType__Course - - "Interactive Tutorial" -> - Just ResourceType__InteractiveTutorial +{-| Fields: - "Video" -> - Just ResourceType__Video + - paradigms: The programming paradigms that this language focuses on, e.g. 'Object-Oriented Programming', 'Functional Programming', 'Procedural Programming', etc. - _ -> - Nothing +-} +type alias CategoryLanguage = + { paradigms : List ProgrammingParadigm, type_ : String } -resourceTypeVariants : List ResourceType -resourceTypeVariants = - [ ResourceType__Article - , ResourceType__Book - , ResourceType__Course - , ResourceType__InteractiveTutorial - , ResourceType__Video - ] +{-| A platform used to learn programming, which may teach a variety of languages and concepts. +-} +type alias CategoryPlatform = + { type_ : String } -type alias ResourceCategory = - CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool +type alias CategoryTool = + { type_ : String } {-| Fields: - - cons: Array of cons for using the resource, e.g. 'only teaches the basics rather than more advanced concepts' - - description: A brief description of the resource - - name: The official name of the resource - - pros: Array of pros for using the resource, e.g. 'explains difficult concepts with good analogies' - - teaches: The topics that this resource teaches. - - type: The type(s) of the resource, e.g. 'Video', 'Book', 'Course', etc. - - url: URL to the resource + - description: A brief description of the language, tool, etc being described by this metadata. + - domains: The domain(s) that the entity is commonly used in, or best suited for. + - emoji: A Unicode emoji glyph to represent the entity, if applicable. If there is no suitable (Unicode) emoji, omit this field. Consumers may choose to ignore this field, or replace it with a custom image. + - name: The name of the language, tool, etc being described by this metadata. -} -type alias Resource = - { cons : Maybe (List String) - , description : Maybe String +type alias CompiledMeta = + { category : ResourceCategory + , description : String + , domains : List LanguageDomain + , emoji : Maybe String + , icon : Maybe EntityIcon + , id : EntityTag , name : String - , pricing : Pricing - , pros : Maybe (List String) - , teaches : List EntityTag - , type_ : List ResourceType - , url : String } -{-| A programming paradigm. --} -type ProgrammingParadigm - = ProgrammingParadigm__FunctionalProgramming - | ProgrammingParadigm__LogicProgramming - | ProgrammingParadigm__ObjectOrientedProgramming - | ProgrammingParadigm__ProceduralProgramming - +{-| Fields: -programmingParadigmToString : ProgrammingParadigm -> String -programmingParadigmToString value = - case value of - ProgrammingParadigm__FunctionalProgramming -> - "Functional Programming" + - metadata: List of all entities in the system + - resources: List of all learning resources - ProgrammingParadigm__LogicProgramming -> - "Logic Programming" +-} +type alias Database = + { metadata : List CompiledMeta, resources : List Resource } - ProgrammingParadigm__ObjectOrientedProgramming -> - "Object-Oriented Programming" - ProgrammingParadigm__ProceduralProgramming -> - "Procedural Programming" +{-| The SVG icon(s) representing an entity. + - dark: Relative path to a variant of the icon intended for dark backgrounds, if one exists. + - default: Relative path to the entity's SVG icon, e.g. 'icons/rust.svg'. Where possible, this should be suitable for a light background. -programmingParadigmFromString : String -> Maybe ProgrammingParadigm -programmingParadigmFromString value = - case value of - "Functional Programming" -> - Just ProgrammingParadigm__FunctionalProgramming +-} +type alias EntityIcon = + { dark : Maybe String, default : String } - "Logic Programming" -> - Just ProgrammingParadigm__LogicProgramming - "Object-Oriented Programming" -> - Just ProgrammingParadigm__ObjectOrientedProgramming +{-| Fields: - "Procedural Programming" -> - Just ProgrammingParadigm__ProceduralProgramming + - model: The Free(mium) Pricing Model of this resource. 'Free' should be used for resources where 100% (or close) of the content is free. 'Freemium' describes a pricing model where the core content is available for free, but features paid extensions. If the resource has a freemium model but the free portion is very limited, consider using 'Paid' instead and providing an estimated price for the full version. - _ -> - Nothing +-} +type alias FreePricing = + { model : String } -programmingParadigmVariants : List ProgrammingParadigm -programmingParadigmVariants = - [ ProgrammingParadigm__FunctionalProgramming - , ProgrammingParadigm__LogicProgramming - , ProgrammingParadigm__ObjectOrientedProgramming - , ProgrammingParadigm__ProceduralProgramming - ] +{-| Fields: + - description: A brief description of the language, tool, etc being described by this metadata. + - domains: The domain(s) that the entity is commonly used in, or best suited for. + - emoji: A Unicode emoji glyph to represent the entity, if applicable. If there is no suitable (Unicode) emoji, omit this field. Consumers may choose to ignore this field, or replace it with a custom image. + - name: The name of the language, tool, etc being described by this metadata. -{-| Details about the cost of the resource. -} -type alias Pricing = - FreePricing_Or_PaidPricing +type alias Meta = + { category : ResourceCategory + , description : String + , domains : List LanguageDomain + , emoji : Maybe String + , name : String + } {-| Fields: @@ -189,23 +126,54 @@ type alias PaidPricing = { amount : Float, model : String } +{-| Details about the cost of the resource. +-} +type alias Pricing = + FreePricing_Or_PaidPricing + + {-| Fields: - - description: A brief description of the language, tool, etc being described by this metadata. - - domains: The domain(s) that the entity is commonly used in, or best suited for. - - emoji: A Unicode emoji glyph to represent the entity, if applicable. If there is no suitable (Unicode) emoji, omit this field. Consumers may choose to ignore this field, or replace it with a custom image. - - name: The name of the language, tool, etc being described by this metadata. + - cons: Array of cons for using the resource, e.g. 'only teaches the basics rather than more advanced concepts' + - description: A brief description of the resource + - name: The official name of the resource + - pros: Array of pros for using the resource, e.g. 'explains difficult concepts with good analogies' + - teaches: The topics that this resource teaches. + - type\_: The type(s) of the resource, e.g. 'Video', 'Book', 'Course', etc. + - url: URL to the resource -} -type alias Meta = - { category : ResourceCategory - , description : String - , domains : List LanguageDomain - , emoji : Maybe String +type alias Resource = + { cons : Maybe (List String) + , description : Maybe String , name : String + , pricing : Pricing + , pros : Maybe (List String) + , teaches : List EntityTag + , type_ : List ResourceType + , url : Url.Url } +type alias ResourceCategory = + CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool + + +type EntityTag + = EntityTag__Clojure + | EntityTag__Cpp + | EntityTag__General + | EntityTag__Git + | EntityTag__Haskell + | EntityTag__Java + | EntityTag__Kotlin + | EntityTag__Php + | EntityTag__ProgrammingLanguageDesign + | EntityTag__Python + | EntityTag__Rust + | EntityTag__Sql + + {-| A domain that a programming language may be used in. -} type LanguageDomain @@ -219,100 +187,66 @@ type LanguageDomain | LanguageDomain__WebDevelopment -languageDomainToString : LanguageDomain -> String -languageDomainToString value = - case value of - LanguageDomain__DataScience -> - "Data Science" - - LanguageDomain__DevOps -> - "DevOps" - - LanguageDomain__GameDevelopment -> - "Game Development" - - LanguageDomain__GeneralPurpose -> - "General Purpose" - - LanguageDomain__MobileDevelopment -> - "Mobile Development" - - LanguageDomain__Scripting -> - "Scripting" +{-| A programming paradigm. +-} +type ProgrammingParadigm + = ProgrammingParadigm__FunctionalProgramming + | ProgrammingParadigm__LogicProgramming + | ProgrammingParadigm__ObjectOrientedProgramming + | ProgrammingParadigm__ProceduralProgramming - LanguageDomain__SystemsProgramming -> - "Systems Programming" - LanguageDomain__WebDevelopment -> - "Web Development" +{-| The type of the resource +-} +type ResourceType + = ResourceType__Article + | ResourceType__Book + | ResourceType__Course + | ResourceType__InteractiveTutorial + | ResourceType__Video -languageDomainFromString : String -> Maybe LanguageDomain -languageDomainFromString value = +entityTagFromString : String -> Maybe EntityTag +entityTagFromString value = case value of - "Data Science" -> - Just LanguageDomain__DataScience - - "DevOps" -> - Just LanguageDomain__DevOps - - "Game Development" -> - Just LanguageDomain__GameDevelopment - - "General Purpose" -> - Just LanguageDomain__GeneralPurpose - - "Mobile Development" -> - Just LanguageDomain__MobileDevelopment - - "Scripting" -> - Just LanguageDomain__Scripting + "clojure" -> + Just EntityTag__Clojure - "Systems Programming" -> - Just LanguageDomain__SystemsProgramming + "cpp" -> + Just EntityTag__Cpp - "Web Development" -> - Just LanguageDomain__WebDevelopment + "general" -> + Just EntityTag__General - _ -> - Nothing + "git" -> + Just EntityTag__Git + "haskell" -> + Just EntityTag__Haskell -languageDomainVariants : List LanguageDomain -languageDomainVariants = - [ LanguageDomain__DataScience - , LanguageDomain__DevOps - , LanguageDomain__GameDevelopment - , LanguageDomain__GeneralPurpose - , LanguageDomain__MobileDevelopment - , LanguageDomain__Scripting - , LanguageDomain__SystemsProgramming - , LanguageDomain__WebDevelopment - ] + "java" -> + Just EntityTag__Java + "kotlin" -> + Just EntityTag__Kotlin -{-| Fields: + "php" -> + Just EntityTag__Php - - model: The Free(mium) Pricing Model of this resource. 'Free' should be used for resources where 100% (or close) of the content is free. 'Freemium' describes a pricing model where the core content is available for free, but features paid extensions. If the resource has a freemium model but the free portion is very limited, consider using 'Paid' instead and providing an estimated price for the full version. + "programming-language-design" -> + Just EntityTag__ProgrammingLanguageDesign --} -type alias FreePricing = - { model : String } + "python" -> + Just EntityTag__Python + "rust" -> + Just EntityTag__Rust -type EntityTag - = EntityTag__Clojure - | EntityTag__Cpp - | EntityTag__General - | EntityTag__Git - | EntityTag__Haskell - | EntityTag__Java - | EntityTag__Kotlin - | EntityTag__Php - | EntityTag__ProgrammingLanguageDesign - | EntityTag__Python - | EntityTag__Rust - | EntityTag__Sql + "sql" -> + Just EntityTag__Sql + + _ -> + Nothing entityTagToString : EntityTag -> String @@ -355,111 +289,188 @@ entityTagToString value = "sql" -entityTagFromString : String -> Maybe EntityTag -entityTagFromString value = +entityTagVariants : List EntityTag +entityTagVariants = + [ EntityTag__Clojure + , EntityTag__Cpp + , EntityTag__General + , EntityTag__Git + , EntityTag__Haskell + , EntityTag__Java + , EntityTag__Kotlin + , EntityTag__Php + , EntityTag__ProgrammingLanguageDesign + , EntityTag__Python + , EntityTag__Rust + , EntityTag__Sql + ] + + +languageDomainFromString : String -> Maybe LanguageDomain +languageDomainFromString value = case value of - "clojure" -> - Just EntityTag__Clojure + "Data Science" -> + Just LanguageDomain__DataScience - "cpp" -> - Just EntityTag__Cpp + "DevOps" -> + Just LanguageDomain__DevOps - "general" -> - Just EntityTag__General + "Game Development" -> + Just LanguageDomain__GameDevelopment - "git" -> - Just EntityTag__Git + "General Purpose" -> + Just LanguageDomain__GeneralPurpose - "haskell" -> - Just EntityTag__Haskell + "Mobile Development" -> + Just LanguageDomain__MobileDevelopment - "java" -> - Just EntityTag__Java + "Scripting" -> + Just LanguageDomain__Scripting - "kotlin" -> - Just EntityTag__Kotlin + "Systems Programming" -> + Just LanguageDomain__SystemsProgramming - "php" -> - Just EntityTag__Php + "Web Development" -> + Just LanguageDomain__WebDevelopment - "programming-language-design" -> - Just EntityTag__ProgrammingLanguageDesign + _ -> + Nothing - "python" -> - Just EntityTag__Python - "rust" -> - Just EntityTag__Rust +languageDomainToString : LanguageDomain -> String +languageDomainToString value = + case value of + LanguageDomain__DataScience -> + "Data Science" - "sql" -> - Just EntityTag__Sql + LanguageDomain__DevOps -> + "DevOps" + + LanguageDomain__GameDevelopment -> + "Game Development" + + LanguageDomain__GeneralPurpose -> + "General Purpose" + + LanguageDomain__MobileDevelopment -> + "Mobile Development" + + LanguageDomain__Scripting -> + "Scripting" + + LanguageDomain__SystemsProgramming -> + "Systems Programming" + + LanguageDomain__WebDevelopment -> + "Web Development" + + +languageDomainVariants : List LanguageDomain +languageDomainVariants = + [ LanguageDomain__DataScience + , LanguageDomain__DevOps + , LanguageDomain__GameDevelopment + , LanguageDomain__GeneralPurpose + , LanguageDomain__MobileDevelopment + , LanguageDomain__Scripting + , LanguageDomain__SystemsProgramming + , LanguageDomain__WebDevelopment + ] + + +programmingParadigmFromString : String -> Maybe ProgrammingParadigm +programmingParadigmFromString value = + case value of + "Functional Programming" -> + Just ProgrammingParadigm__FunctionalProgramming + + "Logic Programming" -> + Just ProgrammingParadigm__LogicProgramming + + "Object-Oriented Programming" -> + Just ProgrammingParadigm__ObjectOrientedProgramming + + "Procedural Programming" -> + Just ProgrammingParadigm__ProceduralProgramming _ -> Nothing -entityTagVariants : List EntityTag -entityTagVariants = - [ EntityTag__Clojure - , EntityTag__Cpp - , EntityTag__General - , EntityTag__Git - , EntityTag__Haskell - , EntityTag__Java - , EntityTag__Kotlin - , EntityTag__Php - , EntityTag__ProgrammingLanguageDesign - , EntityTag__Python - , EntityTag__Rust - , EntityTag__Sql - ] +programmingParadigmToString : ProgrammingParadigm -> String +programmingParadigmToString value = + case value of + ProgrammingParadigm__FunctionalProgramming -> + "Functional Programming" + ProgrammingParadigm__LogicProgramming -> + "Logic Programming" -{-| Fields: + ProgrammingParadigm__ObjectOrientedProgramming -> + "Object-Oriented Programming" - - metadata: List of all entities in the system - - resources: List of all learning resources + ProgrammingParadigm__ProceduralProgramming -> + "Procedural Programming" --} -type alias Database = - { metadata : List CompiledMeta, resources : List Resource } +programmingParadigmVariants : List ProgrammingParadigm +programmingParadigmVariants = + [ ProgrammingParadigm__FunctionalProgramming + , ProgrammingParadigm__LogicProgramming + , ProgrammingParadigm__ObjectOrientedProgramming + , ProgrammingParadigm__ProceduralProgramming + ] -{-| Fields: - - description: A brief description of the language, tool, etc being described by this metadata. - - domains: The domain(s) that the entity is commonly used in, or best suited for. - - emoji: A Unicode emoji glyph to represent the entity, if applicable. If there is no suitable (Unicode) emoji, omit this field. Consumers may choose to ignore this field, or replace it with a custom image. - - name: The name of the language, tool, etc being described by this metadata. +resourceTypeFromString : String -> Maybe ResourceType +resourceTypeFromString value = + case value of + "Article" -> + Just ResourceType__Article --} -type alias CompiledMeta = - { category : ResourceCategory - , description : String - , domains : List LanguageDomain - , emoji : Maybe String - , id : EntityTag - , name : String - } + "Book" -> + Just ResourceType__Book + "Course" -> + Just ResourceType__Course -type alias CategoryTool = - { type_ : String } + "Interactive Tutorial" -> + Just ResourceType__InteractiveTutorial + "Video" -> + Just ResourceType__Video -{-| A platform used to learn programming, which may teach a variety of languages and concepts. --} -type alias CategoryPlatform = - { type_ : String } + _ -> + Nothing -{-| Fields: +resourceTypeToString : ResourceType -> String +resourceTypeToString value = + case value of + ResourceType__Article -> + "Article" - - paradigms: The programming paradigms that this language focuses on, e.g. 'Object-Oriented Programming', 'Functional Programming', 'Procedural Programming', etc. + ResourceType__Book -> + "Book" --} -type alias CategoryLanguage = - { paradigms : List ProgrammingParadigm, type_ : String } + ResourceType__Course -> + "Course" + + ResourceType__InteractiveTutorial -> + "Interactive Tutorial" + + ResourceType__Video -> + "Video" + + +resourceTypeVariants : List ResourceType +resourceTypeVariants = + [ ResourceType__Article + , ResourceType__Book + , ResourceType__Course + , ResourceType__InteractiveTutorial + , ResourceType__Video + ] type CategoryLanguage_Or_CategoryPlatform_Or_CategoryTool diff --git a/src/OpenApi/Common.elm b/src/OpenApi/Common.elm index 9f0b0ce..de72407 100644 --- a/src/OpenApi/Common.elm +++ b/src/OpenApi/Common.elm @@ -1,27 +1,31 @@ module OpenApi.Common exposing - ( Nullable(..) - , decodeOptionalField, jsonDecodeAndMap - , Error(..), bytesResolverCustom, expectBytesCustom, expectJsonCustom, expectStringCustom, jsonResolverCustom - , stringResolverCustom + ( encodeStringUri, toParamStringStringUri + , decodeStringUri + , Nullable(..), Error(..), jsonDecodeAndMap, decodeOptionalField + , bytesResolverCustom, expectBytesCustom, stringResolverCustom, expectStringCustom, jsonResolverCustom, expectJsonCustom ) {-| -## Types +## Encoders -@docs Nullable +@docs encodeStringUri, toParamStringStringUri ## Decoders -@docs decodeOptionalField, jsonDecodeAndMap +@docs decodeStringUri -## Http +## Common -@docs Error, bytesResolverCustom, expectBytesCustom, expectJsonCustom, expectStringCustom, jsonResolverCustom -@docs stringResolverCustom +@docs Nullable, Error, jsonDecodeAndMap, decodeOptionalField + + +## elm/http + +@docs bytesResolverCustom, expectBytesCustom, stringResolverCustom, expectStringCustom, jsonResolverCustom, expectJsonCustom -} @@ -30,300 +34,57 @@ import Bytes.Decode import Dict import Http import Json.Decode +import Json.Encode +import Url -expectJsonCustom : - (Result (Error err String) success -> msg) - -> Dict.Dict String (Json.Decode.Decoder err) - -> Json.Decode.Decoder success - -> Http.Expect msg -expectJsonCustom toMsg errorDecoders successDecoder = - Http.expectStringResponse - toMsg - (\expectStringResponseUnpack -> - case expectStringResponseUnpack of - Http.BadUrl_ stringString -> - Result.Err (BadUrl stringString) - - Http.Timeout_ -> - Result.Err Timeout - - Http.NetworkError_ -> - Result.Err NetworkError - - Http.BadStatus_ httpMetadata body -> - case - Dict.get - (String.fromInt httpMetadata.statusCode) - errorDecoders - of - Maybe.Just a -> - case Json.Decode.decodeString a body of - Result.Ok value -> - Result.Err - (KnownBadStatus - httpMetadata.statusCode - value - ) - - Result.Err error -> - Result.Err (BadErrorBody httpMetadata body) - - Maybe.Nothing -> - Result.Err (UnknownBadStatus httpMetadata body) - - Http.GoodStatus_ httpMetadata body -> - case Json.Decode.decodeString successDecoder body of - Result.Ok value -> - Result.Ok value - - Result.Err error -> - Result.Err (BadBody httpMetadata body) - ) +encodeStringUri : Url.Url -> Json.Encode.Value +encodeStringUri value = + Json.Encode.string (Url.toString value) -jsonResolverCustom : - Dict.Dict String (Json.Decode.Decoder err) - -> Json.Decode.Decoder success - -> Http.Resolver (Error err String) success -jsonResolverCustom errorDecoders successDecoder = - Http.stringResolver - (\stringResolverUnpack -> - case stringResolverUnpack of - Http.BadUrl_ stringString -> - Result.Err (BadUrl stringString) - - Http.Timeout_ -> - Result.Err Timeout - - Http.NetworkError_ -> - Result.Err NetworkError - - Http.BadStatus_ httpMetadata body -> - case - Dict.get - (String.fromInt httpMetadata.statusCode) - errorDecoders - of - Maybe.Just a -> - case Json.Decode.decodeString a body of - Result.Ok value -> - Result.Err - (KnownBadStatus - httpMetadata.statusCode - value - ) - - Result.Err error -> - Result.Err (BadErrorBody httpMetadata body) - - Maybe.Nothing -> - Result.Err (UnknownBadStatus httpMetadata body) - - Http.GoodStatus_ httpMetadata body -> - case Json.Decode.decodeString successDecoder body of - Result.Ok value -> - Result.Ok value - - Result.Err error -> - Result.Err (BadBody httpMetadata body) - ) +toParamStringStringUri : Url.Url -> String +toParamStringStringUri = + Url.toString -expectStringCustom : - (Result (Error err String) String -> msg) - -> Dict.Dict String (Json.Decode.Decoder err) - -> Http.Expect msg -expectStringCustom toMsg errorDecoders = - Http.expectStringResponse - toMsg - (\expectStringResponseUnpack -> - case expectStringResponseUnpack of - Http.BadUrl_ stringString -> - Result.Err (BadUrl stringString) - - Http.Timeout_ -> - Result.Err Timeout - - Http.NetworkError_ -> - Result.Err NetworkError - - Http.BadStatus_ httpMetadata body -> - case - Dict.get - (String.fromInt httpMetadata.statusCode) - errorDecoders - of - Maybe.Just a -> - case Json.Decode.decodeString a body of - Result.Ok value -> - Result.Err - (KnownBadStatus - httpMetadata.statusCode - value - ) - - Result.Err error -> - Result.Err (BadErrorBody httpMetadata body) - - Maybe.Nothing -> - Result.Err (UnknownBadStatus httpMetadata body) - - Http.GoodStatus_ httpMetadata body -> - Result.Ok body +decodeStringUri : Json.Decode.Decoder Url.Url +decodeStringUri = + Json.Decode.andThen + (\andThenUnpack -> + case Url.fromString andThenUnpack of + Maybe.Just a -> + Json.Decode.succeed a + + Maybe.Nothing -> + Json.Decode.fail (andThenUnpack ++ " is not a valid URL") ) + Json.Decode.string -stringResolverCustom : - Dict.Dict String (Json.Decode.Decoder err) - -> Http.Resolver (Error err String) String -stringResolverCustom errorDecoders = - Http.stringResolver - (\stringResolverUnpack -> - case stringResolverUnpack of - Http.BadUrl_ stringString -> - Result.Err (BadUrl stringString) - - Http.Timeout_ -> - Result.Err Timeout - - Http.NetworkError_ -> - Result.Err NetworkError - - Http.BadStatus_ httpMetadata body -> - case - Dict.get - (String.fromInt httpMetadata.statusCode) - errorDecoders - of - Maybe.Just a -> - case Json.Decode.decodeString a body of - Result.Ok value -> - Result.Err - (KnownBadStatus - httpMetadata.statusCode - value - ) - - Result.Err error -> - Result.Err (BadErrorBody httpMetadata body) - - Maybe.Nothing -> - Result.Err (UnknownBadStatus httpMetadata body) - - Http.GoodStatus_ httpMetadata body -> - Result.Ok body - ) +type Nullable value + = Null + | Present value -expectBytesCustom : - (Result (Error err Bytes.Bytes) Bytes.Bytes -> msg) - -> Dict.Dict String (Json.Decode.Decoder err) - -> Http.Expect msg -expectBytesCustom toMsg errorDecoders = - Http.expectBytesResponse - toMsg - (\expectBytesResponseUnpack -> - case expectBytesResponseUnpack of - Http.BadUrl_ stringString -> - Result.Err (BadUrl stringString) - - Http.Timeout_ -> - Result.Err Timeout - - Http.NetworkError_ -> - Result.Err NetworkError - - Http.BadStatus_ httpMetadata body -> - case - Dict.get - (String.fromInt httpMetadata.statusCode) - errorDecoders - of - Maybe.Just a -> - case - Json.Decode.decodeString - a - (Maybe.withDefault - "" - (Bytes.Decode.decode - (Bytes.Decode.string - (Bytes.width body) - ) - body - ) - ) - of - Result.Ok value -> - Result.Err - (KnownBadStatus - httpMetadata.statusCode - value - ) - - Result.Err error -> - Result.Err (BadErrorBody httpMetadata body) - - Maybe.Nothing -> - Result.Err (UnknownBadStatus httpMetadata body) - - Http.GoodStatus_ httpMetadata body -> - Result.Ok body - ) +type Error err body + = BadUrl String + | Timeout + | NetworkError + | KnownBadStatus Int err + | UnknownBadStatus Http.Metadata body + | BadErrorBody Http.Metadata body + | BadBody Http.Metadata body -bytesResolverCustom : - Dict.Dict String (Json.Decode.Decoder err) - -> Http.Resolver (Error err Bytes.Bytes) Bytes.Bytes -bytesResolverCustom errorDecoders = - Http.bytesResolver - (\bytesResolverUnpack -> - case bytesResolverUnpack of - Http.BadUrl_ stringString -> - Result.Err (BadUrl stringString) - - Http.Timeout_ -> - Result.Err Timeout - - Http.NetworkError_ -> - Result.Err NetworkError - - Http.BadStatus_ httpMetadata body -> - case - Dict.get - (String.fromInt httpMetadata.statusCode) - errorDecoders - of - Maybe.Just a -> - case - Json.Decode.decodeString - a - (Maybe.withDefault - "" - (Bytes.Decode.decode - (Bytes.Decode.string - (Bytes.width body) - ) - body - ) - ) - of - Result.Ok value -> - Result.Err - (KnownBadStatus - httpMetadata.statusCode - value - ) - - Result.Err error -> - Result.Err (BadErrorBody httpMetadata body) - - Maybe.Nothing -> - Result.Err (UnknownBadStatus httpMetadata body) - - Http.GoodStatus_ httpMetadata body -> - Result.Ok body - ) +{-| Chain JSON decoders, when `Json.Decode.map8` isn't enough. +-} +jsonDecodeAndMap : + Json.Decode.Decoder a + -> Json.Decode.Decoder (a -> value) + -> Json.Decode.Decoder value +jsonDecodeAndMap dx df = + Json.Decode.map2 (|>) dx df {-| Decode an optional field @@ -363,26 +124,146 @@ decodeOptionalField key fieldDecoder = ) -{-| Chain JSON decoders, when `Json.Decode.map8` isn't enough. --} -jsonDecodeAndMap : - Json.Decode.Decoder a - -> Json.Decode.Decoder (a -> value) - -> Json.Decode.Decoder value -jsonDecodeAndMap = - Json.Decode.map2 (|>) +responseToResult : + Dict.Dict String (Json.Decode.Decoder err) + -> (body -> String) + -> (Http.Metadata -> body -> Result (Error err body) value) + -> Http.Response body + -> Result (Error err body) value +responseToResult errorDecoders bodyToString onSuccess response = + case response of + Http.BadUrl_ arg_0 -> + Result.Err (BadUrl arg_0) + Http.Timeout_ -> + Result.Err Timeout -type Error err body - = BadUrl String - | Timeout - | NetworkError - | KnownBadStatus Int err - | UnknownBadStatus Http.Metadata body - | BadErrorBody Http.Metadata body - | BadBody Http.Metadata body + Http.NetworkError_ -> + Result.Err NetworkError + Http.BadStatus_ httpMetadata body -> + case + Dict.get (String.fromInt httpMetadata.statusCode) errorDecoders + of + Nothing -> + Result.Err (UnknownBadStatus httpMetadata body) -type Nullable value - = Null - | Present value + Just err -> + case Json.Decode.decodeString err (bodyToString body) of + Ok res -> + Result.Err + (KnownBadStatus httpMetadata.statusCode res) + + Err _ -> + Result.Err (BadErrorBody httpMetadata body) + + Http.GoodStatus_ httpMetadata body -> + onSuccess httpMetadata body + + +bytesResolverCustom : + Dict.Dict String (Json.Decode.Decoder err) + -> Http.Resolver (Error err Bytes.Bytes) Bytes.Bytes +bytesResolverCustom errorDecoders = + Http.bytesResolver + (responseToResult + errorDecoders + (\body -> + Maybe.withDefault + "" + (Bytes.Decode.decode + (Bytes.Decode.string (Bytes.width body)) + body + ) + ) + (\metadata body -> Result.Ok body) + ) + + +expectBytesCustom : + Dict.Dict String (Json.Decode.Decoder err) + -> (Result (Error err Bytes.Bytes) Bytes.Bytes -> msg) + -> Http.Expect msg +expectBytesCustom errorDecoders toMsg = + Http.expectBytesResponse + toMsg + (responseToResult + errorDecoders + (\body -> + Maybe.withDefault + "" + (Bytes.Decode.decode + (Bytes.Decode.string (Bytes.width body)) + body + ) + ) + (\metadata body -> Result.Ok body) + ) + + +stringResolverCustom : + Dict.Dict String (Json.Decode.Decoder err) + -> Http.Resolver (Error err String) String +stringResolverCustom errorDecoders = + Http.stringResolver + (responseToResult + errorDecoders + Basics.identity + (\metadata body -> Result.Ok body) + ) + + +expectStringCustom : + Dict.Dict String (Json.Decode.Decoder err) + -> (Result (Error err String) String -> msg) + -> Http.Expect msg +expectStringCustom errorDecoders toMsg = + Http.expectStringResponse + toMsg + (responseToResult + errorDecoders + Basics.identity + (\metadata body -> Result.Ok body) + ) + + +jsonResolverCustom : + Dict.Dict String (Json.Decode.Decoder err) + -> Json.Decode.Decoder success + -> Http.Resolver (Error err String) success +jsonResolverCustom errorDecoders successDecoder = + Http.stringResolver + (responseToResult + errorDecoders + Basics.identity + (\metadata body -> + case Json.Decode.decodeString successDecoder body of + Ok res -> + Result.Ok res + + Err _ -> + Result.Err (BadBody metadata body) + ) + ) + + +expectJsonCustom : + Dict.Dict String (Json.Decode.Decoder err) + -> Json.Decode.Decoder success + -> (Result (Error err String) success -> msg) + -> Http.Expect msg +expectJsonCustom errorDecoders successDecoder toMsg = + Http.expectStringResponse + toMsg + (responseToResult + errorDecoders + Basics.identity + (\metadata body -> + case Json.Decode.decodeString successDecoder body of + Ok res -> + Result.Ok res + + Err _ -> + Result.Err (BadBody metadata body) + ) + ) From d86da46c1b2fcf1ed80b042b8a4e4e44ca4a1b10 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 10:10:27 +0100 Subject: [PATCH 37/48] feat: use defined icons for learning resources --- app/Route/Learning.elm | 4 ++-- app/Route/Learning/Resource_.elm | 9 ++++++--- src/Theming.elm | 24 +++++++++++++++++++++++- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/app/Route/Learning.elm b/app/Route/Learning.elm index 6c214ed..9155285 100644 --- a/app/Route/Learning.elm +++ b/app/Route/Learning.elm @@ -11,7 +11,6 @@ import Html.Styled as Html exposing (Html, div, span, text) import Html.Styled.Attributes as Attr exposing (css) import Html.Styled.Events exposing (onInput) import LearningResources as Db -import LearningResources.Emojis as Emojis import LearningResources.Types as LearningResources import Pages.Url import PagesMsg exposing (PagesMsg) @@ -194,6 +193,7 @@ viewCategorySection category items = (List.map (viewTopicCard accent) items) ] + categoryAccent : String -> Theming.Accent categoryAccent category = case category of @@ -224,7 +224,7 @@ viewTopicCard accent meta = ] [ div [ css [ Tw.p_6 ] ] [ div [ css [ Tw.flex, Tw.items_center, Tw.gap_3, Tw.mb_3 ] ] - [ div [ css [ Tw.text_2xl ] ] [ text (Emojis.emojiOrBackup meta) ] + [ Theming.entityIcon (Css.batch [ Tw.w_8, Tw.h_8, Tw.text_2xl ]) meta , Html.h3 [ css [ Theming.headingFont, Tw.text_xl, Tw.font_semibold, Tw.m_0 ] ] [ text meta.name ] ] , Html.p diff --git a/app/Route/Learning/Resource_.elm b/app/Route/Learning/Resource_.elm index 167cc3f..3e61896 100644 --- a/app/Route/Learning/Resource_.elm +++ b/app/Route/Learning/Resource_.elm @@ -159,6 +159,9 @@ viewSidebarLink activeSlug meta = [ Attr.href (UrlPath.toAbsolute (Route.toPath (Route.Learning__Resource_ { resource = metaSlug }))) , css [ Theming.headingFont + , Tw.flex + , Tw.items_center + , Tw.gap_2 , Tw.text_sm , Tw.no_underline , Tw.py_2 @@ -183,7 +186,7 @@ viewSidebarLink activeSlug meta = , Css.hover [ Tw.text_color Tw.dd_text, Tw.bg_color Tw.dd_deepblueLighter ] ] ] - [ text (Emojis.emojiOrBackup meta ++ " " ++ meta.name) ] + [ Theming.entityIcon (Css.batch [ Tw.w_5, Tw.h_5 ]) meta, text meta.name ] viewTopicHeader : Maybe LearningResources.CompiledMeta -> Html Msg @@ -195,7 +198,7 @@ viewTopicHeader maybeMeta = Just meta -> div [ css [ Tw.mb_12, Tw.border_b, Tw.border_color Tw.dd_border, Tw.pb_8 ] ] [ div [ css [ Tw.flex, Tw.items_center, Tw.gap_4, Tw.mb_6 ] ] - [ div [ css [ Tw.text_5xl ] ] [ text (Emojis.emojiOrBackup meta) ] + [ Theming.entityIcon (Css.batch [ Tw.w_14, Tw.h_14, Tw.text_5xl ]) meta , Theming.pageTitle meta.name ] , Html.p [ css [ Theming.bodyFont, Tw.text_xl, Tw.m_0, Tw.mb_4 ] ] @@ -225,7 +228,7 @@ viewResourceCard resource = , Html.p [ css [ Theming.bodyFont, Tw.text_sm, Tw.mb_6, Tw.flex_grow ] ] [ text (Maybe.withDefault "No description provided." resource.description) ] , Html.a - [ Attr.href resource.url + [ Attr.href (Url.toString resource.url) , Attr.target "_blank" , css [ Theming.headingFont diff --git a/src/Theming.elm b/src/Theming.elm index 19e1d57..cbeec0c 100644 --- a/src/Theming.elm +++ b/src/Theming.elm @@ -1,8 +1,11 @@ -module Theming exposing (Accent(..), accentColour, badgeStyle, bodyFont, brandGradientBg, cardShell, gradientButton, gutter, headingFont, pageTitle, quietLink, themedImage) +module Theming exposing (Accent(..), accentColour, badgeStyle, bodyFont, brandGradientBg, cardShell, entityIcon, gradientButton, gutter, headingFont, pageTitle, quietLink, themedImage) import Css import Html.Styled as Html exposing (Html) import Html.Styled.Attributes as Attr +import LearningResources +import LearningResources.Emojis as Emojis +import LearningResources.Types exposing (CompiledMeta) import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw @@ -121,6 +124,25 @@ themedImage config styles = ] +{-| A topic's icon at the given size, picking the dark variant on dark backgrounds. Uses the emoji if there's no icon defined +-} +entityIcon : Css.Style -> CompiledMeta -> Html msg +entityIcon size meta = + case meta.icon of + Just icon -> + Html.span [ Attr.css [ Css.display Css.inlineFlex, Css.flexShrink (Css.int 0) ] ] + (themedImage + { dark = LearningResources.iconUrl (Maybe.withDefault icon.default icon.dark) + , light = LearningResources.iconUrl icon.default + , alt = "" + } + [ size, Css.property "object-fit" "contain" ] + ) + + Nothing -> + Html.span [ Attr.css [ size ] ] [ Html.text (Emojis.emojiOrBackup meta) ] + + type Accent = Teal | Indigo From 48ea0c3c86265f5aab9188c66064eb39d3ca1b67 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 10:12:27 +0100 Subject: [PATCH 38/48] feat: add SEO tags and banners to pages --- app/Route/Index.elm | 46 ++++++++++++++------- app/Route/Learning/Resource_.elm | 69 ++++++++++++++++++++++++-------- app/Route/Rules.elm | 2 +- app/Site.elm | 5 +++ 4 files changed, 90 insertions(+), 32 deletions(-) diff --git a/app/Route/Index.elm b/app/Route/Index.elm index 30548b3..3864e66 100644 --- a/app/Route/Index.elm +++ b/app/Route/Index.elm @@ -6,6 +6,7 @@ import Head import Head.Seo as Seo import Html.Styled exposing (Html, a, div, h1, i, p, text) import Html.Styled.Attributes as Attr exposing (css, href, target) +import Json.Encode import Pages.Url import PagesMsg exposing (PagesMsg) import Redirects @@ -49,20 +50,35 @@ route = head : App Data ActionData RouteParams -> List Head.Tag head _ = - Seo.summary - { canonicalUrlOverride = Nothing - , siteName = "Developer Den" - , image = - { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath - , alt = "Developer Den" - , dimensions = Nothing - , mimeType = Nothing - } - , description = "Developer Den is a community of programmers learning and building together." - , locale = Nothing - , title = "Home" - } - |> Seo.website + Head.structuredData organisation + :: (Seo.summary + { canonicalUrlOverride = Nothing + , siteName = "Developer Den" + , image = + { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath + , alt = "Developer Den" + , dimensions = Nothing + , mimeType = Nothing + } + , description = "Developer Den is a community of programmers learning and building together." + , locale = Nothing + , title = "Home" + } + |> Seo.website + ) + + +{-| schema.org `Organization`, so search engines can associate the site with Developer Den. +-} +organisation : Json.Encode.Value +organisation = + Json.Encode.object + [ ( "@context", Json.Encode.string "https://schema.org" ) + , ( "@type", Json.Encode.string "Organization" ) + , ( "name", Json.Encode.string "Developer Den" ) + , ( "url", Json.Encode.string "https://developerden.org" ) + , ( "logo", Json.Encode.string "https://developerden.org/devden-logo.svg" ) + ] view : App Data ActionData RouteParams -> Shared.Model -> View (PagesMsg Msg) @@ -98,7 +114,7 @@ viewHero = ] -{-| A fake text layer on top of the SVG logo to allow the text to be highlighted and read by screen readers etc +{-| A fake text layer on top of the SVG logo to allow the text to be highlighted and read by screen readers etc -} viewTitle : Html Msg viewTitle = diff --git a/app/Route/Learning/Resource_.elm b/app/Route/Learning/Resource_.elm index 3e61896..fded139 100644 --- a/app/Route/Learning/Resource_.elm +++ b/app/Route/Learning/Resource_.elm @@ -7,8 +7,8 @@ import Head import Head.Seo as Seo import Html.Styled as Html exposing (Html, div, span, text) import Html.Styled.Attributes as Attr exposing (css) +import Json.Encode import LearningResources as Db -import LearningResources.Emojis as Emojis import LearningResources.Types as LearningResources import Pages.Url import PagesMsg exposing (PagesMsg) @@ -19,6 +19,7 @@ import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming +import Url import UrlPath import View exposing (View) @@ -85,25 +86,61 @@ data params = head : App Data ActionData RouteParams -> List Head.Tag head app = - Seo.summary - { canonicalUrlOverride = Nothing - , siteName = "Developer Den" - , image = - { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath - , alt = "Developer Den" - , dimensions = Nothing - , mimeType = Nothing - } - , description = app.data.meta.description - , locale = Nothing - , title = "Learn " ++ app.data.meta.name - } - |> Seo.website + Head.structuredData (itemList app.data) + :: (Seo.summary + { canonicalUrlOverride = Nothing + , siteName = "Developer Den" + , image = + { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath + , alt = "Developer Den" + , dimensions = Nothing + , mimeType = Nothing + } + , description = app.data.meta.description + , locale = Nothing + , title = pageTitle app.data.meta.name ++ " | Developer Den" + } + |> Seo.website + ) + + +pageTitle : String -> String +pageTitle name = + "Learn " ++ name ++ ": free and paid resources" + + +{-| schema.org `CollectionPage` listing the topic's resources, for search engine rich results. +-} +itemList : Data -> Json.Encode.Value +itemList topic = + Json.Encode.object + [ ( "@context", Json.Encode.string "https://schema.org" ) + , ( "@type", Json.Encode.string "CollectionPage" ) + , ( "name", Json.Encode.string (pageTitle topic.meta.name) ) + , ( "description", Json.Encode.string topic.meta.description ) + , ( "mainEntity" + , Json.Encode.object + [ ( "@type", Json.Encode.string "ItemList" ) + , ( "itemListElement" + , Json.Encode.list + (\( position, resource ) -> + Json.Encode.object + [ ( "@type", Json.Encode.string "ListItem" ) + , ( "position", Json.Encode.int position ) + , ( "name", Json.Encode.string resource.name ) + , ( "url", Json.Encode.string (Url.toString resource.url) ) + ] + ) + (List.indexedMap (\i r -> ( i + 1, r )) topic.resources) + ) + ] + ) + ] view : App Data ActionData RouteParams -> Shared.Model -> View (PagesMsg Msg) view app _ = - View.fromStyled app.data.meta.name [ viewExplorerLayout app.data app.routeParams.resource ] + View.fromStyled (pageTitle app.data.meta.name) [ viewExplorerLayout app.data app.routeParams.resource ] |> View.map PagesMsg.fromMsg diff --git a/app/Route/Rules.elm b/app/Route/Rules.elm index 761f56a..a38f440 100644 --- a/app/Route/Rules.elm +++ b/app/Route/Rules.elm @@ -10,9 +10,9 @@ import Pages.Url import PagesMsg exposing (PagesMsg) import RouteBuilder exposing (App, StatelessRoute) import Shared +import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw -import Tailwind.Breakpoints as Breakpoints import Theming import UrlPath import View exposing (View) diff --git a/app/Site.elm b/app/Site.elm index f89382e..afff669 100644 --- a/app/Site.elm +++ b/app/Site.elm @@ -3,7 +3,10 @@ module Site exposing (config) import BackendTask exposing (BackendTask) import FatalError exposing (FatalError) import Head +import MimeType +import Pages.Url import SiteConfig exposing (SiteConfig) +import UrlPath config : SiteConfig @@ -17,5 +20,7 @@ head : BackendTask FatalError (List Head.Tag) head = [ Head.metaName "viewport" (Head.raw "width=device-width,initial-scale=1") , Head.sitemapLink "/sitemap.xml" + , Head.icon [] (MimeType.OtherImage "svg+xml") (Pages.Url.fromPath (UrlPath.fromString "devden-logo.svg")) + , Head.icon [] (MimeType.OtherImage "x-icon") (Pages.Url.fromPath (UrlPath.fromString "favicon.ico")) ] |> BackendTask.succeed From 22ab011905acde3852d731cba9250afd26dde063 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 11:53:40 +0100 Subject: [PATCH 39/48] chore: setup banners directory with font info --- banners/fonts/CascadiaCode-SemiBold.ttf | Bin 0 -> 601640 bytes banners/fonts/Montserrat-Medium.ttf | Bin 0 -> 447320 bytes banners/fonts/OFL-CascadiaCode.txt | 94 ++++++++++++++++++++++++ banners/fonts/OFL-Montserrat.txt | 93 +++++++++++++++++++++++ 4 files changed, 187 insertions(+) create mode 100644 banners/fonts/CascadiaCode-SemiBold.ttf create mode 100644 banners/fonts/Montserrat-Medium.ttf create mode 100644 banners/fonts/OFL-CascadiaCode.txt create mode 100644 banners/fonts/OFL-Montserrat.txt diff --git a/banners/fonts/CascadiaCode-SemiBold.ttf b/banners/fonts/CascadiaCode-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a615aaeda531b6754dd2ed6f09ea52b08e54fde0 GIT binary patch literal 601640 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%0DBUsBvw`;;#7oh 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ΠGVRm(EuTIf<azQZP%0 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

    60Oa7rMasc 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 literal 0 HcmV?d00001 diff --git a/banners/fonts/OFL-CascadiaCode.txt b/banners/fonts/OFL-CascadiaCode.txt new file mode 100644 index 0000000..b7f9107 --- /dev/null +++ b/banners/fonts/OFL-CascadiaCode.txt @@ -0,0 +1,94 @@ +Copyright (c) 2019 - Present, Microsoft Corporation, +with Reserved Font Name Cascadia Code. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/banners/fonts/OFL-Montserrat.txt b/banners/fonts/OFL-Montserrat.txt new file mode 100644 index 0000000..fe576a2 --- /dev/null +++ b/banners/fonts/OFL-Montserrat.txt @@ -0,0 +1,93 @@ +Copyright 2024 The Montserrat.Git Project Authors (https://github.com/JulietaUla/Montserrat.git) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file From 9b94c03ad54d31b24d6bcc77e50b2e8ab5429148 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 19:53:39 +0100 Subject: [PATCH 40/48] chore: slightly improve the maintainability of the logo SVG --- public/devden-logo-light.svg | 6 +++--- public/devden-logo.svg | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/public/devden-logo-light.svg b/public/devden-logo-light.svg index 09ff33b..28e150c 100644 --- a/public/devden-logo-light.svg +++ b/public/devden-logo-light.svg @@ -1,6 +1,6 @@ - + @@ -25,7 +25,7 @@ - + @@ -54,6 +54,6 @@ - + diff --git a/public/devden-logo.svg b/public/devden-logo.svg index 18205d6..615454d 100644 --- a/public/devden-logo.svg +++ b/public/devden-logo.svg @@ -1,6 +1,6 @@ - + @@ -25,7 +25,7 @@ - + @@ -54,6 +54,6 @@ - + From 1491bff6eea1ed353874a1266bcdc043694bd71e Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 20:28:07 +0100 Subject: [PATCH 41/48] build: drop NoUnused.Dependencies from elm-review --- review/src/ReviewConfig.elm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/review/src/ReviewConfig.elm b/review/src/ReviewConfig.elm index 4d2a462..ebcd962 100644 --- a/review/src/ReviewConfig.elm +++ b/review/src/ReviewConfig.elm @@ -24,7 +24,6 @@ import NoPrematureLetComputation import NoSimpleLetBody import NoUnused.CustomTypeConstructorArgs import NoUnused.CustomTypeConstructors -import NoUnused.Dependencies import NoUnused.Exports import NoUnused.Parameters import NoUnused.Patterns @@ -59,7 +58,8 @@ config = , NoPrematureLetComputation.rule , NoUnused.CustomTypeConstructors.rule [] , NoUnused.CustomTypeConstructorArgs.rule - , NoUnused.Dependencies.rule + + -- NoUnused.Dependencies elm-pages seems to not play nicely with this , NoUnused.Exports.rule , NoUnused.Parameters.rule , NoUnused.Patterns.rule From 71b829dc90003b59c9b4c9107f5235ec8dedeb70 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 20:28:55 +0100 Subject: [PATCH 42/48] refactor: apply elm-review --- app/Effect.elm | 101 ++----------------------------- app/ErrorPage.elm | 18 ++---- app/Route/Index.elm | 2 +- app/Route/Learning.elm | 2 +- app/Route/Learning/Resource_.elm | 2 +- app/Route/Rules.elm | 2 +- app/View.elm | 49 +-------------- 7 files changed, 18 insertions(+), 158 deletions(-) diff --git a/app/Effect.elm b/app/Effect.elm index 5c14db5..29bef7d 100644 --- a/app/Effect.elm +++ b/app/Effect.elm @@ -1,17 +1,18 @@ -module Effect exposing (Effect(..), batch, fromCmd, map, none, perform, testPerform) +module Effect exposing + ( Effect, batch, fromCmd, map, none, perform + , FormData + ) {-| -@docs Effect, batch, fromCmd, map, none, perform, testPerform +@docs Effect, batch, fromCmd, map, none, perform -} import Browser.Navigation import Form import Http -import Json.Decode as Decode import Pages.Fetcher -import Test.PagesProgram.SimulatedEffect as SimulatedEffect exposing (SimulatedEffect) import Url exposing (Url) @@ -20,24 +21,6 @@ type Effect msg = None | Cmd (Cmd msg) | Batch (List (Effect msg)) - | GetStargazers (Result Http.Error Int -> msg) - | SetField { formId : String, name : String, value : String } - | FetchRouteData - { data : Maybe FormData - , toMsg : Result Http.Error Url -> msg - } - | Submit - { values : FormData - , toMsg : Result Http.Error Url -> msg - } - | SubmitFetcher (Pages.Fetcher.Fetcher msg) - - -{-| -} -type alias RequestInfo = - { contentType : String - , body : String - } {-| -} @@ -71,29 +54,6 @@ map fn effect = Batch list -> Batch (List.map (map fn) list) - GetStargazers toMsg -> - GetStargazers (toMsg >> fn) - - FetchRouteData fetchInfo -> - FetchRouteData - { data = fetchInfo.data - , toMsg = fetchInfo.toMsg >> fn - } - - Submit fetchInfo -> - Submit - { values = fetchInfo.values - , toMsg = fetchInfo.toMsg >> fn - } - - SetField info -> - SetField info - - SubmitFetcher fetcher -> - fetcher - |> Pages.Fetcher.map fn - |> SubmitFetcher - {-| -} perform : @@ -116,7 +76,7 @@ perform : } -> Effect pageMsg -> Cmd msg -perform ({ fromPageMsg, key } as helpers) effect = +perform ({ fromPageMsg } as helpers) effect = case effect of None -> Cmd.none @@ -124,58 +84,9 @@ perform ({ fromPageMsg, key } as helpers) effect = Cmd cmd -> Cmd.map fromPageMsg cmd - SetField info -> - helpers.setField info - Batch list -> Cmd.batch (List.map (perform helpers) list) - GetStargazers toMsg -> - Http.get - { url = - "https://api.github.com/repos/dillonkearns/elm-pages" - , expect = Http.expectJson (toMsg >> fromPageMsg) (Decode.field "stargazers_count" Decode.int) - } - - FetchRouteData fetchInfo -> - helpers.fetchRouteData - fetchInfo - - Submit record -> - helpers.submit record - - SubmitFetcher record -> - helpers.runFetcher record - - -{-| -} -testPerform : Effect msg -> SimulatedEffect msg -testPerform effect = - case effect of - None -> - SimulatedEffect.none - - Cmd _ -> - SimulatedEffect.none - - Batch list -> - SimulatedEffect.batch (List.map testPerform list) - - GetStargazers toMsg -> - SimulatedEffect.dispatchMsg (toMsg (Ok 0)) - - SetField info -> - SimulatedEffect.setField info - - FetchRouteData _ -> - SimulatedEffect.none - - Submit _ -> - SimulatedEffect.none - - SubmitFetcher fetcher -> - SimulatedEffect.submitFetcher fetcher - type alias FormData = { fields : List ( String, String ) diff --git a/app/ErrorPage.elm b/app/ErrorPage.elm index 3f6e45d..86ba640 100644 --- a/app/ErrorPage.elm +++ b/app/ErrorPage.elm @@ -1,8 +1,7 @@ -module ErrorPage exposing (ErrorPage(..), Model, Msg, head, init, internalError, notFound, statusCode, update, view) +module ErrorPage exposing (ErrorPage, Model, Msg, init, internalError, notFound, statusCode, update, view) import Effect exposing (Effect) -import Head -import Html exposing (Html) +import Html import View exposing (View) @@ -16,24 +15,19 @@ type alias Model = init : ErrorPage -> ( Model, Effect Msg ) -init errorPage = +init _ = ( { count = 0 } , Effect.none ) update : ErrorPage -> Msg -> Model -> ( Model, Effect Msg ) -update errorPage msg model = +update _ msg model = case msg of Increment -> ( { model | count = model.count + 1 }, Effect.none ) -head : ErrorPage -> List Head.Tag -head errorPage = - [] - - type ErrorPage = NotFound | InternalError String @@ -50,7 +44,7 @@ internalError = view : ErrorPage -> Model -> View Msg -view error model = +view error _ = { body = [ Html.div [] [ Html.p [] @@ -69,7 +63,7 @@ view error model = NotFound -> "Page Not Found" - InternalError string -> + InternalError _ -> "Unexpected Error" } diff --git a/app/Route/Index.elm b/app/Route/Index.elm index 3864e66..1d92cb8 100644 --- a/app/Route/Index.elm +++ b/app/Route/Index.elm @@ -1,4 +1,4 @@ -module Route.Index exposing (ActionData, Data, Model, Msg, route) +module Route.Index exposing (ActionData, Data, Model, Msg, RouteParams, route) import BackendTask import Css diff --git a/app/Route/Learning.elm b/app/Route/Learning.elm index 9155285..ff837d4 100644 --- a/app/Route/Learning.elm +++ b/app/Route/Learning.elm @@ -1,4 +1,4 @@ -module Route.Learning exposing (ActionData, Data, Model, Msg, route) +module Route.Learning exposing (ActionData, Data, Model, Msg, RouteParams, route) import BackendTask exposing (BackendTask) import Css diff --git a/app/Route/Learning/Resource_.elm b/app/Route/Learning/Resource_.elm index fded139..668f736 100644 --- a/app/Route/Learning/Resource_.elm +++ b/app/Route/Learning/Resource_.elm @@ -1,4 +1,4 @@ -module Route.Learning.Resource_ exposing (ActionData, Data, Model, Msg, route) +module Route.Learning.Resource_ exposing (ActionData, Data, Model, Msg, RouteParams, route) import BackendTask exposing (BackendTask) import Css diff --git a/app/Route/Rules.elm b/app/Route/Rules.elm index a38f440..44b9348 100644 --- a/app/Route/Rules.elm +++ b/app/Route/Rules.elm @@ -1,4 +1,4 @@ -module Route.Rules exposing (ActionData, Data, Model, Msg, route) +module Route.Rules exposing (ActionData, Data, Model, Msg, RouteParams, route) import BackendTask import Css diff --git a/app/View.elm b/app/View.elm index 2951ddc..3ffcd66 100644 --- a/app/View.elm +++ b/app/View.elm @@ -1,8 +1,8 @@ -module View exposing (View, fromStyled, map, freeze, freezableToHtml, htmlToFreezable) +module View exposing (View, fromStyled, map) {-| View module for elm-pages with frozen view support. -@docs View, fromStyled, map, freeze, freezableToHtml, htmlToFreezable +@docs View, fromStyled, map -} @@ -32,48 +32,3 @@ map fn doc = { title = doc.title , body = List.map (Html.map fn) doc.body } - - -{-| The type of content that can be frozen. Must produce no messages (Never). -For plain Html, this is just Html Never. --} -type alias Freezable = - Html Never - - -{-| Convert Freezable content to plain Html for server-side rendering. -For plain Html, this is identity. --} -freezableToHtml : Freezable -> Html Never -freezableToHtml = - identity - - -{-| Convert plain Html back to Freezable for client-side adoption. -For plain Html, this is identity. --} -htmlToFreezable : Html Never -> Freezable -htmlToFreezable = - identity - - -{-| Freeze a view so its content is rendered at build time and adopted on the client. -Use this for static content that doesn't need interactivity. - -Frozen content is: - - - Rendered at build time and included in the HTML - - Adopted by the client without re-rendering - - Eligible for dead-code elimination (rendering code removed from client bundle) - -At build time, the server codemod wraps the content with a `data-frozen` attribute for extraction. -The elm-review codemod then transforms `freeze` calls to lazy thunks on the client, -which adopt the pre-rendered DOM without re-rendering. - --} -freeze : Freezable -> Html msg -freeze content = - content - |> freezableToHtml - |> htmlToFreezable - |> Html.map never From 989bac9be800d7bfdb76cea587992d3f9e948035 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 20:29:50 +0100 Subject: [PATCH 43/48] fix(nav): resize logo for the cropped viewBox --- app/Shared.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Shared.elm b/app/Shared.elm index 5804b29..e1794bb 100644 --- a/app/Shared.elm +++ b/app/Shared.elm @@ -147,7 +147,7 @@ viewNavbar toMsg activeRoute = ] (Theming.themedImage { dark = "/devden-logo.svg", light = "/devden-logo-light.svg", alt = "Developer Den Logo" } - [ Tw.h_16, Tw.w_auto, Tw.block ] + [ Tw.h_9, Tw.w_auto, Tw.block ] ) , div [ css [ Tw.flex, Tw.flex_wrap, Tw.gap_x_6, Tw.gap_y_2, Breakpoints.md [ Tw.gap_x_8 ] ] ] [ viewNavLink "home" Route.Index (activeRoute == Just Route.Index) From 95e0edf26038d95ad4b9017d7056987603d0633f Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 20:35:08 +0100 Subject: [PATCH 44/48] feat: generate social banners at build time --- app/Api.elm | 89 +++++- app/Route/Index.elm | 12 +- app/Route/Learning.elm | 11 +- app/Route/Learning/Resource_.elm | 11 +- app/Route/Rules.elm | 12 +- bun.lock | 27 ++ custom-backend-task.ts | 15 + package.json | 3 +- src/Banner.elm | 506 +++++++++++++++++++++++++++++++ 9 files changed, 650 insertions(+), 36 deletions(-) create mode 100644 custom-backend-task.ts create mode 100644 src/Banner.elm diff --git a/app/Api.elm b/app/Api.elm index e20603c..8f6c59d 100644 --- a/app/Api.elm +++ b/app/Api.elm @@ -2,8 +2,16 @@ module Api exposing (routes) import ApiRoute exposing (ApiRoute) import BackendTask exposing (BackendTask) +import BackendTask.Custom +import BackendTask.File +import BackendTask.Http +import Banner import FatalError exposing (FatalError) import Html exposing (Html) +import Json.Decode +import Json.Encode +import LearningResources as Db +import LearningResources.Types as LearningResources import Route exposing (Route) import UrlPath @@ -12,13 +20,92 @@ routes : BackendTask FatalError (List Route) -> (Maybe { indent : Int, newLines : Bool } -> Html Never -> String) -> List (ApiRoute ApiRoute.Response) -routes getStaticRoutes _ = +routes getStaticRoutes renderHtml = [ ApiRoute.succeed (BackendTask.map sitemap getStaticRoutes) |> ApiRoute.literal "sitemap.xml" |> ApiRoute.single + , ApiRoute.succeed (BackendTask.map bannerManifest (renderBanners renderHtml)) + |> ApiRoute.literal "og/manifest.json" + |> ApiRoute.single ] +{-| Renders `dist/og/default.png` and one `dist/og/.png` per topic. +Returns the plain/simple names of the banners written (`default` and each topic tag). +-} +renderBanners : (Maybe { indent : Int, newLines : Bool } -> Html Never -> String) -> BackendTask FatalError (List String) +renderBanners renderHtml = + Db.fetchDatabase + |> BackendTask.andThen + (\db -> + (Nothing :: List.map Just db.metadata) + |> List.map (renderBanner renderHtml) + |> BackendTask.combine + ) + + +bannerDir : String +bannerDir = + "dist/og" + + +bannerManifest : List String -> String +bannerManifest files = + Json.Encode.encode 2 (Json.Encode.list Json.Encode.string files) + + +renderBanner : (Maybe { indent : Int, newLines : Bool } -> Html Never -> String) -> Maybe LearningResources.CompiledMeta -> BackendTask FatalError String +renderBanner renderHtml maybeMeta = + let + file : String + file = + maybeMeta |> Maybe.map (.id >> LearningResources.entityTagToString) |> Maybe.withDefault "default" + in + BackendTask.map2 + (\logo icon -> + case maybeMeta of + Just meta -> + { subtitle = "learn", title = String.toLower meta.name, tagline = firstSentence meta.description, logo = logo, icon = icon } + + Nothing -> + { subtitle = "welcome to", title = "developer den", tagline = "a community of programmers learning together", logo = logo, icon = Nothing } + ) + (BackendTask.File.rawFile "public/devden-logo.svg" |> BackendTask.allowFatal) + (maybeMeta |> Maybe.andThen .icon |> fetchIcon) + |> BackendTask.andThen + (\banner -> + BackendTask.Custom.run "writePng" + (Json.Encode.object [ ( "path", Json.Encode.string (bannerDir ++ "/" ++ file ++ ".png") ), ( "svg", Json.Encode.string (Banner.toSvg renderHtml banner) ) ]) + (Json.Decode.succeed file) + |> BackendTask.allowFatal + ) + + +{-| The description's first sentence, so long descriptions stay readable on the banner. +-} +firstSentence : String -> String +firstSentence description = + String.indexes ". " description + |> List.filter (\index -> String.slice (index + 2) (index + 3) description |> String.any Char.isUpper) + |> List.head + |> Maybe.map (\index -> String.left (index + 1) description) + |> Maybe.withDefault description + + +{-| Banners sit on a dark background, so prefer the icon's dark variant. +-} +fetchIcon : Maybe LearningResources.EntityIcon -> BackendTask FatalError (Maybe String) +fetchIcon maybeIcon = + case maybeIcon of + Just icon -> + BackendTask.Http.get (Db.iconUrl (Maybe.withDefault icon.default icon.dark)) BackendTask.Http.expectString + |> BackendTask.allowFatal + |> BackendTask.map Just + + Nothing -> + BackendTask.succeed Nothing + + sitemap : List Route -> String sitemap staticRoutes = let diff --git a/app/Route/Index.elm b/app/Route/Index.elm index 1d92cb8..94cdfb1 100644 --- a/app/Route/Index.elm +++ b/app/Route/Index.elm @@ -1,13 +1,13 @@ module Route.Index exposing (ActionData, Data, Model, Msg, RouteParams, route) import BackendTask +import Banner import Css import Head import Head.Seo as Seo import Html.Styled exposing (Html, a, div, h1, i, p, text) import Html.Styled.Attributes as Attr exposing (css, href, target) import Json.Encode -import Pages.Url import PagesMsg exposing (PagesMsg) import Redirects import RouteBuilder exposing (App, StatelessRoute) @@ -15,7 +15,6 @@ import Shared import Tailwind.Breakpoints as Breakpoints import Tailwind.Utilities as Tw import Theming -import UrlPath import View exposing (View) @@ -51,15 +50,10 @@ route = head : App Data ActionData RouteParams -> List Head.Tag head _ = Head.structuredData organisation - :: (Seo.summary + :: (Seo.summaryLarge { canonicalUrlOverride = Nothing , siteName = "Developer Den" - , image = - { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath - , alt = "Developer Den" - , dimensions = Nothing - , mimeType = Nothing - } + , image = Banner.seoImage "default" "Developer Den" , description = "Developer Den is a community of programmers learning and building together." , locale = Nothing , title = "Home" diff --git a/app/Route/Learning.elm b/app/Route/Learning.elm index ff837d4..dd0514d 100644 --- a/app/Route/Learning.elm +++ b/app/Route/Learning.elm @@ -1,6 +1,7 @@ module Route.Learning exposing (ActionData, Data, Model, Msg, RouteParams, route) import BackendTask exposing (BackendTask) +import Banner import Css import Dict import Effect exposing (Effect) @@ -12,7 +13,6 @@ import Html.Styled.Attributes as Attr exposing (css) import Html.Styled.Events exposing (onInput) import LearningResources as Db import LearningResources.Types as LearningResources -import Pages.Url import PagesMsg exposing (PagesMsg) import Route import RouteBuilder exposing (App, StatefulRoute) @@ -64,15 +64,10 @@ data = head : App Data ActionData RouteParams -> List Head.Tag head _ = - Seo.summary + Seo.summaryLarge { canonicalUrlOverride = Nothing , siteName = "Developer Den" - , image = - { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath - , alt = "Developer Den" - , dimensions = Nothing - , mimeType = Nothing - } + , image = Banner.seoImage "default" "Developer Den" , description = "Explore our curated directory of programming languages, tools, and concepts." , locale = Nothing , title = "Learning Resources" diff --git a/app/Route/Learning/Resource_.elm b/app/Route/Learning/Resource_.elm index 668f736..989ae69 100644 --- a/app/Route/Learning/Resource_.elm +++ b/app/Route/Learning/Resource_.elm @@ -1,6 +1,7 @@ module Route.Learning.Resource_ exposing (ActionData, Data, Model, Msg, RouteParams, route) import BackendTask exposing (BackendTask) +import Banner import Css import FatalError exposing (FatalError) import Head @@ -10,7 +11,6 @@ import Html.Styled.Attributes as Attr exposing (css) import Json.Encode import LearningResources as Db import LearningResources.Types as LearningResources -import Pages.Url import PagesMsg exposing (PagesMsg) import Route import RouteBuilder exposing (App, StatelessRoute) @@ -87,15 +87,10 @@ data params = head : App Data ActionData RouteParams -> List Head.Tag head app = Head.structuredData (itemList app.data) - :: (Seo.summary + :: (Seo.summaryLarge { canonicalUrlOverride = Nothing , siteName = "Developer Den" - , image = - { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath - , alt = "Developer Den" - , dimensions = Nothing - , mimeType = Nothing - } + , image = Banner.seoImage (LearningResources.entityTagToString app.data.meta.id) ("Learn " ++ app.data.meta.name ++ " on Developer Den") , description = app.data.meta.description , locale = Nothing , title = pageTitle app.data.meta.name ++ " | Developer Den" diff --git a/app/Route/Rules.elm b/app/Route/Rules.elm index 44b9348..86565fe 100644 --- a/app/Route/Rules.elm +++ b/app/Route/Rules.elm @@ -1,12 +1,12 @@ module Route.Rules exposing (ActionData, Data, Model, Msg, RouteParams, route) import BackendTask +import Banner import Css import Head import Head.Seo as Seo import Html.Styled as Html exposing (Html, a, div, h2, h3, p, text) import Html.Styled.Attributes as Attr exposing (css) -import Pages.Url import PagesMsg exposing (PagesMsg) import RouteBuilder exposing (App, StatelessRoute) import Shared @@ -14,7 +14,6 @@ import Tailwind.Breakpoints as Breakpoints import Tailwind.Theme as Tw import Tailwind.Utilities as Tw import Theming -import UrlPath import View exposing (View) @@ -49,15 +48,10 @@ route = head : App Data ActionData RouteParams -> List Head.Tag head _ = - Seo.summary + Seo.summaryLarge { canonicalUrlOverride = Nothing , siteName = "Developer Den" - , image = - { url = UrlPath.fromString "devden-banner.svg" |> Pages.Url.fromPath - , alt = "Developer Den" - , dimensions = Nothing - , mimeType = Nothing - } + , image = Banner.seoImage "default" "Developer Den" , description = "The rules of the Developer Den community." , locale = Nothing , title = "Rules" diff --git a/bun.lock b/bun.lock index aedff7a..9531ddf 100644 --- a/bun.lock +++ b/bun.lock @@ -5,6 +5,7 @@ "": { "name": "website", "dependencies": { + "@resvg/resvg-js": "^2.6.2", "@tailwindcss/postcss": "^4.3.0", "elm-tailwind-modules": "^0.5.0", "postcss": "^8.4.0", @@ -179,6 +180,32 @@ "@pnpm/npm-conf": ["@pnpm/npm-conf@3.0.3", "", { "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", "config-chain": "^1.1.11" } }, "sha512-//0sR/cow/s4ICQaYoAobOl4aU8cjU6x/V24V7XkKotb9+O+3zySIYp146vpaobYHnxa4pZX8NkV54Z5AwbDKA=="], + "@resvg/resvg-js": ["@resvg/resvg-js@2.6.2", "", { "optionalDependencies": { "@resvg/resvg-js-android-arm-eabi": "2.6.2", "@resvg/resvg-js-android-arm64": "2.6.2", "@resvg/resvg-js-darwin-arm64": "2.6.2", "@resvg/resvg-js-darwin-x64": "2.6.2", "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2", "@resvg/resvg-js-linux-arm64-gnu": "2.6.2", "@resvg/resvg-js-linux-arm64-musl": "2.6.2", "@resvg/resvg-js-linux-x64-gnu": "2.6.2", "@resvg/resvg-js-linux-x64-musl": "2.6.2", "@resvg/resvg-js-win32-arm64-msvc": "2.6.2", "@resvg/resvg-js-win32-ia32-msvc": "2.6.2", "@resvg/resvg-js-win32-x64-msvc": "2.6.2" } }, "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q=="], + + "@resvg/resvg-js-android-arm-eabi": ["@resvg/resvg-js-android-arm-eabi@2.6.2", "", { "os": "android", "cpu": "arm" }, "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA=="], + + "@resvg/resvg-js-android-arm64": ["@resvg/resvg-js-android-arm64@2.6.2", "", { "os": "android", "cpu": "arm64" }, "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ=="], + + "@resvg/resvg-js-darwin-arm64": ["@resvg/resvg-js-darwin-arm64@2.6.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A=="], + + "@resvg/resvg-js-darwin-x64": ["@resvg/resvg-js-darwin-x64@2.6.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw=="], + + "@resvg/resvg-js-linux-arm-gnueabihf": ["@resvg/resvg-js-linux-arm-gnueabihf@2.6.2", "", { "os": "linux", "cpu": "arm" }, "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw=="], + + "@resvg/resvg-js-linux-arm64-gnu": ["@resvg/resvg-js-linux-arm64-gnu@2.6.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg=="], + + "@resvg/resvg-js-linux-arm64-musl": ["@resvg/resvg-js-linux-arm64-musl@2.6.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg=="], + + "@resvg/resvg-js-linux-x64-gnu": ["@resvg/resvg-js-linux-x64-gnu@2.6.2", "", { "os": "linux", "cpu": "x64" }, "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw=="], + + "@resvg/resvg-js-linux-x64-musl": ["@resvg/resvg-js-linux-x64-musl@2.6.2", "", { "os": "linux", "cpu": "x64" }, "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ=="], + + "@resvg/resvg-js-win32-arm64-msvc": ["@resvg/resvg-js-win32-arm64-msvc@2.6.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ=="], + + "@resvg/resvg-js-win32-ia32-msvc": ["@resvg/resvg-js-win32-ia32-msvc@2.6.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w=="], + + "@resvg/resvg-js-win32-x64-msvc": ["@resvg/resvg-js-win32-x64-msvc@2.6.2", "", { "os": "win32", "cpu": "x64" }, "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.0", "", { "os": "android", "cpu": "arm" }, "sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A=="], "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.0", "", { "os": "android", "cpu": "arm64" }, "sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw=="], diff --git a/custom-backend-task.ts b/custom-backend-task.ts new file mode 100644 index 0000000..2498885 --- /dev/null +++ b/custom-backend-task.ts @@ -0,0 +1,15 @@ +import { Resvg } from "@resvg/resvg-js"; +import { mkdir, writeFile } from "node:fs/promises"; +import { dirname } from "node:path"; + +const fontFiles = ["banners/fonts/CascadiaCode-SemiBold.ttf", "banners/fonts/Montserrat-Medium.ttf"]; + +/** Converts an SVG to a PNG at `path` */ +export async function writePng({ path, svg }: { path: string; svg: string }): Promise { + const resvg = new Resvg(svg, { + font: { fontFiles, loadSystemFonts: false, defaultFontFamily: "Montserrat" }, + }); + await mkdir(dirname(path), { recursive: true }); + await writeFile(path, resvg.render().asPng()); + return null; +} diff --git a/package.json b/package.json index 9855858..6f47f09 100644 --- a/package.json +++ b/package.json @@ -18,13 +18,14 @@ "scripts": { "tw": "bunx --bun elm-tailwind-modules --dir ./gen --tailwind-config tailwind.config.ts", "dev": "elm-pages dev", - "build": "elm-pages build", + "build": "elm-pages build && test -f dist/og/default.png", "format": "elm-format src app --yes" }, "peerDependencies": { "typescript": "^5" }, "dependencies": { + "@resvg/resvg-js": "^2.6.2", "@tailwindcss/postcss": "^4.3.0", "elm-tailwind-modules": "^0.5.0", "postcss": "^8.4.0", diff --git a/src/Banner.elm b/src/Banner.elm new file mode 100644 index 0000000..3112cf3 --- /dev/null +++ b/src/Banner.elm @@ -0,0 +1,506 @@ +module Banner exposing (Banner, seoImage, toSvg) + +{-| Renders the social preview image ("banner") for a page, as an SVG string. Its size is `layout.canvas`. + +The layout is, from top to bottom on the left: the Developer Den logo, a small subtitle (such as "learn" or "welcome to"), +the big title with a coloured underline, and a tagline. Pages about a topic can also have the topic's icon on the right. + +@docs Banner, seoImage, toSvg + +-} + +import Base64 +import Head.Seo as Seo +import Html exposing (Html) +import Html.Attributes +import MimeType +import Pages.Url +import Svg exposing (Svg) +import Svg.Attributes exposing (fill, fontFamily, fontSize, fontWeight, height, id, offset, rx, stopColor, stroke, strokeLinejoin, strokeWidth, viewBox, width, x, x1, x2, y, y1, y2) +import UrlPath + + +{-| The text and images that go on one banner. +-} +type alias Banner = + { subtitle : String + , title : String + , tagline : String + + -- The Developer Den logo, as SVG source text. + , logo : String + + -- The topic's icon as SVG source text, or 'Nothing' for pages without one such as the home page. + , icon : Maybe String + } + + +{-| Every colour on the banner. +-} +colours : + { background : String + , tile : String + , accent : String + , title : String + , tagline : String + , gradientStart : String + , gradientEnd : String + } +colours = + { background = "#171834" + , tile = "#1f2147" + , accent = "#8099FF" + , title = "#ffffff" + , tagline = "#c9cbf0" + , gradientStart = "#00AFC3" + , gradientEnd = "#FF52F9" + } + + +type alias TextStyle = + { font : String + , weight : Int + , colour : String + , lineSpacing : Float + , charWidth : Float + } + + +titleStyle : TextStyle +titleStyle = + { font = "Cascadia Code", weight = 600, colour = colours.title, lineSpacing = 1.15, charWidth = 0.6 } + + +subtitleStyle : TextStyle +subtitleStyle = + { titleStyle | colour = colours.accent } + + +taglineStyle : TextStyle +taglineStyle = + { font = "Montserrat", weight = 500, colour = colours.tagline, lineSpacing = 1.35, charWidth = 0.6 } + + +{-| The biggest and smallest font sizes the title and tagline can shrink between to fit (see `fontSizes`), and how many +lines the title may take. +-} +titleFit : { largest : Float, smallest : Float, maxLines : Int } +titleFit = + { largest = 120, smallest = 60, maxLines = 2 } + + +taglineFit : { largest : Float, smallest : Float } +taglineFit = + { largest = 34, smallest = 21 } + + +{-| Produce a list of possible font sizes to try, in size order. +-} +fontSizes : { a | largest : Float, smallest : Float } -> List Float +fontSizes { largest, smallest } = + let + steps : Int + steps = + 4 + + ratio : Float + ratio = + (smallest / largest) ^ (1 / toFloat steps) + in + List.range 0 steps |> List.map (\step -> toFloat (round (largest * ratio ^ toFloat step))) + + +{-| The measurements of the underline under the title, measured in percentages of the main font size. + + - `offset`: the space between the bottom of the letters and the top of the underline. + - `thickness`: how thick the underline is. + - `leftPad`: Left padding size. This exists because if the first letter has a tail (e.g. `g`), the gap cut around the tail leaves a thin sliver of underline on its left. + - `descenderGap`: the total width of the gap cut in the underline around letters with tails, such as `p` and `y`, distributed evenly on each side. + +These aren't perfectly accurate because they're mostly eyeballed (sorry) + +-} +underlineStyle : { offset : Float, thickness : Float, leftPad : Float, descenderGap : Float } +underlineStyle = + { offset = 0.13, thickness = 0.107, leftPad = 0.05, descenderGap = 0.16 } + + +{-| Global pixel measurements for most things + + - `canvas`: the size of the whole image. + - `margin`: on both sides + - `logo`: the logo's box. `top` is where the visible logo starts, and `gapBelow` is the space before the subtitle. + - `tile`: the rounded square behind the topic's icon. It is `margin` in from the right edge and centred top to bottom. + - `icon`: the icon, centred inside the tile. `offset` is the space between the tile's edge and the icon. + - `textWidth`: how wide text can be, depending on whether there is an icon tile to leave room for. + - `underlineToTaglineGap`: the space between the underline and the tagline. + - `lowestTaglineY`: the tagline's last line must stay above this, in order to leave a margin at the bottom of the image. + +-} +layout : + { canvas : { width : Float, height : Float } + , margin : Float + , logo : { top : Float, width : Float, height : Float, gapBelow : Float } + , tile : { left : Float, top : Float, size : Float, cornerRadius : Float } + , icon : { offset : Float, size : Float } + , textWidth : { withIcon : Float, withoutIcon : Float } + , subtitleSize : Float + , underlineToTaglineGap : Float + , lowestTaglineY : Float + } +layout = + let + canvas : { width : Float, height : Float } + canvas = + { width = 1200, height = 630 } + + margin : Float + margin = + 80 + + tileSize : Float + tileSize = + 380 + + iconSize : Float + iconSize = + 240 + + tileLeft : Float + tileLeft = + canvas.width - margin - tileSize + + tileGap : Float + tileGap = + 36 + + bottomMargin : Float + bottomMargin = + 30 + in + { canvas = canvas + , margin = margin + , logo = { top = 70, width = 100, height = 80, gapBelow = 110 } + , tile = { left = tileLeft, top = (canvas.height - tileSize) / 2, size = tileSize, cornerRadius = 48 } + , icon = { offset = (tileSize - iconSize) / 2, size = iconSize } + , textWidth = { withIcon = tileLeft - tileGap - margin, withoutIcon = canvas.width - 2 * margin } + , subtitleSize = 40 + , underlineToTaglineGap = 24 + , lowestTaglineY = canvas.height - bottomMargin + } + + +{-| Turns the banner into SVG text, using the HTML renderer that elm-pages passes to `Api.routes`. +-} +toSvg : (Maybe { indent : Int, newLines : Bool } -> Html Never -> String) -> Banner -> String +toSvg renderHtml banner = + renderHtml Nothing + (Svg.svg + [ Html.Attributes.attribute "xmlns" "http://www.w3.org/2000/svg" + , width (String.fromFloat layout.canvas.width) + , height (String.fromFloat layout.canvas.height) + , viewBox ("0 0 " ++ String.fromFloat layout.canvas.width ++ " " ++ String.fromFloat layout.canvas.height) + ] + (shapes banner) + ) + + +{-| Everything in the banner, in drawing order, such that later items are drawn on top of earlier ones. +-} +shapes : Banner -> List (Svg Never) +shapes banner = + let + textWidth : Float + textWidth = + case banner.icon of + Just _ -> + layout.textWidth.withIcon + + Nothing -> + layout.textWidth.withoutIcon + + ( titleSize, titleLines ) = + fitTitle textWidth banner.title + + subtitleY : Float + subtitleY = + layout.logo.top + layout.logo.height + layout.logo.gapBelow + + firstTitleLineY : Float + firstTitleLineY = + subtitleY + titleSize + + lastTitleLineY : Float + lastTitleLineY = + firstTitleLineY + lineOffset titleStyle titleSize (List.length titleLines - 1) + + underlineTop : Float + underlineTop = + lastTitleLineY + titleSize * underlineStyle.offset + + underlineThickness : Float + underlineThickness = + titleSize * underlineStyle.thickness + + underlineStartGap : Float + underlineStartGap = + titleSize * underlineStyle.leftPad + + -- As wide as the longest title line. + underlineWidth : Float + underlineWidth = + toFloat + (List.map String.length titleLines |> List.maximum |> Maybe.withDefault 0) + * titleSize + * titleStyle.charWidth + - underlineStartGap + + taglineTop : Float + taglineTop = + underlineTop + underlineThickness + layout.underlineToTaglineGap + + ( taglineSize, taglineLines ) = + fitTagline textWidth (layout.lowestTaglineY - taglineTop) banner.tagline + + subtitle : Svg Never + subtitle = + textLines [] subtitleStyle layout.subtitleSize subtitleY [ banner.subtitle ] + + underline : Svg Never + underline = + Svg.rect + (fill "url(#brand)" + :: box { left = layout.margin + underlineStartGap, top = underlineTop, width = underlineWidth, height = underlineThickness } + ) + [] + + title : Svg Never + title = + textLines + [ stroke colours.background + , strokeWidth (String.fromFloat (titleSize * underlineStyle.descenderGap)) + , strokeLinejoin "round" + , Html.Attributes.attribute "paint-order" "stroke" + ] + titleStyle + titleSize + firstTitleLineY + titleLines + + tagline : Svg Never + tagline = + textLines [] taglineStyle taglineSize (taglineTop + taglineSize) taglineLines + + iconTile : List (Svg Never) + iconTile = + case banner.icon of + Just icon -> + [ Svg.rect + (rx (String.fromFloat layout.tile.cornerRadius) + :: fill colours.tile + :: box { left = layout.tile.left, top = layout.tile.top, width = layout.tile.size, height = layout.tile.size } + ) + [] + , image icon + { left = layout.tile.left + layout.icon.offset + , top = layout.tile.top + layout.icon.offset + , width = layout.icon.size + , height = layout.icon.size + } + ] + + Nothing -> + [] + in + [ Svg.defs [] [ brandGradient ] + , Svg.rect (fill colours.background :: box { left = 0, top = 0, width = layout.canvas.width, height = layout.canvas.height }) [] + , image banner.logo { left = layout.margin, top = layout.logo.top, width = layout.logo.width, height = layout.logo.height } + , subtitle + , underline + , title + , tagline + ] + ++ iconTile + + +brandGradient : Svg Never +brandGradient = + Svg.linearGradient [ id "brand", x1 "0", x2 "1", y1 "0", y2 "0" ] + (List.map (\( position, colour ) -> Svg.stop [ offset position, stopColor colour ] []) + [ ( "0", colours.gradientStart ), ( "0.5", colours.accent ), ( "1", colours.gradientEnd ) ] + ) + + +type alias Box = + { left : Float, top : Float, width : Float, height : Float } + + + +-- | Turn a 'Box' into a list of SVG attributes in order to make the SVG fit within that box. + + +box : Box -> List (Svg.Attribute Never) +box rect = + [ x (String.fromFloat rect.left) + , y (String.fromFloat rect.top) + , width (String.fromFloat rect.width) + , height (String.fromFloat rect.height) + ] + + +{-| One or more lines of text at the left margin, as one `` with a `` per line. +-} +textLines : List (Svg.Attribute Never) -> TextStyle -> Float -> Float -> List String -> Svg Never +textLines extraAttributes style size firstBaseline lines = + Svg.text_ + ([ fontFamily style.font + , fontWeight (String.fromInt style.weight) + , fontSize (String.fromFloat size) + , fill style.colour + ] + ++ extraAttributes + ) + (List.indexedMap + (\index line -> + Svg.tspan + [ x (String.fromFloat layout.margin), y (String.fromFloat (firstBaseline + lineOffset style size index)) ] + [ Svg.text line ] + ) + lines + ) + + +{-| How far below the first line's baseline line number `index` sits. +-} +lineOffset : TextStyle -> Float -> Int -> Float +lineOffset style size index = + toFloat index * size * style.lineSpacing + + +{-| Puts an SVG file in the banner as an image. +-} +image : String -> Box -> Svg Never +image source rect = + Svg.image + (Html.Attributes.attribute "href" ("data:image/svg+xml;base64," ++ (Base64.fromString source |> Maybe.withDefault "")) + :: box rect + ) + [] + + +{-| How many characters of this style fit on a line `maxWidth` wide at this font size. +-} +charsPerLine : TextStyle -> Float -> Float -> Int +charsPerLine style maxWidth size = + floor (maxWidth / (size * style.charWidth)) + + +{-| Tries each of `fontSizes sizes` in turn, biggest first, and gives back the first one where the text, broken into +lines, passes `fits`. If no sizes fit, the smallest one will be returned. +-} +fitText : TextStyle -> { a | largest : Float, smallest : Float } -> Float -> (Float -> List String -> Bool) -> String -> ( Float, List String ) +fitText style sizes maxWidth fits content = + let + atSize : Float -> ( Float, List String ) + atSize size = + ( size, wrap (charsPerLine style maxWidth size) content ) + in + fontSizes sizes + |> List.map atSize + |> List.filter (\( size, lines ) -> fits size lines) + |> List.head + |> Maybe.withDefault (atSize sizes.smallest) + + +{-| Finds the biggest font size at which the title fits in `titleFit.maxLines` lines or fewer, without any single long +word being wider than `textWidth`. If nothing fits, the smallest size is used with as many lines as it takes. +-} +fitTitle : Float -> String -> ( Float, List String ) +fitTitle textWidth title = + let + fits : Float -> List String -> Bool + fits size lines = + List.length lines <= titleFit.maxLines && List.all (\line -> String.length line <= charsPerLine titleStyle textWidth size) lines + in + fitText titleStyle titleFit textWidth fits title + + +{-| Finds the biggest font size at which the whole tagline fits in `heightAvailable` pixels of height, counted from +the first line's letters down to the last line's. Even the smallest size should stay readable when social sites shrink +the image. + +If the text doesn't fit even at the smallest size, we cut it short at a word boundary and end it with "…". + +-} +fitTagline : Float -> Float -> String -> ( Float, List String ) +fitTagline textWidth heightAvailable tagline = + let + fits : Float -> List String -> Bool + fits size lines = + (size + lineOffset taglineStyle size (List.length lines - 1) <= heightAvailable) + -- A word too long for any line can't be split, so shrink the text until it fits. + && List.all (\line -> String.length line <= charsPerLine taglineStyle textWidth size) lines + + ( fittedSize, fittedLines ) = + fitText taglineStyle taglineFit textWidth fits tagline + in + if fits fittedSize fittedLines then + ( fittedSize, fittedLines ) + + else + let + smallest : Float + smallest = + taglineFit.smallest + + maxChars : Int + maxChars = + charsPerLine taglineStyle textWidth smallest + + lines : List String + lines = + -- Keep one character free on every line, so the last visible line always has room for the "…". + wrap (maxChars - 1) tagline + + -- How many lines fit, counting the last one which will be cut short. + linesThatFit : Int + linesThatFit = + max 1 (floor ((heightAvailable - smallest) / (smallest * taglineStyle.lineSpacing)) + 1) + + lastLine : String + lastLine = + lines |> List.drop (linesThatFit - 1) |> List.head |> Maybe.withDefault "" + in + ( smallest, List.take (linesThatFit - 1) lines ++ [ lastLine ++ "…" ] ) + + +{-| Breaks text into lines of at most `maxChars` characters, filling each line with as many words as fit. +-} +wrap : Int -> String -> List String +wrap maxChars content = + let + addWord : String -> List String -> List String + addWord word lines = + case lines of + current :: earlier -> + if String.length current + 1 + String.length word <= maxChars then + (current ++ " " ++ word) :: earlier + + else + word :: lines + + [] -> + [ word ] + in + String.words content |> List.foldl addWord [] |> List.reverse + + +{-| The `og:image` for the banner `Api.renderBanners` writes as `og/.png`, with `alt` as its alt text. +-} +seoImage : String -> String -> Seo.Image +seoImage file alt = + { url = UrlPath.fromString ("og/" ++ file ++ ".png") |> Pages.Url.fromPath + , alt = alt + , dimensions = Just { width = round layout.canvas.width, height = round layout.canvas.height } + , mimeType = Just (MimeType.Image MimeType.Png) + } From d9c435d6367819c31cc97c7f6380fbc86847d84a Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 20:35:17 +0100 Subject: [PATCH 45/48] chore: remove dead file --- public/devden-banner.svg | 61 ---------------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 public/devden-banner.svg diff --git a/public/devden-banner.svg b/public/devden-banner.svg deleted file mode 100644 index b478c9d..0000000 --- a/public/devden-banner.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From bc3804d98da5fe0bfdc5dd42d676110bbcd2bc55 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 20:35:39 +0100 Subject: [PATCH 46/48] build: simplify some elm deps --- elm.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/elm.json b/elm.json index fce3849..0c0199c 100644 --- a/elm.json +++ b/elm.json @@ -25,6 +25,7 @@ "elm/json": "1.1.4", "elm/parser": "1.1.0", "elm/regex": "1.0.0", + "elm/svg": "1.0.1", "elm/time": "1.0.0", "elm/url": "1.0.0", "elm/virtual-dom": "1.0.5", @@ -33,6 +34,7 @@ "elm-community/result-extra": "2.4.0", "jluckyiv/elm-utc-date-strings": "1.0.0", "justinmimbs/date": "4.1.0", + "matheus23/elm-tailwind-modules-base": "1.0.0", "mdgriffith/elm-codegen": "6.0.3", "miniBill/elm-codec": "2.3.0", "noahzgordon/elm-color-extra": "1.0.2", @@ -40,8 +42,7 @@ "rtfeldman/elm-css": "18.0.0", "the-sett/elm-syntax-dsl": "6.0.5", "turboMaCk/non-empty-list-alias": "1.4.0", - "vito/elm-ansi": "12.0.0", - "matheus23/elm-tailwind-modules-base": "1.0.0" + "vito/elm-ansi": "12.0.0" }, "indirect": { "BrianHicks/elm-string-graphemes": "1.0.4", @@ -75,4 +76,4 @@ }, "indirect": {} } -} \ No newline at end of file +} From 36e472912946ecd64e180a6395e25bf91e84b410 Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 21:11:50 +0100 Subject: [PATCH 47/48] build: add umami analytics --- elm-pages.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/elm-pages.config.mjs b/elm-pages.config.mjs index f92e6d2..7519997 100644 --- a/elm-pages.config.mjs +++ b/elm-pages.config.mjs @@ -7,6 +7,7 @@ export default { + `; }, From ff534c6b011a51eca00e0997d03542d8b39a911a Mon Sep 17 00:00:00 2001 From: Alexander Wood Date: Mon, 19 Oct 2026 21:53:16 +0100 Subject: [PATCH 48/48] ci: add deployment script --- .github/workflows/deploy.yml | 45 ++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 58e34e1..0f6324a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,17 +6,15 @@ on: workflow_dispatch: permissions: - contents: read - pages: write - id-token: write + contents: write concurrency: - group: pages + group: deploy cancel-in-progress: false jobs: - build: - name: Build + deploy: + name: Release & trigger deploy runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -38,19 +36,22 @@ jobs: - name: Build run: bun run build - - uses: actions/configure-pages@v5 - - - uses: actions/upload-pages-artifact@v3 - with: - path: ./dist - - deploy: - name: Deploy to GitHub Pages - needs: build - runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - steps: - - id: deployment - uses: actions/deploy-pages@v4 + - name: Package + run: tar -czf website-dist.tar.gz -C dist . + + - name: Create release + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release create "build-${{ github.run_number }}" website-dist.tar.gz \ + --title "Build ${{ github.run_number }}" \ + --notes "Built from ${{ github.sha }}" \ + --target "${{ github.sha }}" \ + --latest + + - name: Trigger deploy + env: + SECRET: ${{ secrets.DEPLOY_WEBHOOK_SECRET }} + run: | + sig=$(printf '{}' | openssl dgst -sha256 -hmac "$SECRET" | sed 's/.* //') + curl -fsS -X POST -H "X-Hub-Signature-256: sha256=$sig" -d '{}' https://hooks.developerden.org/hooks/website

    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