generated from alecodes/base-template
Compare commits
No commits in common. "main" and "0.1.0" have entirely different histories.
42 changed files with 170 additions and 851 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -1,7 +1,5 @@
|
||||||
# Devfiles
|
# Devfiles
|
||||||
.devfiles/bin/**/*
|
.devfiles/bin/**/*
|
||||||
public/assets/**
|
|
||||||
public/.vite
|
|
||||||
|
|
||||||
#### -- TEMPLATES BEGIN -- ####
|
#### -- TEMPLATES BEGIN -- ####
|
||||||
|
|
||||||
|
|
@ -111,6 +109,7 @@ dist
|
||||||
|
|
||||||
# vuepress v2.x temp and cache directory
|
# vuepress v2.x temp and cache directory
|
||||||
.temp
|
.temp
|
||||||
|
.cache
|
||||||
|
|
||||||
# Docusaurus cache and generated files
|
# Docusaurus cache and generated files
|
||||||
.docusaurus
|
.docusaurus
|
||||||
|
|
@ -146,3 +145,4 @@ dist
|
||||||
# Added by cargo
|
# Added by cargo
|
||||||
|
|
||||||
/target
|
/target
|
||||||
|
.env
|
||||||
|
|
|
||||||
8
.idea/.gitignore
generated
vendored
8
.idea/.gitignore
generated
vendored
|
|
@ -1,8 +0,0 @@
|
||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
||||||
10
.idea/QuickJinja_project.xml
generated
10
.idea/QuickJinja_project.xml
generated
|
|
@ -1,10 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="de.achimonline.quickjinja.settings.QuickJinjaProjectSettingsState">
|
|
||||||
<option name="settings">
|
|
||||||
<QuickJinjaProjectSettings>
|
|
||||||
<option name="templateFilePath" value="$PROJECT_DIR$/frontend/templates/base.html" />
|
|
||||||
</QuickJinjaProjectSettings>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
9
.idea/biome.xml
generated
9
.idea/biome.xml
generated
|
|
@ -1,9 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="BiomeSettings">
|
|
||||||
<option name="applySafeFixesOnSave" value="true" />
|
|
||||||
<option name="enableLspFormat" value="true" />
|
|
||||||
<option name="formatOnSave" value="true" />
|
|
||||||
<option name="sortImportOnSave" value="true" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
6
.idea/bun.xml
generated
6
.idea/bun.xml
generated
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="BunSettings">
|
|
||||||
<option name="bunPath" value="$USER_HOME$/.bun/bin/bun" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
11
.idea/compendium.iml
generated
11
.idea/compendium.iml
generated
|
|
@ -1,11 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="EMPTY_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
||||||
12
.idea/dataSources.xml
generated
12
.idea/dataSources.xml
generated
|
|
@ -1,12 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
|
||||||
<data-source source="LOCAL" name="compendium@localhost" uuid="6d0a10cc-f084-4363-aa62-90ce255401e4">
|
|
||||||
<driver-ref>postgresql</driver-ref>
|
|
||||||
<synchronize>true</synchronize>
|
|
||||||
<jdbc-driver>org.postgresql.Driver</jdbc-driver>
|
|
||||||
<jdbc-url>jdbc:postgresql://localhost/compendium</jdbc-url>
|
|
||||||
<working-dir>$ProjectFileDir$</working-dir>
|
|
||||||
</data-source>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
8
.idea/dictionaries/project.xml
generated
8
.idea/dictionaries/project.xml
generated
|
|
@ -1,8 +0,0 @@
|
||||||
<component name="ProjectDictionaryState">
|
|
||||||
<dictionary name="project">
|
|
||||||
<words>
|
|
||||||
<w>endblock</w>
|
|
||||||
<w>htmx</w>
|
|
||||||
</words>
|
|
||||||
</dictionary>
|
|
||||||
</component>
|
|
||||||
6
.idea/inspectionProfiles/Project_Default.xml
generated
6
.idea/inspectionProfiles/Project_Default.xml
generated
|
|
@ -1,6 +0,0 @@
|
||||||
<component name="InspectionProjectProfileManager">
|
|
||||||
<profile version="1.0">
|
|
||||||
<option name="myName" value="Project Default" />
|
|
||||||
<inspection_tool class="HtmlUnknownTarget" enabled="true" level="TEXT ATTRIBUTES" enabled_by_default="true" editorAttributes="RUNTIME_ERROR" />
|
|
||||||
</profile>
|
|
||||||
</component>
|
|
||||||
8
.idea/modules.xml
generated
8
.idea/modules.xml
generated
|
|
@ -1,8 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/compendium.iml" filepath="$PROJECT_DIR$/.idea/compendium.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
8
.idea/runConfigurations/Dev.xml
generated
8
.idea/runConfigurations/Dev.xml
generated
|
|
@ -1,8 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Dev" type="CompoundRunConfigurationType">
|
|
||||||
<toRun name="Run compendium" targetId="RsBuildProfile:dev" type="CargoCommandRunConfiguration" />
|
|
||||||
<toRun name="dev-database-pg" type="docker-deploy" />
|
|
||||||
<toRun name="Vite Dev Server" type="js.build_tools.npm" />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
25
.idea/runConfigurations/Run_with_vite.xml
generated
25
.idea/runConfigurations/Run_with_vite.xml
generated
|
|
@ -1,25 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Run with vite" type="CargoCommandRunConfiguration" factoryName="Cargo Command">
|
|
||||||
<option name="buildProfileId" value="dev" />
|
|
||||||
<option name="command" value="run --package compendium --bin compendium --features vite" />
|
|
||||||
<option name="workingDirectory" value="file://$PROJECT_DIR$" />
|
|
||||||
<envs>
|
|
||||||
<env name="CPD_DB_HOST" value="localhost" />
|
|
||||||
<env name="CPD_DB_NAME" value="compendium" />
|
|
||||||
<env name="CPD_DB_PASSWORD" value=""1234"" />
|
|
||||||
<env name="CPD_DB_USER" value="postgres" />
|
|
||||||
</envs>
|
|
||||||
<option name="emulateTerminal" value="true" />
|
|
||||||
<option name="channel" value="DEFAULT" />
|
|
||||||
<option name="requiredFeatures" value="true" />
|
|
||||||
<option name="allFeatures" value="false" />
|
|
||||||
<option name="withSudo" value="false" />
|
|
||||||
<option name="buildTarget" value="REMOTE" />
|
|
||||||
<option name="backtrace" value="SHORT" />
|
|
||||||
<option name="isRedirectInput" value="false" />
|
|
||||||
<option name="redirectInputPath" value="" />
|
|
||||||
<method v="2">
|
|
||||||
<option name="CARGO.BUILD_TASK_PROVIDER" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
16
.idea/runConfigurations/Vite_Dev_Server.xml
generated
16
.idea/runConfigurations/Vite_Dev_Server.xml
generated
|
|
@ -1,16 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Vite Dev Server" type="js.build_tools.npm">
|
|
||||||
<package-json value="$PROJECT_DIR$/package.json" />
|
|
||||||
<command value="run" />
|
|
||||||
<scripts>
|
|
||||||
<script value="dev" />
|
|
||||||
</scripts>
|
|
||||||
<node-interpreter value="$USER_HOME$/.bun/bin/bun" />
|
|
||||||
<package-manager value="$USER_HOME$/.bun/bin/bun" />
|
|
||||||
<envs />
|
|
||||||
<EXTENSION ID="com.intellij.lang.javascript.buildTools.npm.rc.StartBrowserRunConfigurationExtension">
|
|
||||||
<browser start="true" url="http://localhost:3000" />
|
|
||||||
</EXTENSION>
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
37
.idea/runConfigurations/dev_database_pg.xml
generated
37
.idea/runConfigurations/dev_database_pg.xml
generated
|
|
@ -1,37 +0,0 @@
|
||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="dev-database-pg" type="docker-deploy" factoryName="docker-image" activateToolWindowBeforeRun="false" server-name="Podman">
|
|
||||||
<deployment type="docker-image">
|
|
||||||
<settings>
|
|
||||||
<option name="imageTag" value="docker.io/library/postgres:latest" />
|
|
||||||
<option name="containerName" value="dev-database-pg" />
|
|
||||||
<option name="envVars">
|
|
||||||
<list>
|
|
||||||
<DockerEnvVarImpl>
|
|
||||||
<option name="name" value="POSTGRES_PASSWORD" />
|
|
||||||
<option name="value" value="password" />
|
|
||||||
</DockerEnvVarImpl>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
<option name="portBindings">
|
|
||||||
<list>
|
|
||||||
<DockerPortBindingImpl>
|
|
||||||
<option name="containerPort" value="5432" />
|
|
||||||
<option name="hostPort" value="5432" />
|
|
||||||
</DockerPortBindingImpl>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
<option name="commandLineOptions" value="" />
|
|
||||||
<option name="showCommandPreview" value="true" />
|
|
||||||
<option name="volumeBindings">
|
|
||||||
<list>
|
|
||||||
<DockerVolumeBindingImpl>
|
|
||||||
<option name="containerPath" value="/var/lib/postgresql/data" />
|
|
||||||
<option name="hostPath" value="dev-database-pg-data" />
|
|
||||||
</DockerVolumeBindingImpl>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</settings>
|
|
||||||
</deployment>
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
42
.idea/sqlDataSources.xml
generated
42
.idea/sqlDataSources.xml
generated
|
|
@ -1,42 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="DdlMappings">
|
|
||||||
<mapping uuid="0991fb47-2942-4345-9491-170ad056c3e3" name="DDL Mapping">
|
|
||||||
<data-sources db="6d0a10cc-f084-4363-aa62-90ce255401e4" ddl="28d6cbf6-ed14-40f1-8733-fe8ae17f9380" />
|
|
||||||
<scope>
|
|
||||||
<node kind="database" qname="compendium">
|
|
||||||
<node kind="schema" qname="@" />
|
|
||||||
</node>
|
|
||||||
</scope>
|
|
||||||
</mapping>
|
|
||||||
</component>
|
|
||||||
<component name="SqlDataSourceStorage">
|
|
||||||
<option name="dataSources">
|
|
||||||
<list>
|
|
||||||
<State>
|
|
||||||
<option name="id" value="28d6cbf6-ed14-40f1-8733-fe8ae17f9380" />
|
|
||||||
<option name="name" value="compendium@localhost (DDL)" />
|
|
||||||
<option name="dbmsName" value="POSTGRES" />
|
|
||||||
<option name="urls">
|
|
||||||
<array>
|
|
||||||
<option value="file://$PROJECT_DIR$/src" />
|
|
||||||
</array>
|
|
||||||
</option>
|
|
||||||
<option name="scriptOptions">
|
|
||||||
<map>
|
|
||||||
<entry key="CreateIfNotExists" value="1" />
|
|
||||||
<entry key="CreateOrReplace" value="1" />
|
|
||||||
<entry key="Grants" value="1" />
|
|
||||||
<entry key="Owner" value="1" />
|
|
||||||
</map>
|
|
||||||
</option>
|
|
||||||
<option name="scopes">
|
|
||||||
<map>
|
|
||||||
<entry key="$PROJECT_DIR$/src" value="" />
|
|
||||||
</map>
|
|
||||||
</option>
|
|
||||||
</State>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
6
.idea/sqldialects.xml
generated
6
.idea/sqldialects.xml
generated
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="SqlDialectMappings">
|
|
||||||
<file url="file://$PROJECT_DIR$/src" dialect="PostgreSQL" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
6
.idea/vcs.xml
generated
6
.idea/vcs.xml
generated
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
26
.justfile
26
.justfile
|
|
@ -3,32 +3,26 @@ set dotenv-load := true
|
||||||
bin_name := "compendium"
|
bin_name := "compendium"
|
||||||
release_mode := "dev"
|
release_mode := "dev"
|
||||||
container_registry := "git.alecodes.page/alecodes"
|
container_registry := "git.alecodes.page/alecodes"
|
||||||
container_image_name := container_registry / bin_name
|
container_image_name := container_registry / bin_name
|
||||||
|
|
||||||
# Start dev server
|
|
||||||
dev:
|
dev:
|
||||||
watchexec --clear --restart --watch=src cargo run {{ if release_mode == "prod" { "--release" } else { "" } }}
|
watchexec --clear --restart --watch=frontend --watch=src cargo run {{ if release_mode == "prod" { "--release" } else { "" } }}
|
||||||
|
|
||||||
# Build the container locally
|
|
||||||
build:
|
build:
|
||||||
podman build --tag {{ container_image_name }}:latest --cache-to {{ container_image_name }}-cache --cache-from {{ container_image_name }}-cache .
|
podman build --tag {{ container_image_name }}:latest --cache-to {{ container_image_name }}-cache --cache-from {{ container_image_name }}-cache .
|
||||||
|
|
||||||
# Run tests
|
|
||||||
test:
|
test:
|
||||||
cargo test
|
cargo test
|
||||||
|
|
||||||
# Publish the project to the container registry
|
publish: (build)
|
||||||
publish +TAGS='latest':
|
podman push {{ container_image_name }}:latest
|
||||||
for tag in {{ TAGS }}; do podman push {{ container_image_name }}:latest {{ container_image_name }}:${tag}; done
|
podman push {{ container_image_name }}:latest {{ container_image_name }}:$(git rev-parse --short HEAD)
|
||||||
podman push {{ container_image_name }}:latest {{ container_image_name }}:$(git rev-parse --short HEAD)
|
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
|
|
||||||
# Delete build artifacts
|
|
||||||
clean:
|
clean:
|
||||||
podman system prune --build
|
podman system prune --build
|
||||||
cargo clean
|
cargo clean
|
||||||
|
|
||||||
# Bump crate version, this will also publish it
|
|
||||||
bump:
|
bump:
|
||||||
cog bump --auto
|
cog bump --auto
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,6 @@
|
||||||
All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
|
All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines.
|
||||||
|
|
||||||
- - -
|
- - -
|
||||||
## 0.1.1 - 2025-07-16
|
|
||||||
#### Miscellaneous Chores
|
|
||||||
- add docs to just commands - (6cf98d1) - aleidk
|
|
||||||
#### Refactoring
|
|
||||||
- change assets handling to vite-rs - (af709f2) - aleidk
|
|
||||||
|
|
||||||
- - -
|
|
||||||
|
|
||||||
## 0.1.0 - 2025-04-15
|
## 0.1.0 - 2025-04-15
|
||||||
#### Bug Fixes
|
#### Bug Fixes
|
||||||
- prevent crash of ci due to artifacts upload - (e0b259c) - aleidk
|
- prevent crash of ci due to artifacts upload - (e0b259c) - aleidk
|
||||||
|
|
|
||||||
19
Cargo.lock
generated
19
Cargo.lock
generated
|
|
@ -286,11 +286,11 @@ dependencies = [
|
||||||
"axum-sqlx-tx",
|
"axum-sqlx-tx",
|
||||||
"chrono",
|
"chrono",
|
||||||
"figment",
|
"figment",
|
||||||
|
"mime_guess",
|
||||||
"minijinja",
|
"minijinja",
|
||||||
"minijinja-autoreload",
|
|
||||||
"minijinja-embed",
|
"minijinja-embed",
|
||||||
|
"notify",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
|
||||||
"sqlx",
|
"sqlx",
|
||||||
"thiserror 2.0.11",
|
"thiserror 2.0.11",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
|
@ -298,7 +298,6 @@ dependencies = [
|
||||||
"tower-livereload",
|
"tower-livereload",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
"url",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -1161,25 +1160,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "minijinja"
|
name = "minijinja"
|
||||||
version = "2.9.0"
|
version = "2.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "98642a6dfca91122779a307b77cd07a4aa951fbe32232aaf5bad9febc66be754"
|
checksum = "cff7b8df5e85e30b87c2b0b3f58ba3a87b68e133738bf512a7713769326dbca9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memo-map",
|
"memo-map",
|
||||||
"self_cell",
|
"self_cell",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "minijinja-autoreload"
|
|
||||||
version = "2.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2bfa27f77378f5239b971abf45c16b56f6f207c0186f5b62ee2aee1be19dd6ce"
|
|
||||||
dependencies = [
|
|
||||||
"minijinja",
|
|
||||||
"notify",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "minijinja-embed"
|
name = "minijinja-embed"
|
||||||
version = "2.7.0"
|
version = "2.7.0"
|
||||||
|
|
|
||||||
23
Cargo.toml
23
Cargo.toml
|
|
@ -1,11 +1,7 @@
|
||||||
[package]
|
[package]
|
||||||
name = "compendium"
|
name = "compendium"
|
||||||
version = "0.1.1"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2021"
|
||||||
|
|
||||||
[features]
|
|
||||||
embed = ["vite"]
|
|
||||||
vite = []
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
axum = { version = "0.8.1", features = ["macros"] }
|
axum = { version = "0.8.1", features = ["macros"] }
|
||||||
|
|
@ -13,16 +9,17 @@ axum-htmx = { version = "0.7.0", features = ["auto-vary", "serde", "guards"] }
|
||||||
axum-sqlx-tx = "0.10.0"
|
axum-sqlx-tx = "0.10.0"
|
||||||
chrono = { version = "0.4.39", features = ["serde"] }
|
chrono = { version = "0.4.39", features = ["serde"] }
|
||||||
figment = { version = "0.10.19", features = ["env", "toml"] }
|
figment = { version = "0.10.19", features = ["env", "toml"] }
|
||||||
|
mime_guess = "2.0.5"
|
||||||
minijinja = { version = "2.7.0", features = ["loader"] }
|
minijinja = { version = "2.7.0", features = ["loader"] }
|
||||||
minijinja-embed = "2.7.0"
|
minijinja-embed = "2.7.0"
|
||||||
minijinja-autoreload = "2.9.0"
|
notify = "8.0.0"
|
||||||
serde = { version = "1.0.217", features = ["derive"] }
|
serde = { version = "1.0.217", features = ["derive"] }
|
||||||
sqlx = { version = "0.8.3", features = [
|
sqlx = { version = "0.8.3", features = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"derive",
|
"derive",
|
||||||
"json",
|
"json",
|
||||||
"postgres",
|
"postgres",
|
||||||
"runtime-tokio",
|
"runtime-tokio",
|
||||||
] }
|
] }
|
||||||
thiserror = "2.0.11"
|
thiserror = "2.0.11"
|
||||||
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] }
|
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] }
|
||||||
|
|
@ -30,8 +27,6 @@ tower-http = { version = "0.6.2", features = ["fs", "trace"] }
|
||||||
tower-livereload = "0.9.6"
|
tower-livereload = "0.9.6"
|
||||||
tracing = "0.1.41"
|
tracing = "0.1.41"
|
||||||
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
|
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
|
||||||
url = "2.5.4"
|
|
||||||
serde_json = "1.0.138"
|
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
minijinja-embed = "2.7.0"
|
minijinja-embed = "2.7.0"
|
||||||
|
|
|
||||||
52
build.rs
52
build.rs
|
|
@ -1,27 +1,33 @@
|
||||||
fn main() {
|
use std::io::Write;
|
||||||
#[cfg(feature = "vite")]
|
use std::process::Command;
|
||||||
{
|
use std::{env, io};
|
||||||
let out_dir = if cfg!(feature = "embed") {
|
|
||||||
std::env::var("OUT_DIR").unwrap()
|
|
||||||
} else {
|
|
||||||
format!("../../{}", std::env::var("CPD_PUBLIC_DIR").unwrap_or(String::from("public")))
|
|
||||||
};
|
|
||||||
|
|
||||||
std::process::Command::new("bun")
|
fn cmd(cmd: &mut Command) {
|
||||||
.args(&["vite", "build", "--outDir", &out_dir])
|
let output = cmd.output().unwrap();
|
||||||
.status()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
println!("cargo::rerun-if-changed=frontend/assets");
|
let _ = io::stdout().write_all(&output.stdout);
|
||||||
println!("cargo::rerun-if-changed=frontend/static");
|
if !output.status.success() {
|
||||||
println!("cargo::rerun-if-env-changed=CPD_PUBLIC_DIR");
|
let _ = io::stderr().write_all(&output.stderr);
|
||||||
println!("cargo::rerun-if-env-changed=CARGO_FEATURE_EMBED");
|
panic!("\nFailed to run command\n");
|
||||||
}
|
|
||||||
println!("cargo::rerun-if-env-changed=CARGO_FEATURE_VITE");
|
|
||||||
|
|
||||||
#[cfg(feature = "embed")]
|
|
||||||
{
|
|
||||||
minijinja_embed::embed_templates!("frontend/templates");
|
|
||||||
println!("cargo::rerun-if-changed=frontend/templates");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let out_dir = env::var("OUT_DIR").unwrap();
|
||||||
|
|
||||||
|
cmd(Command::new("bun").args([
|
||||||
|
"run",
|
||||||
|
"tmpl-build-and-load",
|
||||||
|
"--outdir",
|
||||||
|
out_dir.as_str(),
|
||||||
|
"--globs",
|
||||||
|
"frontend/templates/**/*.html",
|
||||||
|
]));
|
||||||
|
|
||||||
|
println!("Build completed successfully!");
|
||||||
|
|
||||||
|
println!("cargo::rerun-if-changed=build.rs");
|
||||||
|
println!("cargo::rerun-if-changed=package.json");
|
||||||
|
println!("cargo::rerun-if-changed=frontend");
|
||||||
|
println!("cargo:rerun-if-changed=migrations");
|
||||||
|
}
|
||||||
|
|
|
||||||
214
bun.lock
214
bun.lock
|
|
@ -6,18 +6,14 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mini-strap/core": "^0.1.2",
|
"@mini-strap/core": "^0.1.2",
|
||||||
"@picocss/pico": "^2.1.1",
|
"@picocss/pico": "^2.1.1",
|
||||||
"feather-icons": "^4.29.2",
|
|
||||||
"htmx.org": "2.0.4",
|
"htmx.org": "2.0.4",
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@alecodes/tmpl-build-and-load": "^0.1.3",
|
"@alecodes/tmpl-build-and-load": "^0.1.3",
|
||||||
"@biomejs/biome": "1.9.4",
|
"@types/bun": "latest",
|
||||||
"@types/bun": "^1.2.10",
|
|
||||||
"sass-embedded": "^1.86.3",
|
|
||||||
"vite": "^6.3.1",
|
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"typescript": "^5.7.3",
|
"typescript": "^5.0.0",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -26,76 +22,6 @@
|
||||||
|
|
||||||
"@alecodes/tmpl-build-and-load": ["@alecodes/tmpl-build-and-load@0.1.3", "https://git.alecodes.page/api/packages/alecodes/npm/%40alecodes%2Ftmpl-build-and-load/-/0.1.3/tmpl-build-and-load-0.1.3.tgz", { "dependencies": { "@alecodes/bun-plugin-sass": "^0.1.3" }, "peerDependencies": { "typescript": "^5" }, "bin": { "@alecodes/tmpl-build-and-load": "index.ts" } }, "sha512-MsLmMxxrPtAJXYC1QrTVIiuKSNOeNgX/Z5u9jsSlc+pUzxnBGIEctiqqt6rYn1lqdD8M4aTmVlZqzvacE6dujQ=="],
|
"@alecodes/tmpl-build-and-load": ["@alecodes/tmpl-build-and-load@0.1.3", "https://git.alecodes.page/api/packages/alecodes/npm/%40alecodes%2Ftmpl-build-and-load/-/0.1.3/tmpl-build-and-load-0.1.3.tgz", { "dependencies": { "@alecodes/bun-plugin-sass": "^0.1.3" }, "peerDependencies": { "typescript": "^5" }, "bin": { "@alecodes/tmpl-build-and-load": "index.ts" } }, "sha512-MsLmMxxrPtAJXYC1QrTVIiuKSNOeNgX/Z5u9jsSlc+pUzxnBGIEctiqqt6rYn1lqdD8M4aTmVlZqzvacE6dujQ=="],
|
||||||
|
|
||||||
"@biomejs/biome": ["@biomejs/biome@1.9.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "1.9.4", "@biomejs/cli-darwin-x64": "1.9.4", "@biomejs/cli-linux-arm64": "1.9.4", "@biomejs/cli-linux-arm64-musl": "1.9.4", "@biomejs/cli-linux-x64": "1.9.4", "@biomejs/cli-linux-x64-musl": "1.9.4", "@biomejs/cli-win32-arm64": "1.9.4", "@biomejs/cli-win32-x64": "1.9.4" }, "bin": { "biome": "bin/biome" } }, "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog=="],
|
|
||||||
|
|
||||||
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@1.9.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw=="],
|
|
||||||
|
|
||||||
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@1.9.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg=="],
|
|
||||||
|
|
||||||
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g=="],
|
|
||||||
|
|
||||||
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@1.9.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA=="],
|
|
||||||
|
|
||||||
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg=="],
|
|
||||||
|
|
||||||
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@1.9.4", "", { "os": "linux", "cpu": "x64" }, "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg=="],
|
|
||||||
|
|
||||||
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@1.9.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg=="],
|
|
||||||
|
|
||||||
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@1.9.4", "", { "os": "win32", "cpu": "x64" }, "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA=="],
|
|
||||||
|
|
||||||
"@bufbuild/protobuf": ["@bufbuild/protobuf@2.2.5", "", {}, "sha512-/g5EzJifw5GF8aren8wZ/G5oMuPoGeS6MQD3ca8ddcvdXR5UELUfdTZITCGNhNXynY/AYl3Z4plmxdj/tRl/hQ=="],
|
|
||||||
|
|
||||||
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag=="],
|
|
||||||
|
|
||||||
"@esbuild/android-arm": ["@esbuild/android-arm@0.25.2", "", { "os": "android", "cpu": "arm" }, "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA=="],
|
|
||||||
|
|
||||||
"@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w=="],
|
|
||||||
|
|
||||||
"@esbuild/android-x64": ["@esbuild/android-x64@0.25.2", "", { "os": "android", "cpu": "x64" }, "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg=="],
|
|
||||||
|
|
||||||
"@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA=="],
|
|
||||||
|
|
||||||
"@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA=="],
|
|
||||||
|
|
||||||
"@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w=="],
|
|
||||||
|
|
||||||
"@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ=="],
|
|
||||||
|
|
||||||
"@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.2", "", { "os": "linux", "cpu": "arm" }, "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g=="],
|
|
||||||
|
|
||||||
"@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g=="],
|
|
||||||
|
|
||||||
"@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ=="],
|
|
||||||
|
|
||||||
"@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.2", "", { "os": "linux", "cpu": "none" }, "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w=="],
|
|
||||||
|
|
||||||
"@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.2", "", { "os": "linux", "cpu": "none" }, "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q=="],
|
|
||||||
|
|
||||||
"@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g=="],
|
|
||||||
|
|
||||||
"@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.2", "", { "os": "linux", "cpu": "none" }, "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw=="],
|
|
||||||
|
|
||||||
"@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q=="],
|
|
||||||
|
|
||||||
"@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.2", "", { "os": "linux", "cpu": "x64" }, "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg=="],
|
|
||||||
|
|
||||||
"@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.2", "", { "os": "none", "cpu": "arm64" }, "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw=="],
|
|
||||||
|
|
||||||
"@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.2", "", { "os": "none", "cpu": "x64" }, "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg=="],
|
|
||||||
|
|
||||||
"@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg=="],
|
|
||||||
|
|
||||||
"@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw=="],
|
|
||||||
|
|
||||||
"@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA=="],
|
|
||||||
|
|
||||||
"@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q=="],
|
|
||||||
|
|
||||||
"@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg=="],
|
|
||||||
|
|
||||||
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.2", "", { "os": "win32", "cpu": "x64" }, "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA=="],
|
|
||||||
|
|
||||||
"@mini-strap/core": ["@mini-strap/core@0.1.2", "https://git.alecodes.page/api/packages/alecodes/npm/%40mini-strap%2Fcore/-/0.1.2/core-0.1.2.tgz", { "peerDependencies": { "typescript": "^5.0.0" }, "bin": { "@mini-strap/core": "build.ts" } }, "sha512-bt9su5jpslUMYmoNLz7s8P6RlN7Knriy8BtHBfVnpEizOh3DroStRr+yDCSLfhyByKXo6sa9ZNytc25ianEtbA=="],
|
"@mini-strap/core": ["@mini-strap/core@0.1.2", "https://git.alecodes.page/api/packages/alecodes/npm/%40mini-strap%2Fcore/-/0.1.2/core-0.1.2.tgz", { "peerDependencies": { "typescript": "^5.0.0" }, "bin": { "@mini-strap/core": "build.ts" } }, "sha512-bt9su5jpslUMYmoNLz7s8P6RlN7Knriy8BtHBfVnpEizOh3DroStRr+yDCSLfhyByKXo6sa9ZNytc25ianEtbA=="],
|
||||||
|
|
||||||
"@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="],
|
"@parcel/watcher": ["@parcel/watcher@2.5.1", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-android-arm64": "2.5.1", "@parcel/watcher-darwin-arm64": "2.5.1", "@parcel/watcher-darwin-x64": "2.5.1", "@parcel/watcher-freebsd-x64": "2.5.1", "@parcel/watcher-linux-arm-glibc": "2.5.1", "@parcel/watcher-linux-arm-musl": "2.5.1", "@parcel/watcher-linux-arm64-glibc": "2.5.1", "@parcel/watcher-linux-arm64-musl": "2.5.1", "@parcel/watcher-linux-x64-glibc": "2.5.1", "@parcel/watcher-linux-x64-musl": "2.5.1", "@parcel/watcher-win32-arm64": "2.5.1", "@parcel/watcher-win32-ia32": "2.5.1", "@parcel/watcher-win32-x64": "2.5.1" } }, "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg=="],
|
||||||
|
|
@ -128,80 +54,22 @@
|
||||||
|
|
||||||
"@picocss/pico": ["@picocss/pico@2.1.1", "", {}, "sha512-kIDugA7Ps4U+2BHxiNHmvgPIQDWPDU4IeU6TNRdvXQM1uZX+FibqDQT2xUOnnO2yq/LUHcwnGlu1hvf4KfXnMg=="],
|
"@picocss/pico": ["@picocss/pico@2.1.1", "", {}, "sha512-kIDugA7Ps4U+2BHxiNHmvgPIQDWPDU4IeU6TNRdvXQM1uZX+FibqDQT2xUOnnO2yq/LUHcwnGlu1hvf4KfXnMg=="],
|
||||||
|
|
||||||
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.40.0", "", { "os": "android", "cpu": "arm" }, "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg=="],
|
"@types/bun": ["@types/bun@1.2.2", "", { "dependencies": { "bun-types": "1.2.2" } }, "sha512-tr74gdku+AEDN5ergNiBnplr7hpDp3V1h7fqI2GcR/rsUaM39jpSeKH0TFibRvU0KwniRx5POgaYnaXbk0hU+w=="],
|
||||||
|
|
||||||
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.40.0", "", { "os": "android", "cpu": "arm64" }, "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.40.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.40.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.40.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.40.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.40.0", "", { "os": "linux", "cpu": "arm" }, "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.40.0", "", { "os": "linux", "cpu": "arm" }, "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.40.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.40.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.40.0", "", { "os": "linux", "cpu": "none" }, "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.40.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.40.0", "", { "os": "linux", "cpu": "none" }, "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.40.0", "", { "os": "linux", "cpu": "none" }, "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.40.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.40.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.40.0", "", { "os": "linux", "cpu": "x64" }, "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.40.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.40.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA=="],
|
|
||||||
|
|
||||||
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.40.0", "", { "os": "win32", "cpu": "x64" }, "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ=="],
|
|
||||||
|
|
||||||
"@types/bun": ["@types/bun@1.2.10", "", { "dependencies": { "bun-types": "1.2.10" } }, "sha512-eilv6WFM3M0c9ztJt7/g80BDusK98z/FrFwseZgT4bXCq2vPhXD4z8R3oddmAn+R/Nmz9vBn4kweJKmGTZj+lg=="],
|
|
||||||
|
|
||||||
"@types/estree": ["@types/estree@1.0.7", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="],
|
|
||||||
|
|
||||||
"@types/node": ["@types/node@22.13.4", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg=="],
|
"@types/node": ["@types/node@22.13.4", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg=="],
|
||||||
|
|
||||||
|
"@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="],
|
||||||
|
|
||||||
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
|
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
|
||||||
|
|
||||||
"buffer-builder": ["buffer-builder@0.2.0", "", {}, "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg=="],
|
"bun-types": ["bun-types@1.2.2", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-RCbMH5elr9gjgDGDhkTTugA21XtJAy/9jkKe/G3WR2q17VPGhcquf9Sir6uay9iW+7P/BV0CAHA1XlHXMAVKHg=="],
|
||||||
|
|
||||||
"bun-types": ["bun-types@1.2.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-b5ITZMnVdf3m1gMvJHG+gIfeJHiQPJak0f7925Hxu6ZN5VKA8AGy4GZ4lM+Xkn6jtWxg5S3ldWvfmXdvnkp3GQ=="],
|
|
||||||
|
|
||||||
"chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
|
"chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="],
|
||||||
|
|
||||||
"classnames": ["classnames@2.5.1", "", {}, "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="],
|
|
||||||
|
|
||||||
"colorjs.io": ["colorjs.io@0.5.2", "", {}, "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw=="],
|
|
||||||
|
|
||||||
"core-js": ["core-js@3.41.0", "", {}, "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA=="],
|
|
||||||
|
|
||||||
"detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="],
|
"detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="],
|
||||||
|
|
||||||
"esbuild": ["esbuild@0.25.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.2", "@esbuild/android-arm": "0.25.2", "@esbuild/android-arm64": "0.25.2", "@esbuild/android-x64": "0.25.2", "@esbuild/darwin-arm64": "0.25.2", "@esbuild/darwin-x64": "0.25.2", "@esbuild/freebsd-arm64": "0.25.2", "@esbuild/freebsd-x64": "0.25.2", "@esbuild/linux-arm": "0.25.2", "@esbuild/linux-arm64": "0.25.2", "@esbuild/linux-ia32": "0.25.2", "@esbuild/linux-loong64": "0.25.2", "@esbuild/linux-mips64el": "0.25.2", "@esbuild/linux-ppc64": "0.25.2", "@esbuild/linux-riscv64": "0.25.2", "@esbuild/linux-s390x": "0.25.2", "@esbuild/linux-x64": "0.25.2", "@esbuild/netbsd-arm64": "0.25.2", "@esbuild/netbsd-x64": "0.25.2", "@esbuild/openbsd-arm64": "0.25.2", "@esbuild/openbsd-x64": "0.25.2", "@esbuild/sunos-x64": "0.25.2", "@esbuild/win32-arm64": "0.25.2", "@esbuild/win32-ia32": "0.25.2", "@esbuild/win32-x64": "0.25.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ=="],
|
|
||||||
|
|
||||||
"fdir": ["fdir@6.4.3", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw=="],
|
|
||||||
|
|
||||||
"feather-icons": ["feather-icons@4.29.2", "", { "dependencies": { "classnames": "^2.2.5", "core-js": "^3.1.3" } }, "sha512-0TaCFTnBTVCz6U+baY2UJNKne5ifGh7sMG4ZC2LoBWCZdIyPa+y6UiR4lEYGws1JOFWdee8KAsAIvu0VcXqiqA=="],
|
|
||||||
|
|
||||||
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
|
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
|
||||||
|
|
||||||
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
|
|
||||||
|
|
||||||
"has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
|
|
||||||
|
|
||||||
"htmx.org": ["htmx.org@2.0.4", "", {}, "sha512-HLxMCdfXDOJirs3vBZl/ZLoY+c7PfM4Ahr2Ad4YXh6d22T5ltbTXFFkpx9Tgb2vvmWFMbIc3LqN2ToNkZJvyYQ=="],
|
"htmx.org": ["htmx.org@2.0.4", "", {}, "sha512-HLxMCdfXDOJirs3vBZl/ZLoY+c7PfM4Ahr2Ad4YXh6d22T5ltbTXFFkpx9Tgb2vvmWFMbIc3LqN2ToNkZJvyYQ=="],
|
||||||
|
|
||||||
"immutable": ["immutable@5.0.3", "", {}, "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw=="],
|
"immutable": ["immutable@5.0.3", "", {}, "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw=="],
|
||||||
|
|
@ -214,88 +82,20 @@
|
||||||
|
|
||||||
"micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
|
"micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="],
|
||||||
|
|
||||||
"nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
|
|
||||||
|
|
||||||
"node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="],
|
"node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="],
|
||||||
|
|
||||||
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
|
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
||||||
|
|
||||||
"picomatch": ["picomatch@4.0.2", "", {}, "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg=="],
|
|
||||||
|
|
||||||
"postcss": ["postcss@8.5.3", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A=="],
|
|
||||||
|
|
||||||
"readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
"readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="],
|
||||||
|
|
||||||
"rollup": ["rollup@4.40.0", "", { "dependencies": { "@types/estree": "1.0.7" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.40.0", "@rollup/rollup-android-arm64": "4.40.0", "@rollup/rollup-darwin-arm64": "4.40.0", "@rollup/rollup-darwin-x64": "4.40.0", "@rollup/rollup-freebsd-arm64": "4.40.0", "@rollup/rollup-freebsd-x64": "4.40.0", "@rollup/rollup-linux-arm-gnueabihf": "4.40.0", "@rollup/rollup-linux-arm-musleabihf": "4.40.0", "@rollup/rollup-linux-arm64-gnu": "4.40.0", "@rollup/rollup-linux-arm64-musl": "4.40.0", "@rollup/rollup-linux-loongarch64-gnu": "4.40.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.40.0", "@rollup/rollup-linux-riscv64-gnu": "4.40.0", "@rollup/rollup-linux-riscv64-musl": "4.40.0", "@rollup/rollup-linux-s390x-gnu": "4.40.0", "@rollup/rollup-linux-x64-gnu": "4.40.0", "@rollup/rollup-linux-x64-musl": "4.40.0", "@rollup/rollup-win32-arm64-msvc": "4.40.0", "@rollup/rollup-win32-ia32-msvc": "4.40.0", "@rollup/rollup-win32-x64-msvc": "4.40.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w=="],
|
|
||||||
|
|
||||||
"rxjs": ["rxjs@7.8.2", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA=="],
|
|
||||||
|
|
||||||
"sass": ["sass@1.85.0", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww=="],
|
"sass": ["sass@1.85.0", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww=="],
|
||||||
|
|
||||||
"sass-embedded": ["sass-embedded@1.86.3", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0", "buffer-builder": "^0.2.0", "colorjs.io": "^0.5.0", "immutable": "^5.0.2", "rxjs": "^7.4.0", "supports-color": "^8.1.1", "sync-child-process": "^1.0.2", "varint": "^6.0.0" }, "optionalDependencies": { "sass-embedded-android-arm": "1.86.3", "sass-embedded-android-arm64": "1.86.3", "sass-embedded-android-ia32": "1.86.3", "sass-embedded-android-riscv64": "1.86.3", "sass-embedded-android-x64": "1.86.3", "sass-embedded-darwin-arm64": "1.86.3", "sass-embedded-darwin-x64": "1.86.3", "sass-embedded-linux-arm": "1.86.3", "sass-embedded-linux-arm64": "1.86.3", "sass-embedded-linux-ia32": "1.86.3", "sass-embedded-linux-musl-arm": "1.86.3", "sass-embedded-linux-musl-arm64": "1.86.3", "sass-embedded-linux-musl-ia32": "1.86.3", "sass-embedded-linux-musl-riscv64": "1.86.3", "sass-embedded-linux-musl-x64": "1.86.3", "sass-embedded-linux-riscv64": "1.86.3", "sass-embedded-linux-x64": "1.86.3", "sass-embedded-win32-arm64": "1.86.3", "sass-embedded-win32-ia32": "1.86.3", "sass-embedded-win32-x64": "1.86.3" }, "bin": { "sass": "dist/bin/sass.js" } }, "sha512-3pZSp24ibO1hdopj+W9DuiWsZOb2YY6AFRo/jjutKLBkqJGM1nJjXzhAYfzRV+Xn5BX1eTI4bBTE09P0XNHOZg=="],
|
|
||||||
|
|
||||||
"sass-embedded-android-arm": ["sass-embedded-android-arm@1.86.3", "", { "os": "android", "cpu": "arm" }, "sha512-UyeXrFzZSvrGbvrWUBcspbsbivGgAgebLGJdSqJulgSyGbA6no3DWQ5Qpdd6+OAUC39BlpPu74Wx9s4RrVuaFw=="],
|
|
||||||
|
|
||||||
"sass-embedded-android-arm64": ["sass-embedded-android-arm64@1.86.3", "", { "os": "android", "cpu": "arm64" }, "sha512-q+XwFp6WgAv+UgnQhsB8KQ95kppvWAB7DSoJp+8Vino8b9ND+1ai3cUUZPE5u4SnLZrgo5NtrbPvN5KLc4Pfyg=="],
|
|
||||||
|
|
||||||
"sass-embedded-android-ia32": ["sass-embedded-android-ia32@1.86.3", "", { "os": "android", "cpu": "ia32" }, "sha512-gTJjVh2cRzvGujXj5ApPk/owUTL5SiO7rDtNLrzYAzi1N5HRuLYXqk3h1IQY3+eCOBjGl7mQ9XyySbJs/3hDvg=="],
|
|
||||||
|
|
||||||
"sass-embedded-android-riscv64": ["sass-embedded-android-riscv64@1.86.3", "", { "os": "android", "cpu": "none" }, "sha512-Po3JnyiCS16kd6REo1IMUbFGYtvL9O0rmKaXx5vOuBaJD1LPy2LiSSp7TU7wkJ9IxsTDGzFaSeP1I9qb6D8VVg=="],
|
|
||||||
|
|
||||||
"sass-embedded-android-x64": ["sass-embedded-android-x64@1.86.3", "", { "os": "android", "cpu": "x64" }, "sha512-+7h3jdDv/0kUFx0BvxYlq2fa7CcHiDPlta6k5OxO5K6jyqJwo9hc0Z052BoYEauWTqZ+vK6bB5rv2BIzq4U9nA=="],
|
|
||||||
|
|
||||||
"sass-embedded-darwin-arm64": ["sass-embedded-darwin-arm64@1.86.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-EgLwV4ORm5Hr0DmIXo0Xw/vlzwLnfAiqD2jDXIglkBsc5czJmo4/IBdGXOP65TRnsgJEqvbU3aQhuawX5++x9A=="],
|
|
||||||
|
|
||||||
"sass-embedded-darwin-x64": ["sass-embedded-darwin-x64@1.86.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-dfKhfrGPRNLWLC82vy/vQGmNKmAiKWpdFuWiePRtg/E95pqw+sCu6080Y6oQLfFu37Iq3MpnXiSpDuSo7UnPWA=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-arm": ["sass-embedded-linux-arm@1.86.3", "", { "os": "linux", "cpu": "arm" }, "sha512-+fVCIH+OR0SMHn2NEhb/VfbpHuUxcPtqMS34OCV3Ka99LYZUJZqth4M3lT/ppGl52mwIVLNYzR4iLe6mdZ6mYA=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-arm64": ["sass-embedded-linux-arm64@1.86.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-tYq5rywR53Qtc+0KI6pPipOvW7a47ETY69VxfqI9BR2RKw2hBbaz0bIw6OaOgEBv2/XNwcWb7a4sr7TqgkqKAA=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-ia32": ["sass-embedded-linux-ia32@1.86.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-CmQ5OkqnaeLdaF+bMqlYGooBuenqm3LvEN9H8BLhjkpWiFW8hnYMetiqMcJjhrXLvDw601KGqA5sr/Rsg5s45g=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-musl-arm": ["sass-embedded-linux-musl-arm@1.86.3", "", { "os": "linux", "cpu": "arm" }, "sha512-SEm65SQknI4pl+mH5Xf231hOkHJyrlgh5nj4qDbiBG6gFeutaNkNIeRgKEg3cflXchCr8iV/q/SyPgjhhzQb7w=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-musl-arm64": ["sass-embedded-linux-musl-arm64@1.86.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-4zOr2C/eW89rxb4ozTfn7lBzyyM5ZigA1ZSRTcAR26Qbg/t2UksLdGnVX9/yxga0d6aOi0IvO/7iM2DPPRRotg=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-musl-ia32": ["sass-embedded-linux-musl-ia32@1.86.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-84Tcld32LB1loiqUvczWyVBQRCChm0wNLlkT59qF29nxh8njFIVf9yaPgXcSyyjpPoD9Tu0wnq3dvVzoMCh9AQ=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-musl-riscv64": ["sass-embedded-linux-musl-riscv64@1.86.3", "", { "os": "linux", "cpu": "none" }, "sha512-IxEqoiD7vdNpiOwccybbV93NljBy64wSTkUOknGy21SyV43C8uqESOwTwW9ywa3KufImKm8L3uQAW/B0KhJMWg=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-musl-x64": ["sass-embedded-linux-musl-x64@1.86.3", "", { "os": "linux", "cpu": "x64" }, "sha512-ePeTPXUxPK6JgHcUfnrkIyDtyt+zlAvF22mVZv6y1g/PZFm1lSfX+Za7TYHg9KaYqaaXDiw6zICX4i44HhR8rA=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-riscv64": ["sass-embedded-linux-riscv64@1.86.3", "", { "os": "linux", "cpu": "none" }, "sha512-NuXQ72dwfNLe35E+RaXJ4Noq4EkFwM65eWwCwxEWyJO9qxOx1EXiCAJii6x8kkOh5daWuMU0VAI1B9RsJaqqQQ=="],
|
|
||||||
|
|
||||||
"sass-embedded-linux-x64": ["sass-embedded-linux-x64@1.86.3", "", { "os": "linux", "cpu": "x64" }, "sha512-t8be9zJ5B82+og9bQmIQ83yMGYZMTMrlGA+uGWtYacmwg6w3093dk91Fx0YzNSZBp3Tk60qVYjCZnEIwy60x0g=="],
|
|
||||||
|
|
||||||
"sass-embedded-win32-arm64": ["sass-embedded-win32-arm64@1.86.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-4ghuAzjX4q8Nksm0aifRz8hgXMMxS0SuymrFfkfJlrSx68pIgvAge6AOw0edoZoe0Tf5ZbsWUWamhkNyNxkTvw=="],
|
|
||||||
|
|
||||||
"sass-embedded-win32-ia32": ["sass-embedded-win32-ia32@1.86.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-tCaK4zIRq9mLRPxLzBAdYlfCuS/xLNpmjunYxeWkIwlJo+k53h1udyXH/FInnQ2GgEz0xMXyvH3buuPgzwWYsw=="],
|
|
||||||
|
|
||||||
"sass-embedded-win32-x64": ["sass-embedded-win32-x64@1.86.3", "", { "os": "win32", "cpu": "x64" }, "sha512-zS+YNKfTF4SnOfpC77VTb0qNZyTXrxnAezSoRV0xnw6HlY+1WawMSSB6PbWtmbvyfXNgpmJUttoTtsvJjRCucg=="],
|
|
||||||
|
|
||||||
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
|
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
|
||||||
|
|
||||||
"supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="],
|
|
||||||
|
|
||||||
"sync-child-process": ["sync-child-process@1.0.2", "", { "dependencies": { "sync-message-port": "^1.0.0" } }, "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA=="],
|
|
||||||
|
|
||||||
"sync-message-port": ["sync-message-port@1.1.3", "", {}, "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg=="],
|
|
||||||
|
|
||||||
"tinyglobby": ["tinyglobby@0.2.12", "", { "dependencies": { "fdir": "^6.4.3", "picomatch": "^4.0.2" } }, "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww=="],
|
|
||||||
|
|
||||||
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
|
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
|
||||||
|
|
||||||
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
|
||||||
|
|
||||||
"typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="],
|
"typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="],
|
||||||
|
|
||||||
"undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="],
|
"undici-types": ["undici-types@6.20.0", "", {}, "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="],
|
||||||
|
|
||||||
"varint": ["varint@6.0.0", "", {}, "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg=="],
|
|
||||||
|
|
||||||
"vite": ["vite@6.3.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.3", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.12" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "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-kkzzkqtMESYklo96HKKPE5KKLkC1amlsqt+RjFMlX2AvbRB/0wghap19NdBxxwGZ+h/C6DLCrcEphPIItlGrRQ=="],
|
|
||||||
|
|
||||||
"micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
9
cog.toml
9
cog.toml
|
|
@ -8,11 +8,10 @@ branch_whitelist = []
|
||||||
skip_ci = "[skip ci]"
|
skip_ci = "[skip ci]"
|
||||||
skip_untracked = false
|
skip_untracked = false
|
||||||
pre_bump_hooks = [
|
pre_bump_hooks = [
|
||||||
"sed -E -i 's/(\"version\":) \"[0-9.]{5}\"/\\1 \"{{version|0.0.1}}\"/gi' package.json",
|
"sed -E -i 's/(\"version\":) \"[0-9.]{5}\"/\\1 \"{{version|0.0.1}}\"/gi' package.json",
|
||||||
# "just build",
|
"just publish",
|
||||||
# "just publish",
|
"echo 'bumping from {{latest|0.0.0}} to {{version|0.0.1}}'",
|
||||||
"echo 'bumping from {{latest|0.0.0}} to {{version|0.0.1}}'",
|
"cargo bump {{version|0.0.1}}",
|
||||||
"cargo bump {{version|0.0.1}}",
|
|
||||||
]
|
]
|
||||||
post_bump_hooks = ["git push", "git push origin {{version_tag}}"]
|
post_bump_hooks = ["git push", "git push origin {{version_tag}}"]
|
||||||
pre_package_bump_hooks = []
|
pre_package_bump_hooks = []
|
||||||
|
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
@import "style.scss";
|
|
||||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 59 KiB |
|
|
@ -1,2 +0,0 @@
|
||||||
// add the beginning of your app entry
|
|
||||||
import "htmx.org";
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
/* Required for Vite to consider this a css file if it's empty */
|
|
||||||
|
|
||||||
@use "@mini-strap/core";
|
@use "@mini-strap/core";
|
||||||
|
|
||||||
@use "@picocss/pico/scss/pico.scss" with (
|
@use "@picocss/pico/scss/pico.scss" with (
|
||||||
|
|
@ -11,7 +9,3 @@
|
||||||
--pico-form-element-spacing-vertical: 0.25rem;
|
--pico-form-element-spacing-vertical: 0.25rem;
|
||||||
--pico-form-element-spacing-horizontal: 0.5rem;
|
--pico-form-element-spacing-horizontal: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: red;
|
|
||||||
}
|
|
||||||
|
|
@ -1,30 +1,26 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta content="dark light" name="color-scheme">
|
<meta name="color-scheme" content="dark light">
|
||||||
<!-- if development -->
|
<link rel="stylesheet" href="../css/style.scss" />
|
||||||
{% if is_production == false %}
|
<script type="module" src="htmx.org"></script>
|
||||||
<script src="{{ asset('/@vite/client') }}" type="module"></script>
|
|
||||||
{% endif %}
|
|
||||||
<link href="{{ asset('css/style.scss') }}" rel="stylesheet"/>
|
|
||||||
<script src="{{ asset('js/index.ts') }}" type="module"></script>
|
|
||||||
<title>
|
<title>
|
||||||
{% block title %}Axum web service!{% endblock %}
|
{% block title %}Axum web service!{% endblock %}
|
||||||
</title>
|
</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
{% include "partials/header.html" ignore missing %}
|
{% include "partials/header.html" ignore missing %}
|
||||||
</header>
|
</header>
|
||||||
<main>
|
<main>
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
<footer>
|
<footer>
|
||||||
{% include "partials/footer.html" ignore missing %}
|
{% include "partials/footer.html" ignore missing %}
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
<nav>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<strong>Compendium</strong>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a class="secondary" href="#">About</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<details class="dropdown">
|
|
||||||
<summary>
|
|
||||||
<link href="feather-icons/dist/feather-sprite.svg" />
|
|
||||||
|
|
||||||
</summary>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<a href="#">Solid</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#">Liquid</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#">Gas</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#">Plasma</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</details>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
40
package.json
40
package.json
|
|
@ -1,26 +1,18 @@
|
||||||
{
|
{
|
||||||
"name": "compendium",
|
"name": "compendium",
|
||||||
"module": "index.ts",
|
"module": "index.ts",
|
||||||
"version": "0.1.1",
|
"version": "0.1.0",
|
||||||
"scripts": {
|
"devDependencies": {
|
||||||
"dev": "vite",
|
"@alecodes/tmpl-build-and-load": "^0.1.3",
|
||||||
"build": "vite build"
|
"@types/bun": "latest"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"peerDependencies": {
|
||||||
"@alecodes/tmpl-build-and-load": "^0.1.3",
|
"typescript": "^5.0.0"
|
||||||
"@biomejs/biome": "1.9.4",
|
},
|
||||||
"@types/bun": "^1.2.10",
|
"type": "module",
|
||||||
"sass-embedded": "^1.86.3",
|
"dependencies": {
|
||||||
"vite": "^6.3.1"
|
"@mini-strap/core": "^0.1.2",
|
||||||
},
|
"@picocss/pico": "^2.1.1",
|
||||||
"peerDependencies": {
|
"htmx.org": "2.0.4"
|
||||||
"typescript": "^5.7.3"
|
}
|
||||||
},
|
|
||||||
"type": "module",
|
|
||||||
"dependencies": {
|
|
||||||
"@mini-strap/core": "^0.1.2",
|
|
||||||
"@picocss/pico": "^2.1.1",
|
|
||||||
"feather-icons": "^4.29.2",
|
|
||||||
"htmx.org": "2.0.4"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,12 +40,12 @@ impl Default for DBConfig {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DBConfig {
|
impl DBConfig {
|
||||||
pub fn generate_db_string(&self, obfuscate: bool) -> Result<String> {
|
pub fn generate_db_string(&self, ofuscate: bool) -> Result<String> {
|
||||||
if let Some(value) = &self.string {
|
if let Some(value) = &self.string {
|
||||||
return Ok(value.clone());
|
return Ok(value.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
let db_password = if obfuscate {
|
let db_password = if ofuscate {
|
||||||
let mut db_password = self
|
let mut db_password = self
|
||||||
.password
|
.password
|
||||||
.clone()
|
.clone()
|
||||||
|
|
@ -84,7 +84,6 @@ impl DBConfig {
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub db: DBConfig,
|
pub db: DBConfig,
|
||||||
pub addr: SocketAddr,
|
pub addr: SocketAddr,
|
||||||
pub public_dir: PathBuf,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Config {
|
impl Default for Config {
|
||||||
|
|
@ -92,7 +91,6 @@ impl Default for Config {
|
||||||
Config {
|
Config {
|
||||||
db: DBConfig::default(),
|
db: DBConfig::default(),
|
||||||
addr: "0.0.0.0:3000".parse().unwrap(),
|
addr: "0.0.0.0:3000".parse().unwrap(),
|
||||||
public_dir: PathBuf::from("public"),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,6 @@ pub enum Error {
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
Env(#[from] std::env::VarError),
|
Env(#[from] std::env::VarError),
|
||||||
|
|
||||||
#[error(transparent)]
|
|
||||||
JsonParse(#[from] serde_json::Error),
|
|
||||||
|
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
Template(#[from] minijinja::Error),
|
Template(#[from] minijinja::Error),
|
||||||
|
|
||||||
|
|
|
||||||
23
src/lib.rs
23
src/lib.rs
|
|
@ -1,23 +1,34 @@
|
||||||
pub mod static_assets;
|
|
||||||
pub mod config;
|
pub mod config;
|
||||||
mod error;
|
mod error;
|
||||||
pub mod router;
|
pub mod router;
|
||||||
|
|
||||||
use crate::static_assets::Assets;
|
|
||||||
use axum::extract::FromRef;
|
use axum::extract::FromRef;
|
||||||
pub use error::{Error, Result, ResultTemplate};
|
pub use error::{Error, Result, ResultTemplate};
|
||||||
|
use minijinja::{Environment, Template};
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
pub type Tx = axum_sqlx_tx::Tx<sqlx::Postgres>;
|
pub type Tx = axum_sqlx_tx::Tx<sqlx::Postgres>;
|
||||||
pub type TxState = axum_sqlx_tx::State<sqlx::Postgres>;
|
pub type TxState = axum_sqlx_tx::State<sqlx::Postgres>;
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
pub struct Link {
|
||||||
|
pub path: String,
|
||||||
|
pub text: String,
|
||||||
|
pub subpages: Vec<Self>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, FromRef)]
|
#[derive(Clone, FromRef)]
|
||||||
pub struct AppState {
|
pub struct AppState {
|
||||||
pub assets: Assets,
|
tmpl_env: Environment<'static>,
|
||||||
pub tx: TxState,
|
tx: TxState,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AppState {
|
impl AppState {
|
||||||
pub fn new(assets: Assets, tx: TxState) -> Self {
|
pub fn new(tmpl_env: Environment<'static>, tx: TxState) -> Self {
|
||||||
AppState { assets, tx }
|
AppState { tmpl_env, tx }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_template(&self, name: &str) -> Result<Template> {
|
||||||
|
Ok(self.tmpl_env.get_template(name)?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
12
src/main.rs
12
src/main.rs
|
|
@ -3,8 +3,7 @@
|
||||||
|
|
||||||
use axum_htmx::AutoVaryLayer;
|
use axum_htmx::AutoVaryLayer;
|
||||||
use compendium::config::Config;
|
use compendium::config::Config;
|
||||||
use compendium::static_assets::Assets;
|
use compendium::{config, router, AppState, Error, Link, Result, Tx};
|
||||||
use compendium::{config, router, AppState, Error, Result, Tx};
|
|
||||||
use minijinja::{Environment, Value};
|
use minijinja::{Environment, Value};
|
||||||
use sqlx::postgres::PgPoolOptions;
|
use sqlx::postgres::PgPoolOptions;
|
||||||
use sqlx::PgPool;
|
use sqlx::PgPool;
|
||||||
|
|
@ -17,7 +16,6 @@ use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
let config = Config::new("./config.toml".into())?;
|
let config = Config::new("./config.toml".into())?;
|
||||||
let assets = Assets::new(&config)?;
|
|
||||||
|
|
||||||
// Logs
|
// Logs
|
||||||
tracing_subscriber::registry()
|
tracing_subscriber::registry()
|
||||||
|
|
@ -29,6 +27,10 @@ async fn main() -> Result<()> {
|
||||||
.with(tracing_subscriber::fmt::layer())
|
.with(tracing_subscriber::fmt::layer())
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
|
let mut tmpl_env = Environment::new();
|
||||||
|
|
||||||
|
minijinja_embed::load_templates!(&mut tmpl_env);
|
||||||
|
|
||||||
info!("Connecting to database {}", config.db);
|
info!("Connecting to database {}", config.db);
|
||||||
|
|
||||||
let pool = PgPoolOptions::new()
|
let pool = PgPoolOptions::new()
|
||||||
|
|
@ -40,11 +42,11 @@ async fn main() -> Result<()> {
|
||||||
|
|
||||||
let (tx_state, tx_layer) = Tx::setup(pool);
|
let (tx_state, tx_layer) = Tx::setup(pool);
|
||||||
|
|
||||||
let app = router::new(&config)
|
let app = router::new()
|
||||||
.layer(TraceLayer::new_for_http().on_request(()))
|
.layer(TraceLayer::new_for_http().on_request(()))
|
||||||
.layer(tx_layer)
|
.layer(tx_layer)
|
||||||
.layer(AutoVaryLayer)
|
.layer(AutoVaryLayer)
|
||||||
.with_state(AppState::new(assets, tx_state));
|
.with_state(AppState::new(tmpl_env, tx_state));
|
||||||
|
|
||||||
// Add hot reload only on dev mode
|
// Add hot reload only on dev mode
|
||||||
#[cfg(debug_assertions)]
|
#[cfg(debug_assertions)]
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
use crate::config::Config;
|
|
||||||
use crate::{AppState, ResultTemplate, Tx};
|
|
||||||
use axum::{
|
use axum::{
|
||||||
extract::State
|
extract::{Path, State},
|
||||||
,
|
http::{header, HeaderMap, HeaderValue},
|
||||||
|
response::Html,
|
||||||
routing::get,
|
routing::get,
|
||||||
Router,
|
Router,
|
||||||
};
|
};
|
||||||
|
|
@ -11,67 +10,61 @@ use chrono::Utc;
|
||||||
use minijinja::context;
|
use minijinja::context;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use sqlx::prelude::FromRow;
|
use sqlx::prelude::FromRow;
|
||||||
use tower_http::services::ServeDir;
|
|
||||||
|
|
||||||
pub fn new(config: &Config) -> Router<AppState> {
|
use crate::{AppState, Result, ResultTemplate, Tx};
|
||||||
let router = Router::new()
|
|
||||||
.route("/", get(handler_home))
|
|
||||||
.nest("/public", load_asset_router(config));
|
|
||||||
|
|
||||||
router
|
pub fn new() -> Router<AppState> {
|
||||||
|
Router::new()
|
||||||
|
.route("/", get(handler_home))
|
||||||
|
.route("/assets/{*asset}", get(handle_assets))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "embed")]
|
async fn handle_assets(
|
||||||
fn load_asset_router(config: &Config) -> Router<AppState> {
|
State(state): State<AppState>,
|
||||||
Router::new()
|
Path(asset): Path<String>,
|
||||||
.fallback_service(
|
) -> Result<(HeaderMap, String)> {
|
||||||
ServeDir::new(&config.public_dir),
|
let mut headers = HeaderMap::new();
|
||||||
)
|
|
||||||
.nest_service(
|
|
||||||
"/assets",
|
|
||||||
ServeDir::new(concat!(env!("OUT_DIR"), "/assets")),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = "embed"))]
|
let mime = mime_guess::from_path(&asset).first_raw();
|
||||||
fn load_asset_router(config: &Config) -> Router<AppState> {
|
|
||||||
Router::new()
|
if let Some(mime) = mime {
|
||||||
.fallback_service(
|
headers.insert(header::CONTENT_TYPE, HeaderValue::from_static(mime));
|
||||||
ServeDir::new(&config.public_dir),
|
}
|
||||||
)
|
|
||||||
.nest_service(
|
let template = state.tmpl_env.get_template(&format!("assets/{}", asset))?;
|
||||||
"/assets",
|
|
||||||
ServeDir::new(&config.public_dir.join("assets")),
|
Ok((headers, template.render(context!())?))
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(FromRow, Debug, Serialize)]
|
#[derive(FromRow, Debug, Serialize)]
|
||||||
struct ExampleRow {
|
struct ExampleRow {
|
||||||
pub database: String,
|
pub database: String,
|
||||||
pub version: String,
|
pub version: String,
|
||||||
pub current_database: String,
|
pub current_database: String,
|
||||||
pub current_user: String,
|
pub current_user: String,
|
||||||
pub current_timestamp: chrono::DateTime<Utc>,
|
pub current_timestamp: chrono::DateTime<Utc>,
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn handler_home(
|
async fn handler_home(
|
||||||
State(state): State<AppState>,
|
State(state): State<AppState>,
|
||||||
HxRequest(hx_request): HxRequest,
|
HxRequest(hx_request): HxRequest,
|
||||||
mut tx: Tx,
|
mut tx: Tx,
|
||||||
) -> ResultTemplate {
|
) -> ResultTemplate {
|
||||||
let rows = sqlx::query_as::<_, ExampleRow>("select 'Postgres' as database, setting as version, current_database(), current_user, current_timestamp from pg_settings where name = 'server_version'")
|
let template = state.tmpl_env.get_template("index.html")?;
|
||||||
.fetch_all(&mut tx)
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let content = if hx_request {
|
let rows = sqlx::query_as::<_, ExampleRow>("select 'Postgres' as database, setting as version, current_database(), current_user, current_timestamp from pg_settings where name = 'server_version'")
|
||||||
state
|
.fetch_all(&mut tx)
|
||||||
.assets
|
.await?;
|
||||||
.render_template_block("index.html", "htmx", context!(rows => rows))?
|
|
||||||
} else {
|
|
||||||
state
|
|
||||||
.assets
|
|
||||||
.render_template("index.html", context!(rows => rows))?
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(content)
|
println!("{:?}", rows);
|
||||||
|
|
||||||
|
let content = if hx_request {
|
||||||
|
template
|
||||||
|
.eval_to_state(context!(rows => rows))?
|
||||||
|
.render_block("htmx")?
|
||||||
|
} else {
|
||||||
|
template.render(context!(rows => rows))?
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(Html(content))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,121 +0,0 @@
|
||||||
mod template_functions;
|
|
||||||
|
|
||||||
use crate::config::Config;
|
|
||||||
use crate::static_assets::template_functions::load_functions;
|
|
||||||
use crate::{Result, ResultTemplate};
|
|
||||||
use axum::response::Html;
|
|
||||||
use minijinja::{path_loader, Environment};
|
|
||||||
use minijinja_autoreload::AutoReloader;
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
|
||||||
#[serde(rename_all = "camelCase")]
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct ViteAsset {
|
|
||||||
pub file: String,
|
|
||||||
pub src: String,
|
|
||||||
pub is_entry: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type ViteManifest = HashMap<String, ViteAsset>;
|
|
||||||
|
|
||||||
pub struct Assets {
|
|
||||||
templates: Environment<'static>,
|
|
||||||
manifest: ViteManifest,
|
|
||||||
_reloader: Option<AutoReloader>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Clone for Assets {
|
|
||||||
fn clone(&self) -> Self {
|
|
||||||
Self {
|
|
||||||
templates: self.templates.clone(),
|
|
||||||
manifest: self.manifest.clone(),
|
|
||||||
_reloader: None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Assets {
|
|
||||||
pub fn new(config: &Config) -> Result<Self> {
|
|
||||||
let (manifest, manifest_str) = Self::load_vite_manifest(config)?;
|
|
||||||
|
|
||||||
let mut templates = Environment::new();
|
|
||||||
templates.add_global("vite_manifest", manifest_str);
|
|
||||||
|
|
||||||
load_functions(&mut templates);
|
|
||||||
templates.set_loader(path_loader("frontend/templates"));
|
|
||||||
let mut _reloader = None;
|
|
||||||
|
|
||||||
// Load in dev mode
|
|
||||||
#[cfg(debug_assertions)]
|
|
||||||
{
|
|
||||||
_reloader = Some(AutoReloader::new(|notifier| {
|
|
||||||
let template_path = "frontend/templates";
|
|
||||||
let mut env = Environment::new();
|
|
||||||
load_functions(&mut env);
|
|
||||||
env.set_loader(path_loader(template_path));
|
|
||||||
notifier.watch_path(template_path, true);
|
|
||||||
Ok(env)
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load in prod mode
|
|
||||||
#[cfg(not(debug_assertions))]
|
|
||||||
{
|
|
||||||
minijinja_embed::load_templates!(&mut templates);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(Self {
|
|
||||||
templates,
|
|
||||||
manifest,
|
|
||||||
_reloader,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "embed")]
|
|
||||||
fn load_vite_manifest(_config: &Config) -> Result<(ViteManifest, String)> {
|
|
||||||
let file = include_str!(concat!(env!("OUT_DIR"), "/.vite/manifest.json"));
|
|
||||||
Ok((serde_json::from_str(file)?, file.to_string()))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(feature = "embed"))]
|
|
||||||
fn load_vite_manifest(config: &Config) -> Result<(ViteManifest, String)> {
|
|
||||||
let file = std::fs::read_to_string(config.public_dir.join(".vite/manifest.json"))?;
|
|
||||||
Ok((serde_json::from_str(file.as_str())?, file))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_vite_asset(&self, asset: &str) -> Option<&ViteAsset> {
|
|
||||||
self.manifest.get(asset)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn render_template<S: Serialize>(&self, path: &str, ctx: S) -> ResultTemplate {
|
|
||||||
let env = match &self._reloader {
|
|
||||||
None => &self.templates,
|
|
||||||
Some(reloader) => &reloader.acquire_env()?,
|
|
||||||
};
|
|
||||||
|
|
||||||
let result = env.get_template(path)?.render(ctx)?;
|
|
||||||
|
|
||||||
Ok(Html(result))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn render_template_block<S: Serialize>(
|
|
||||||
&self,
|
|
||||||
path: &str,
|
|
||||||
block: &str,
|
|
||||||
ctx: S,
|
|
||||||
) -> ResultTemplate {
|
|
||||||
let env = match &self._reloader {
|
|
||||||
None => &self.templates,
|
|
||||||
Some(reloader) => &reloader.acquire_env()?,
|
|
||||||
};
|
|
||||||
|
|
||||||
let result = env
|
|
||||||
.get_template(path)?
|
|
||||||
.eval_to_state(ctx)?
|
|
||||||
.render_block(block)?;
|
|
||||||
|
|
||||||
Ok(Html(result))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
use crate::static_assets::ViteManifest;
|
|
||||||
use minijinja::{Environment, Error, ErrorKind, State};
|
|
||||||
use serde_json::from_str;
|
|
||||||
|
|
||||||
|
|
||||||
fn load_asset(state: &State, asset: String) -> Result<String, Error> {
|
|
||||||
let manifest: ViteManifest = from_str(
|
|
||||||
state.lookup("vite_manifest")
|
|
||||||
.ok_or(ErrorKind::EvalBlock)?
|
|
||||||
.as_str()
|
|
||||||
.ok_or(ErrorKind::EvalBlock)?
|
|
||||||
).map_err(|_| ErrorKind::EvalBlock)?;
|
|
||||||
|
|
||||||
let local_asset = manifest.get(asset.as_str());
|
|
||||||
|
|
||||||
Ok(match local_asset {
|
|
||||||
None => asset,
|
|
||||||
Some(asset) => {
|
|
||||||
format!("/public/{}", asset.file.clone())
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) fn load_functions(env: &mut Environment) {
|
|
||||||
env.add_function("asset", load_asset);
|
|
||||||
|
|
||||||
#[cfg(debug_assertions)]
|
|
||||||
{
|
|
||||||
env.add_global("is_production", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(not(debug_assertions))]
|
|
||||||
{
|
|
||||||
env.add_global("is_production", true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
import {defineConfig} from "vite";
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
root: "frontend/assets",
|
|
||||||
publicDir: "frontend/static",
|
|
||||||
base: "/public/assets",
|
|
||||||
plugins: [],
|
|
||||||
server: {
|
|
||||||
port: 3001,
|
|
||||||
origin: 'http://localhost:3000',
|
|
||||||
cors: true,
|
|
||||||
},
|
|
||||||
build: {
|
|
||||||
outDir: "../../public", // outDir is relative to the root config
|
|
||||||
assetsDir: "assets",
|
|
||||||
emptyOutDir: true,
|
|
||||||
manifest: true,
|
|
||||||
rollupOptions: {
|
|
||||||
input: [
|
|
||||||
"frontend/assets/js/index.ts",
|
|
||||||
"frontend/assets/css/style.scss"
|
|
||||||
],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue