From 8f965b3d06f7d8484e799f46e00b5e380807216c Mon Sep 17 00:00:00 2001 From: Tyler Hallada Date: Mon, 10 Feb 2025 00:51:04 -0500 Subject: [PATCH] WIP frontend isn't completely broken now Still more work left with integrating apalis and need to fully update it. These changes are mostly for fixing the frontend I broke by eagerly updating everything. --- Cargo.toml | 23 ++++++++++++----------- frontend/bun.lockb | Bin 181424 -> 193400 bytes frontend/js/index.ts | 20 +++++++++++++------- frontend/package.json | 26 +++++++++++++------------- frontend/tailwind.config.js | 4 ++-- justfile | 18 +++++++++++++----- src/actors/importer.rs | 2 +- src/bin/web.rs | 4 ++-- tailwind.config.js | 2 -- 9 files changed, 56 insertions(+), 43 deletions(-) delete mode 100644 tailwind.config.js diff --git a/Cargo.toml b/Cargo.toml index e44ff5e..8b2fd67 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,21 +16,21 @@ ammonia = "4" ansi-to-html = "0.2" anyhow = "1" # apalis v0.6 fixes this issue: https://github.com/geofmureithi/apalis/issues/351 -apalis = { version = "0.6.0-rc.7", features = ["retry"] } -apalis-cron = "0.6.0-rc.7" -apalis-redis = "0.6.0-rc.7" +apalis = { version = "0.6.0-rc.8", features = ["retry"] } +apalis-cron = "0.6.0-rc.8" +apalis-redis = "0.6.0-rc.8" async-trait = "0.1" axum = { version = "0.7", features = ["form", "multipart", "query"] } axum-client-ip = "0.6" axum-extra = { version = "0.9", features = ["typed-header"] } -axum-login = "0.15" +axum-login = "0.16" base64 = "0.22" bytes = "1.4" # TODO: replace chrono with time chrono = { version = "0.4", features = ["serde"] } clap = { version = "4.4", features = ["derive", "env"] } dotenvy = "0.15" -feed-rs = "1.3" +feed-rs = "2.1" fred = "9" futures = "0.3" headers = "0.4" @@ -41,6 +41,7 @@ lettre = { version = "0.11", features = ["builder"] } maud = { git = "https://github.com/vidhanio/maud", branch = "patch-1", features = [ "axum", ] } +# upgrading this to > 6 causes infinite reloads with tower-livereload notify = "6" once_cell = "1.18" opml = "1.1" @@ -59,21 +60,21 @@ sqlx = { version = "0.7", features = [ "uuid", "ipnetwork", ] } -thiserror = "1" +thiserror = "2" time = "0.3" tokio = { version = "1", features = ["full"] } tokio-stream = { version = "0.1", features = ["sync"] } -tower = "0.4" +tower = { version = "0.5", features = ["retry"] } tower-livereload = "0.9" -tower-http = { version = "0.5", features = ["trace", "fs"] } -tower-sessions = { version = "0.12", features = ["signed"] } -tower-sessions-redis-store = "0.12" +tower-http = { version = "0.6", features = ["trace", "fs"] } +tower-sessions = { version = "0.13", features = ["signed"] } +tower-sessions-redis-store = "0.14" tracing = { version = "0.1", features = ["valuable", "attributes"] } tracing-appender = "0.2" tracing-subscriber = { version = "0.3", features = ["env-filter"] } uuid = { version = "1.4", features = ["serde"] } url = "2.4" -validator = { version = "0.18", features = ["derive"] } +validator = { version = "0.19", features = ["derive"] } [profile.dev.package.sqlx-macros] opt-level = 3 diff --git a/frontend/bun.lockb b/frontend/bun.lockb index 1524216010c890be5487170f40f2f7e005eb452f..1a588d8b77c5ddaef1b6de7e75a6d3217fd51006 100755 GIT binary patch delta 51014 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 z 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 A?f?J) delta 44329 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 diff --git a/frontend/js/index.ts b/frontend/js/index.ts index 9bf2960..ec47c46 100644 --- a/frontend/js/index.ts +++ b/frontend/js/index.ts @@ -1,10 +1,5 @@ import htmx from 'htmx.org'; -// import assets so they get named with a content hash that busts caches -// import '../css/styles.css'; - -import './localTimeController'; - declare global { interface Window { htmx: typeof htmx; @@ -13,5 +8,16 @@ declare global { window.htmx = htmx; -// eslint-disable-next-line import/first -import 'htmx.org/dist/ext/sse'; +// Wait for htmx to be fully initialized before loading extensions +document.addEventListener( + 'htmx:load', + () => { + import('htmx.org/dist/ext/sse'); + }, + { once: true } +); + +// import assets so they get named with a content hash that busts caches +// import '../css/styles.css'; + +import './localTimeController'; diff --git a/frontend/package.json b/frontend/package.json index f383784..25acf33 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,21 +2,21 @@ "name": "crawlnicle-frontend", "module": "js/index.ts", "devDependencies": { - "@tailwindcss/forms": "^0.5.7", - "@tailwindcss/typography": "^0.5.13", - "@typescript-eslint/eslint-plugin": "^7.8.0", - "@typescript-eslint/parser": "^7.8.0", - "bun-types": "^1.1.8", - "eslint": "^9.2.0", + "@tailwindcss/forms": "^0.5.10", + "@tailwindcss/typography": "^0.5.16", + "@typescript-eslint/eslint-plugin": "^7.18.0", + "@typescript-eslint/parser": "^7.18.0", + "bun-types": "^1.2.2", + "eslint": "^9.20.0", "eslint-config-prettier": "^9.1.0", "eslint-config-standard-with-typescript": "latest", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-n": "^17.6.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-promise": "^6.1.1", - "prettier": "^3.2.5", - "tailwindcss": "^3.4.3", - "typescript": "^5.4.5" + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-n": "^17.15.1", + "eslint-plugin-prettier": "^5.2.3", + "eslint-plugin-promise": "^6.6.0", + "prettier": "^3.4.2", + "tailwindcss": "^3.4.17", + "typescript": "^5.7.3" }, "peerDependencies": { "typescript": "^5.0.0" diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index c5c44a6..4b1fe61 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -1,8 +1,8 @@ -const plugin = require('tailwindcss/plugin'); +import plugin from 'tailwindcss/plugin'; /** @type {import('tailwindcss').Config} */ export default { - content: ['./src/**/*.rs'], + content: ['../src/**/*.rs'], theme: { extend: {}, }, diff --git a/justfile b/justfile index 37cc30e..c54b42e 100755 --- a/justfile +++ b/justfile @@ -7,14 +7,22 @@ install-frontend: clean-frontend: rm -rf ./static/js/* ./static/css/* ./static/img/* -build-frontend: clean-frontend - bunx tailwindcss -i frontend/css/styles.css -o static/css/styles.css --minify +[working-directory: 'frontend'] +build-css: + bunx tailwindcss -i css/styles.css -o ../static/css/styles.css --minify + +[working-directory: 'frontend'] +build-dev-css: + bunx tailwindcss -i css/styles.css -o ../static/css/styles.css + +build-frontend: clean-frontend build-css bun build frontend/js/index.ts \ --outdir ./static \ --root ./frontend \ --entry-naming [dir]/[name]-[hash].[ext] \ --chunk-naming [dir]/[name]-[hash].[ext] \ --asset-naming [dir]/[name]-[hash].[ext] \ + --sourcemap=linked \ --minify mkdir -p static/img cp frontend/img/* static/img/ @@ -22,14 +30,14 @@ build-frontend: clean-frontend touch ./static/css/manifest.txt # create empty manifest to be overwritten by build.rs touch .frontend-built # trigger build.rs to run -build-dev-frontend: clean-frontend - bunx tailwindcss -i frontend/css/styles.css -o static/css/styles.css +build-dev-frontend: clean-frontend build-dev-css bun build frontend/js/index.ts \ --outdir ./static \ --root ./frontend \ --entry-naming [dir]/[name]-[hash].[ext] \ --chunk-naming [dir]/[name]-[hash].[ext] \ - --asset-naming [dir]/[name]-[hash].[ext] + --asset-naming [dir]/[name]-[hash].[ext] \ + --sourcemap=linked mkdir -p static/img cp frontend/img/* static/img/ touch ./static/js/manifest.txt # create empty manifest needed so binary compiles diff --git a/src/actors/importer.rs b/src/actors/importer.rs index 15dd01f..734e79a 100644 --- a/src/actors/importer.rs +++ b/src/actors/importer.rs @@ -11,7 +11,7 @@ use uuid::Uuid; use crate::actors::crawl_scheduler::{CrawlSchedulerHandle, CrawlSchedulerHandleMessage}; use crate::error::Error; -use crate::models::feed::{Feed, CreateFeed}; +use crate::models::feed::{CreateFeed, Feed}; use crate::state::Imports; use crate::uuid::Base62Uuid; diff --git a/src/bin/web.rs b/src/bin/web.rs index 489cafa..4989934 100644 --- a/src/bin/web.rs +++ b/src/bin/web.rs @@ -19,7 +19,6 @@ use dotenvy::dotenv; use fred::prelude::*; use lettre::transport::smtp::authentication::Credentials; use lettre::SmtpTransport; -use notify::Watcher; use reqwest::Client; use sqlx::postgres::PgPoolOptions; use time::Duration; @@ -27,7 +26,6 @@ use tokio::sync::watch::channel; use tokio::sync::Mutex; use tower::ServiceBuilder; use tower_http::{services::ServeDir, trace::TraceLayer}; -use tower_livereload::LiveReloadLayer; use tower_sessions::cookie::Key; use tower_sessions_redis_store::{ fred::{ @@ -193,6 +191,8 @@ async fn main() -> Result<()> { .layer(ip_source_extension); if cfg!(debug_assertions) { + use notify::Watcher; + use tower_livereload::LiveReloadLayer; debug!("starting livereload"); let livereload = LiveReloadLayer::new().request_predicate(not_htmx_predicate); let reloader = livereload.reloader(); diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index d22a7e1..0000000 --- a/tailwind.config.js +++ /dev/null @@ -1,2 +0,0 @@ -const config = require('./frontend/tailwind.config.js'); -export default config;