generated from alecodes/base-template
Compare commits
No commits in common. "14a4d9b2b3e4d934bcef5235bbba2b6e72bdea40" and "b25719827ff68b98e1f18fd8e9b93cf0ebea9f56" have entirely different histories.
14a4d9b2b3
...
b25719827f
23 changed files with 111 additions and 313 deletions
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
|
||||
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/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>
|
||||
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>
|
||||
18
.justfile
18
.justfile
|
|
@ -3,32 +3,32 @@ set dotenv-load := true
|
|||
bin_name := "compendium"
|
||||
release_mode := "dev"
|
||||
container_registry := "git.alecodes.page/alecodes"
|
||||
container_image_name := container_registry / bin_name
|
||||
container_image_name := container_registry / bin_name
|
||||
|
||||
# Start dev server
|
||||
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:
|
||||
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:
|
||||
cargo test
|
||||
cargo test
|
||||
|
||||
# Publish the project to the container registry
|
||||
publish +TAGS='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)
|
||||
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)
|
||||
|
||||
deploy:
|
||||
|
||||
# Delete build artifacts
|
||||
clean:
|
||||
podman system prune --build
|
||||
cargo clean
|
||||
podman system prune --build
|
||||
cargo clean
|
||||
|
||||
# Bump crate version, this will also publish it
|
||||
bump:
|
||||
cog bump --auto
|
||||
cog bump --auto
|
||||
|
|
|
|||
15
Cargo.lock
generated
15
Cargo.lock
generated
|
|
@ -304,7 +304,6 @@ dependencies = [
|
|||
"figment",
|
||||
"mime_guess",
|
||||
"minijinja",
|
||||
"minijinja-autoreload",
|
||||
"minijinja-embed",
|
||||
"notify",
|
||||
"serde",
|
||||
|
|
@ -1198,25 +1197,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "minijinja"
|
||||
version = "2.9.0"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "98642a6dfca91122779a307b77cd07a4aa951fbe32232aaf5bad9febc66be754"
|
||||
checksum = "cff7b8df5e85e30b87c2b0b3f58ba3a87b68e133738bf512a7713769326dbca9"
|
||||
dependencies = [
|
||||
"memo-map",
|
||||
"self_cell",
|
||||
"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]]
|
||||
name = "minijinja-embed"
|
||||
version = "2.7.0"
|
||||
|
|
|
|||
14
Cargo.toml
14
Cargo.toml
|
|
@ -3,9 +3,6 @@ name = "compendium"
|
|||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[features]
|
||||
bundled = []
|
||||
|
||||
[dependencies]
|
||||
axum = { version = "0.8.1", features = ["macros"] }
|
||||
axum-htmx = { version = "0.7.0", features = ["auto-vary", "serde", "guards"] }
|
||||
|
|
@ -15,15 +12,14 @@ figment = { version = "0.10.19", features = ["env", "toml"] }
|
|||
mime_guess = "2.0.5"
|
||||
minijinja = { version = "2.7.0", features = ["loader"] }
|
||||
minijinja-embed = "2.7.0"
|
||||
minijinja-autoreload = "2.9.0"
|
||||
notify = "8.0.0"
|
||||
serde = { version = "1.0.217", features = ["derive"] }
|
||||
sqlx = { version = "0.8.3", features = [
|
||||
"chrono",
|
||||
"derive",
|
||||
"json",
|
||||
"postgres",
|
||||
"runtime-tokio",
|
||||
"chrono",
|
||||
"derive",
|
||||
"json",
|
||||
"postgres",
|
||||
"runtime-tokio",
|
||||
] }
|
||||
thiserror = "2.0.11"
|
||||
tokio = { version = "1.43.0", features = ["macros", "rt-multi-thread"] }
|
||||
|
|
|
|||
37
build.rs
37
build.rs
|
|
@ -1,8 +1,33 @@
|
|||
fn main() {
|
||||
// we only need to bundle the templates with the
|
||||
// feature is enabled.
|
||||
#[cfg(feature = "bundled")]
|
||||
{
|
||||
minijinja_embed::embed_templates!("src/templates");
|
||||
use std::io::Write;
|
||||
use std::process::Command;
|
||||
use std::{env, io};
|
||||
|
||||
fn cmd(cmd: &mut Command) {
|
||||
let output = cmd.output().unwrap();
|
||||
|
||||
let _ = io::stdout().write_all(&output.stdout);
|
||||
if !output.status.success() {
|
||||
let _ = io::stderr().write_all(&output.stderr);
|
||||
panic!("\nFailed to run command\n");
|
||||
}
|
||||
}
|
||||
|
||||
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");
|
||||
}
|
||||
|
|
|
|||
82
bun.lock
82
bun.lock
|
|
@ -11,9 +11,7 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"@alecodes/tmpl-build-and-load": "^0.1.3",
|
||||
"@biomejs/biome": "1.9.4",
|
||||
"@types/bun": "^1.2.10",
|
||||
"sass-embedded": "^1.86.3",
|
||||
"vite": "^6.3.1",
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
|
@ -26,26 +24,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=="],
|
||||
|
||||
"@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=="],
|
||||
|
|
@ -176,16 +154,12 @@
|
|||
|
||||
"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.10", "", { "dependencies": { "@types/node": "*" } }, "sha512-b5ITZMnVdf3m1gMvJHG+gIfeJHiQPJak0f7925Hxu6ZN5VKA8AGy4GZ4lM+Xkn6jtWxg5S3ldWvfmXdvnkp3GQ=="],
|
||||
|
||||
"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=="],
|
||||
|
|
@ -200,8 +174,6 @@
|
|||
|
||||
"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=="],
|
||||
|
||||
"immutable": ["immutable@5.0.3", "", {}, "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw=="],
|
||||
|
|
@ -228,72 +200,18 @@
|
|||
|
||||
"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-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=="],
|
||||
|
||||
"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=="],
|
||||
|
||||
"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=="],
|
||||
|
||||
"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=="],
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
@import "style.scss";
|
||||
|
|
@ -1,5 +1,3 @@
|
|||
/* Required for Vite to consider this a css file if it's empty */
|
||||
|
||||
@use "@mini-strap/core";
|
||||
|
||||
@use "@picocss/pico/scss/pico.scss" with (
|
||||
|
|
@ -11,7 +9,3 @@
|
|||
--pico-form-element-spacing-vertical: 0.25rem;
|
||||
--pico-form-element-spacing-horizontal: 0.5rem;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: red;
|
||||
}
|
||||
|
|
@ -1,29 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||
<meta content="dark light" name="color-scheme">
|
||||
<!-- if development -->
|
||||
<script src="http://localhost:21012/@vite/client" type="module"></script>
|
||||
<link href="http://localhost:21012/frontend/assets/css/style.scss" rel="stylesheet"/>
|
||||
<script src="/assets/js/index.ts" type="module"></script>
|
||||
<script src="htmx.org" type="module"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="color-scheme" content="dark light">
|
||||
<link rel="stylesheet" href="../css/style.scss" />
|
||||
<script type="module" src="../js/index.ts"></script>
|
||||
<script type="module" src="htmx.org"></script>
|
||||
<title>
|
||||
{% block title %}Axum web service!{% endblock %}
|
||||
{% block title %}Axum web service!{% endblock %}
|
||||
</title>
|
||||
</head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
{% include "partials/header.html" ignore missing %}
|
||||
</header>
|
||||
<main>
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
<footer>
|
||||
{% include "partials/footer.html" ignore missing %}
|
||||
</footer>
|
||||
</body>
|
||||
<body>
|
||||
<header>
|
||||
{% include "partials/header.html" ignore missing %}
|
||||
</header>
|
||||
<main>
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
<footer>
|
||||
{% include "partials/footer.html" ignore missing %}
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -4,9 +4,7 @@
|
|||
"version": "0.1.0",
|
||||
"devDependencies": {
|
||||
"@alecodes/tmpl-build-and-load": "^0.1.3",
|
||||
"@biomejs/biome": "1.9.4",
|
||||
"@types/bun": "^1.2.10",
|
||||
"sass-embedded": "^1.86.3",
|
||||
"vite": "^6.3.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
|
|
|||
|
|
@ -40,12 +40,12 @@ impl Default for 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 {
|
||||
return Ok(value.clone());
|
||||
}
|
||||
|
||||
let db_password = if obfuscate {
|
||||
let db_password = if ofuscate {
|
||||
let mut db_password = self
|
||||
.password
|
||||
.clone()
|
||||
|
|
|
|||
27
src/lib.rs
27
src/lib.rs
|
|
@ -1,23 +1,38 @@
|
|||
pub mod static_assets;
|
||||
pub mod config;
|
||||
mod error;
|
||||
pub mod router;
|
||||
|
||||
use crate::static_assets::Assets;
|
||||
use axum::extract::FromRef;
|
||||
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 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(vite_rs::Embed)]
|
||||
#[root = "."]
|
||||
pub struct Assets;
|
||||
|
||||
#[derive(Clone, FromRef)]
|
||||
pub struct AppState {
|
||||
pub assets: Assets,
|
||||
pub tx: TxState,
|
||||
tmpl_env: Environment<'static>,
|
||||
tx: TxState,
|
||||
}
|
||||
|
||||
impl AppState {
|
||||
pub fn new(assets: Assets, tx: TxState) -> Self {
|
||||
AppState { assets, tx }
|
||||
pub fn new(tmpl_env: Environment<'static>, tx: TxState) -> Self {
|
||||
AppState { tmpl_env, tx }
|
||||
}
|
||||
|
||||
pub fn get_template(&self, name: &str) -> Result<Template> {
|
||||
Ok(self.tmpl_env.get_template(name)?)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
13
src/main.rs
13
src/main.rs
|
|
@ -3,8 +3,7 @@
|
|||
|
||||
use axum_htmx::AutoVaryLayer;
|
||||
use compendium::config::Config;
|
||||
use compendium::static_assets::Assets;
|
||||
use compendium::{config, router, AppState, Error, Result, Tx};
|
||||
use compendium::{config, router, AppState, Assets, Error, Link, Result, Tx};
|
||||
use minijinja::{Environment, Value};
|
||||
use sqlx::postgres::PgPoolOptions;
|
||||
use sqlx::PgPool;
|
||||
|
|
@ -16,8 +15,10 @@ use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
|||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
#[cfg(debug_assertions)]
|
||||
let _guard = Assets::start_dev_server(true);
|
||||
|
||||
let config = Config::new("./config.toml".into())?;
|
||||
let assets = Assets::new();
|
||||
|
||||
// Logs
|
||||
tracing_subscriber::registry()
|
||||
|
|
@ -29,6 +30,10 @@ async fn main() -> Result<()> {
|
|||
.with(tracing_subscriber::fmt::layer())
|
||||
.init();
|
||||
|
||||
let mut tmpl_env = Environment::new();
|
||||
|
||||
minijinja_embed::load_templates!(&mut tmpl_env);
|
||||
|
||||
info!("Connecting to database {}", config.db);
|
||||
|
||||
let pool = PgPoolOptions::new()
|
||||
|
|
@ -44,7 +49,7 @@ async fn main() -> Result<()> {
|
|||
.layer(TraceLayer::new_for_http().on_request(()))
|
||||
.layer(tx_layer)
|
||||
.layer(AutoVaryLayer)
|
||||
.with_state(AppState::new(assets, tx_state));
|
||||
.with_state(AppState::new(tmpl_env, tx_state));
|
||||
|
||||
// Add hot reload only on dev mode
|
||||
#[cfg(debug_assertions)]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
use axum::http::StatusCode;
|
||||
use axum::{
|
||||
extract::{Path, State},
|
||||
http::{header, HeaderMap, HeaderValue},
|
||||
|
|
@ -13,7 +12,7 @@ use serde::Serialize;
|
|||
use sqlx::prelude::FromRow;
|
||||
use vite_rs::ViteFile;
|
||||
|
||||
use crate::{AppState, Error, Result, ResultTemplate, Tx};
|
||||
use crate::{AppState, Assets, Result, ResultTemplate, Tx};
|
||||
|
||||
pub fn new() -> Router<AppState> {
|
||||
Router::new()
|
||||
|
|
@ -25,12 +24,12 @@ async fn handle_assets(
|
|||
State(state): State<AppState>,
|
||||
Path(asset_path): Path<String>,
|
||||
) -> Result<(HeaderMap, String)> {
|
||||
let full_path = format!("frontend/assets/{}", asset_path);
|
||||
let asset: ViteFile = state.assets.get_asset(&full_path).ok_or(Error::HTTP(StatusCode::NOT_FOUND))?;
|
||||
let asset: ViteFile = Assets::get(asset_path.as_str()).unwrap();
|
||||
let mut headers = HeaderMap::new();
|
||||
headers.insert(header::CONTENT_TYPE, HeaderValue::from_str(&asset.content_type).unwrap());
|
||||
|
||||
Ok((headers, String::from_utf8(asset.bytes.to_vec()).unwrap()))
|
||||
headers.insert(header::CONTENT_TYPE, HeaderValue::from_str(asset.content_type.as_str()).unwrap());
|
||||
|
||||
Ok((headers, String::from_utf8(asset.bytes).unwrap()))
|
||||
}
|
||||
|
||||
#[derive(FromRow, Debug, Serialize)]
|
||||
|
|
@ -47,7 +46,7 @@ async fn handler_home(
|
|||
HxRequest(hx_request): HxRequest,
|
||||
mut tx: Tx,
|
||||
) -> ResultTemplate {
|
||||
let template = state.assets.get_template("index.html").ok_or(Error::HTTP(StatusCode::NOT_FOUND))?;
|
||||
let template = state.tmpl_env.get_template("index.html")?;
|
||||
|
||||
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'")
|
||||
.fetch_all(&mut tx)
|
||||
|
|
|
|||
|
|
@ -1,75 +0,0 @@
|
|||
use minijinja::{path_loader, Environment, Template};
|
||||
use minijinja_autoreload::AutoReloader;
|
||||
use vite_rs::{ViteFile, ViteProcess};
|
||||
|
||||
#[derive(vite_rs::Embed)]
|
||||
#[root = "."]
|
||||
struct Static;
|
||||
|
||||
pub struct Assets {
|
||||
templates: Environment<'static>,
|
||||
_guard: Option<ViteProcess>,
|
||||
_reloader: Option<AutoReloader>,
|
||||
}
|
||||
|
||||
impl Clone for Assets {
|
||||
fn clone(&self) -> Self {
|
||||
Self {
|
||||
templates: self.templates.clone(),
|
||||
_guard: None,
|
||||
_reloader: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Assets {
|
||||
pub fn new() -> Self {
|
||||
#[allow(unused_mut)] let mut templates = Environment::new();
|
||||
let mut _guard = None;
|
||||
let mut _reloader = None;
|
||||
|
||||
// Load in dev mode
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
// templates.set_loader(minijinja::path_loader("frontend/templates"));
|
||||
_guard = Static::start_dev_server(true);
|
||||
_reloader = Some(AutoReloader::new(|notifier| {
|
||||
let template_path = "path/to/templates";
|
||||
let mut env = Environment::new();
|
||||
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 env);
|
||||
}
|
||||
|
||||
|
||||
Self {
|
||||
templates,
|
||||
_guard,
|
||||
_reloader,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_asset(&self, path: &str) -> Option<ViteFile> {
|
||||
let full_path = format!("frontend/assets/{}", path);
|
||||
Static::get(full_path.as_str())
|
||||
}
|
||||
|
||||
pub fn get_template(&self, path: &str) -> Option<Template> {
|
||||
match &self._reloader {
|
||||
None => {
|
||||
self.templates.get_template(path).ok()
|
||||
}
|
||||
Some(reloader) => {
|
||||
reloader.acquire_env().unwrap().get_template(path).ok()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,13 +1,10 @@
|
|||
import {defineConfig} from "vite";
|
||||
import { defineConfig } from "vite";
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [],
|
||||
build: {
|
||||
rollupOptions: {
|
||||
input: [
|
||||
"frontend/assets/js/index.ts",
|
||||
"frontend/assets/css/style.scss"
|
||||
],
|
||||
},
|
||||
}
|
||||
plugins: [],
|
||||
build: {
|
||||
rollupOptions: {
|
||||
input: ["frontend/js/index.ts"],
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue