staticky 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +14 -0
  4. data/README.md +378 -18
  5. data/lib/staticky/application.rb +36 -0
  6. data/lib/staticky/builder.rb +4 -2
  7. data/lib/staticky/cli/commands/build.rb +13 -0
  8. data/lib/staticky/cli/commands/generate.rb +67 -0
  9. data/lib/staticky/cli/commands/version.rb +13 -0
  10. data/lib/staticky/cli/commands.rb +13 -0
  11. data/lib/staticky/cli.rb +0 -60
  12. data/lib/staticky/deps.rb +1 -1
  13. data/lib/staticky/filesystem.rb +0 -3
  14. data/lib/staticky/phlex/view_helpers.rb +12 -2
  15. data/lib/staticky/pluggable.rb +35 -0
  16. data/lib/staticky/resource.rb +14 -15
  17. data/lib/staticky/resources/plugins/phlex.rb +42 -0
  18. data/lib/staticky/resources/plugins/prelude.rb +76 -0
  19. data/lib/staticky/resources/plugins.rb +9 -0
  20. data/lib/staticky/router.rb +13 -18
  21. data/lib/staticky/routing/plugins/prelude.rb +97 -0
  22. data/lib/staticky/routing/plugins.rb +9 -0
  23. data/lib/staticky/server.rb +5 -16
  24. data/lib/staticky/server_plugin.rb +37 -0
  25. data/lib/staticky/server_plugins/live_reloading.rb +58 -0
  26. data/lib/staticky/utils.rb +63 -0
  27. data/lib/staticky/version.rb +1 -1
  28. data/lib/staticky.rb +23 -11
  29. data/site_template/.gitignore +14 -0
  30. data/site_template/.ruby-version +1 -1
  31. data/site_template/Gemfile +5 -5
  32. data/site_template/Procfile.dev +2 -2
  33. data/site_template/README.md +27 -7
  34. data/site_template/Rakefile +33 -2
  35. data/site_template/{lib/component.rb → app/views/application_component.rb} +1 -1
  36. data/site_template/app/views/application_layout.rb +4 -0
  37. data/site_template/app/views/application_page.rb +5 -0
  38. data/site_template/app/views/errors/not_found.rb +1 -1
  39. data/site_template/app/views/errors/service_error.rb +1 -1
  40. data/site_template/app/views/layouts/error.rb +4 -6
  41. data/site_template/app/views/layouts/head.rb +5 -3
  42. data/site_template/app/views/layouts/site.rb +10 -23
  43. data/site_template/app/views/pages/home.rb +1 -1
  44. data/site_template/app/views/ui/footer.rb +1 -1
  45. data/site_template/app/views/ui/navbar.rb +1 -1
  46. data/site_template/bin/{lint → setup} +8 -2
  47. data/site_template/config/boot.rb +1 -2
  48. data/site_template/config/puma.rb +11 -0
  49. data/site_template/config/staticky.rb +3 -0
  50. data/site_template/config/vite.json +3 -1
  51. data/site_template/frontend/entrypoints/application.js +0 -1
  52. data/site_template/frontend/tailwindcss/variable_font_plugin.js +1 -1
  53. data/site_template/lib/icon.rb +2 -2
  54. data/site_template/nginx.conf +8 -1
  55. data/site_template/package.json +10 -15
  56. data/site_template/tailwind.config.js +12 -8
  57. data/site_template/vite.config.ts +0 -5
  58. metadata +50 -11
  59. data/lib/staticky/container.rb +0 -26
  60. data/lib/staticky/router/definition.rb +0 -49
  61. data/lib/staticky/view_context.rb +0 -17
  62. data/site_template/frontend/turbo_transitions.js +0 -54
  63. data/site_template/lib/layout.rb +0 -4
  64. data/site_template/lib/page.rb +0 -11
data/lib/staticky.rb CHANGED
@@ -1,17 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "uri"
4
+ require "delegate"
5
+
3
6
  require "phlex"
7
+ require "dry/container"
4
8
  require "dry/system"
5
9
  require "dry/configurable"
6
10
  require "dry/logger"
7
- require "uri"
8
11
  require "tilt"
12
+ require "staticky-files"
9
13
 
10
14
  module Staticky
11
15
  GEM_ROOT = Pathname.new(__dir__).join("..").expand_path
12
16
  end
13
17
 
14
- require_relative "staticky/container"
18
+ require_relative "staticky/pluggable"
19
+ require_relative "staticky/resources/plugins"
20
+ require_relative "staticky/resources/plugins/prelude"
21
+ require_relative "staticky/resources/plugins/phlex"
22
+ require_relative "staticky/routing/plugins"
23
+ require_relative "staticky/routing/plugins/prelude"
24
+ require_relative "staticky/application"
15
25
 
16
26
  module Staticky
17
27
  # DOCS: Module for static site infrastructure such as:
@@ -24,28 +34,30 @@ module Staticky
24
34
 
25
35
  extend Dry::Configurable
26
36
 
27
- setting :env, default: :development
28
- setting :build_path, default: Pathname.new("build")
37
+ setting :env, default: ENV.fetch("RACK_ENV", "development").to_sym
38
+ setting :build_path, default: Pathname(__dir__).join("..", "build")
29
39
  setting :root_path, default: Pathname(__dir__)
30
40
  setting :logger, default: Dry.Logger(:staticky, template: :details)
41
+ setting :live_reloading, default: true
31
42
  setting :server_logger, default: Dry.Logger(
32
43
  :staticky_server,
33
44
  template: :details,
34
45
  formatter: :rack
35
46
  )
36
47
 
37
- def monitor(...) = container.monitor(...)
38
- def server_logger =config.server_logger
48
+ def monitor(...) = application.monitor(...)
49
+ def server_logger = config.server_logger
39
50
  def logger = config.logger
40
51
  def build_path = config.build_path
41
52
  def root_path = config.root_path
42
53
  def resources = router.resources
43
- def router = container[:router]
44
- def builder = container[:builder]
45
- def generator = container[:generator]
46
- def container = Container
54
+ def router = application[:router]
55
+ def builder = application[:builder]
56
+ def generator = application[:generator]
57
+ def files = application[:files]
58
+ def application = Application
47
59
 
48
60
  def env
49
- @env ||= Environment.new container.env
61
+ Environment.new config.env.to_sym
50
62
  end
51
63
  end
@@ -9,3 +9,17 @@ node_modules
9
9
 
10
10
  .bundle
11
11
  /tmp/
12
+
13
+ .yarn/*
14
+ !.yarn/patches
15
+ !.yarn/plugins
16
+ !.yarn/releases
17
+ !.yarn/sdks
18
+ !.yarn/versions
19
+
20
+ # Swap the comments on the following lines if you wish to use zero-installs
21
+ # In that case, don't forget to run `yarn config set enableGlobalCache false`!
22
+ # Documentation here: https://yarnpkg.com/features/caching#zero-installs
23
+
24
+ #!.yarn/cache
25
+ .pnp.*
@@ -1 +1 @@
1
- 3.3.4
1
+ 3.3.5
@@ -3,8 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
  git_source(:github) { |repo| "https://github.com/#{repo}.git" }
5
5
 
6
- ruby_version = Pathname.new(__dir__).join(".ruby-version")
7
- ruby ruby_version.read.strip
6
+ ruby file: ".ruby-version"
8
7
 
9
8
  gem "protos"
10
9
  gem "protos-icon"
@@ -13,7 +12,6 @@ gem "protos-markdown"
13
12
  gem "dry-inflector"
14
13
  gem "front_matter_parser"
15
14
  gem "rack"
16
- gem "rackup"
17
15
  gem "rake"
18
16
  gem "rouge"
19
17
  gem "staticky", github: "nolantait/staticky", branch: "master"
@@ -28,6 +26,8 @@ group :test do
28
26
  end
29
27
 
30
28
  group :development do
31
- gem "rerun"
32
- gem "rubocop-inhouse", require: false
29
+ gem "filewatcher", require: false
30
+ gem "puma"
31
+ gem "rubocop"
32
+ gem "rubocop-inhouse"
33
33
  end
@@ -1,3 +1,3 @@
1
- server: bin/bundle exec rackup
2
- builder: rerun --dir app,lib,content --exit --verbose -- bin/rake site:build
1
+ server: bin/bundle exec puma -C config/puma.rb
2
+ builder: bin/rake site:watch
3
3
  vite: bin/vite dev
@@ -9,7 +9,7 @@ assets by default and hooks into the build command defined in your `Rakefile`
9
9
  Your development server runs with `bin/dev`
10
10
 
11
11
  Everything is ruby, there is no html or erb. It outputs a static site to the
12
- `build/` folder by default, but that can be configured.
12
+ `./build` folder by default, but that can be configured.
13
13
 
14
14
  ## Usage
15
15
 
@@ -36,7 +36,7 @@ Your site should not be accessible at http://localhost:9292
36
36
 
37
37
  ## Building
38
38
 
39
- During development `rerun` watches your files and rebuilds the site when they
39
+ During development `filewatcher` watches your files and rebuilds the site when they
40
40
  change by running `bin/rake site:build`. These files are served by a Roda app.
41
41
 
42
42
  In production you simply output the files to a folder and serve them statically
@@ -46,6 +46,26 @@ can be tweaked however you like.
46
46
  Building takes all the definitions inside your `config/routes` and outputs
47
47
  static files to `./build` or wherever you have configured it.
48
48
 
49
+ ## Development and hot reloading
50
+
51
+ By default your site will use `puma` to run a `roda` server that serves the
52
+ files inside your `Staticky.build_path` (`./build` by default).
53
+
54
+ You can access your site at:
55
+
56
+ ```
57
+ http://localhost:3000
58
+ ```
59
+
60
+ You can change these settings inside your `Procfile.dev` which starts the
61
+ processes required for development.
62
+
63
+ When your site triggers a rebuild and you are connected to the page. The vite
64
+ server will trigger a page reload after 500ms.
65
+
66
+ If this is too fast and you find yourself having to refresh the page yourself
67
+ you can tweak this inside your `vite.config.ts`.
68
+
49
69
  ## Views
50
70
 
51
71
  Views are defined in `app/views`. They should be phlex components and you can
@@ -80,12 +100,12 @@ Staticky.router.define do
80
100
  # Write your own custom logic for parsing your markdown
81
101
  Dir["content/**/*.md"].each do |file|
82
102
  parsed = FrontMatterParser::Parser.parse_file(file, loader:)
103
+ basenames = file.gsub("content/", "").gsub(".md", "")
104
+ front_matter = parsed.front_matter.transform_keys(&:to_sym)
83
105
 
84
- match file.gsub("content/", "").gsub(".md", ""),
85
- to: Pages::Post.new(
86
- parsed.content,
87
- front_matter: parsed.front_matter.transform_keys(&:to_sym)
88
- )
106
+ basename.each do |path|
107
+ match path, to: Pages::Post.new(parsed.content, front_matter:)
108
+ end
89
109
  end
90
110
  end
91
111
  ```
@@ -7,12 +7,43 @@ ViteRuby.install_tasks
7
7
  desc "Precompile assets"
8
8
  task :environment do
9
9
  require "./config/boot"
10
+
11
+ Staticky.application.monitor(:builder, methods: %i[call]) do |event|
12
+ Staticky.logger.info "Built site in #{event[:time]}ms"
13
+ end
10
14
  end
11
15
 
12
16
  namespace :site do
13
- desc "Precompile assets"
17
+ desc "Build the site and its assets into the Staticky.build_path (./build)"
14
18
  task build: :environment do
15
- Rake::Task["vite:build"].invoke
19
+ Staticky.logger.info "Building site in #{Staticky.env.name} environment..."
16
20
  Staticky.builder.call
17
21
  end
22
+
23
+ desc "Watch the site and its assets for changes"
24
+ task watch: :environment do
25
+ require "filewatcher"
26
+
27
+ unless Staticky.build_path.join("500.html").exist?
28
+ Rake::Task["site:build"].execute
29
+ end
30
+
31
+ Staticky.logger.info "Watching site in #{Staticky.env.name} environment..."
32
+
33
+ Filewatcher.new(
34
+ [
35
+ "app/**/*.rb",
36
+ "lib/**/*.rb",
37
+ "content/**/*"
38
+ ]
39
+ ).watch do
40
+ Staticky.logger.info "Change detected, rebuilding site..."
41
+ sh("bin/rake site:build") do |ok, res|
42
+ unless ok
43
+ Staticky.logger.error "Error rebuilding site:"
44
+ puts res
45
+ end
46
+ end
47
+ end
48
+ end
18
49
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require "staticky/phlex/view_helpers"
4
4
 
5
- class Component < Protos::Component
5
+ class ApplicationComponent < Protos::Component
6
6
  include ViteHelpers
7
7
 
8
8
  class NullViewContext
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationLayout < ApplicationComponent
4
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationPage < ApplicationComponent
4
+ def around_template(&block) = render Layouts::Page.new(&block)
5
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Errors
4
- class NotFound < Page
4
+ class NotFound < ApplicationPage
5
5
  include Protos::Typography
6
6
 
7
7
  def self.layout = Layouts::Error
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Errors
4
- class ServiceError < Page
4
+ class ServiceError < ApplicationPage
5
5
  include Protos::Typography
6
6
 
7
7
  def self.layout = Layouts::Error
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Layouts
4
- class Error < Layout
5
- def view_template(&block)
6
- render Layouts::Site.new do
7
- div(class: "grid place-items-center h-[--main-scene]") do
8
- section(class: "flex flex-col place-items-center gap-sm", &block)
9
- end
4
+ class Error < Site
5
+ def view_template(&)
6
+ div(class: "grid place-items-center h-[--main-scene]") do
7
+ section(class: "flex flex-col place-items-center gap-sm", &)
10
8
  end
11
9
  end
12
10
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Layouts
4
- class Head < Component
4
+ class Head < ApplicationComponent
5
5
  option :title, default: -> { ::Site.title }, reader: false
6
6
  option :description, default: -> { ::Site.description }, reader: false
7
7
 
@@ -44,10 +44,12 @@ module Layouts
44
44
  meta name: "twitter:site", content: ::Site.twitter
45
45
  meta name: "twitter:creator", content: ::Site.twitter
46
46
 
47
- vite_client_tag unless ENV["RACK_ENV"] == "production"
48
47
  javascript_tag "application"
49
48
 
50
- yield if block_given?
49
+ if Staticky.env.development?
50
+ vite_client_tag
51
+ staticky_live_reload_js if Staticky.config.live_reloading
52
+ end
51
53
  end
52
54
  end
53
55
 
@@ -1,38 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Layouts
4
- class Site < Layout
5
- include Phlex::DeferredRender
6
-
7
- def view_template
4
+ class Site < ApplicationLayout
5
+ def around_template(&)
8
6
  doctype
9
7
  html lang: "en", data: { theme: "onedark" } do
10
- render Layouts::Head.new(&head)
11
-
12
- body do
13
- render UI::Navbar.new(class: css[:navbar])
14
- main(class: css[:main], &content)
15
- render UI::Footer.new(class: css[:footer])
16
- end
8
+ head
9
+ body(&)
17
10
  end
18
11
  end
19
12
 
20
- def with_head(&block)
21
- @head = block
22
- end
23
-
24
- def with_content(&block)
25
- @content = block
13
+ def view_template(&block)
14
+ render UI::Navbar.new(class: css[:navbar])
15
+ main(**attrs, &block)
16
+ render UI::Footer.new(class: css[:footer])
26
17
  end
27
18
 
28
19
  private
29
20
 
30
- def content
31
- @content || proc {}
32
- end
33
-
34
- def head
35
- @head || proc {}
21
+ def head(&block)
22
+ render Head.new(&block)
36
23
  end
37
24
  end
38
25
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pages
4
- class Home < Page
4
+ class Home < ApplicationPage
5
5
  include Protos::Typography
6
6
 
7
7
  def view_template
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UI
4
- class Footer < Component
4
+ class Footer < ApplicationComponent
5
5
  def view_template
6
6
  footer(**attrs) do
7
7
  p(class: "opacity-80 text-sm") do
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UI
4
- class Navbar < Component
4
+ class Navbar < ApplicationComponent
5
5
  def view_template
6
6
  header(**attrs) do
7
7
  a(href: "/", class: "btn btn-ghost") { Site.title }
@@ -13,6 +13,12 @@ FileUtils.chdir APP_ROOT do
13
13
  # This script is idempotent, so that you can run it at any time and get an expectable outcome.
14
14
  # Add necessary setup steps to this file.
15
15
 
16
- puts "== Running rubocop =="
17
- system! "bundle exec rubocop --autocorrect-all --fail-level error"
16
+ puts "== Installing dependencies =="
17
+ system! "gem install bundler --conservative"
18
+ system("bundle check") || system!("bundle install")
19
+
20
+ system! "bundle binstubs --force bundler rubocop rspec-core vite_ruby rake"
21
+
22
+ puts "\n== Installing javascript dependencies =="
23
+ system! "yarn install"
18
24
  end
@@ -5,13 +5,12 @@ ENV["RACK_ENV"] ||= "development"
5
5
  require "bundler"
6
6
  Bundler.require(:default, ENV.fetch("RACK_ENV", nil))
7
7
 
8
- require_relative "staticky"
9
-
10
8
  loader = Zeitwerk::Loader.new
11
9
  loader.inflector.inflect("ui" => "UI")
12
10
  loader.push_dir("lib")
13
11
  loader.push_dir("app/views")
14
12
  loader.setup
15
13
 
14
+ require_relative "staticky"
16
15
  require_relative "site"
17
16
  require_relative "routes"
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Run in single threaded mode
4
+ threads 0, 1
5
+
6
+ # Specifies the `port` that Puma will listen on to receive requests; default is
7
+ # 3000.
8
+ port 3000
9
+
10
+ # Only use a pidfile when requested
11
+ pidfile ENV["PIDFILE"] if ENV["PIDFILE"]
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Staticky.configure do |config|
2
4
  config.build_path = Pathname.new("build")
3
5
  config.root_path = Pathname(__dir__).join("..")
6
+ config.live_reloading = true
4
7
  end
@@ -2,7 +2,9 @@
2
2
  "all": {
3
3
  "publicDir": "build",
4
4
  "sourceCodeDir": "frontend",
5
- "watchAdditionalPaths": []
5
+ "watchAdditionalPaths": [
6
+ "app/**/*.rb"
7
+ ]
6
8
  },
7
9
  "development": {
8
10
  "autoBuild": true,
@@ -5,4 +5,3 @@ import "~/stylesheets/application.css"
5
5
  import "~/stylesheets/syntax.css"
6
6
 
7
7
  import "~/controllers"
8
- import "~/turbo_transitions.js"
@@ -1,7 +1,7 @@
1
1
  // This is a custom plugin for Tailwind CSS to enable font-variation-settings
2
2
  import plugin from "tailwindcss/plugin";
3
3
 
4
- const fontVariationSettings = plugin(function ({ addUtilities }) {
4
+ const fontVariationSettings = plugin(function({ addUtilities }) {
5
5
  addUtilities({
6
6
  ".font-thin": {
7
7
  fontWeight: 100,
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Icon < Component
3
+ class Icon < ApplicationComponent
4
4
  param :name, reader: false
5
- option :variant, reader: false, default: -> {}
5
+ option :variant, reader: false, default: -> { }
6
6
  option :size, default: -> { :md }, reader: false
7
7
 
8
8
  def template
@@ -28,9 +28,16 @@ http {
28
28
  port_in_redirect off;
29
29
  add_header X-Content-Type-Options "nosniff";
30
30
 
31
+ location = / {
32
+ try_files /index.html =404;
33
+ }
34
+
31
35
  location / {
32
- try_files $uri $uri/ =404;
36
+ rewrite ^/(.*)/$ /$1 permanent;
37
+
38
+ try_files $uri $uri.html =404;
33
39
  expires 1h;
40
+ error_page 404 /404.html;
34
41
  }
35
42
 
36
43
  location ~* \.(?:ico|gif|jpe?g|png|svg|webp)$ {
@@ -11,21 +11,16 @@
11
11
  "author": "",
12
12
  "license": "ISC",
13
13
  "dependencies": {
14
- "@fontsource-variable/inter": "^5.0.20",
14
+ "@fontsource-variable/inter": "^5.1.0",
15
15
  "@hotwired/stimulus": "^3.2.2",
16
- "@hotwired/turbo": "^8.0.5",
17
- "@tailwindcss/typography": "^0.5.14",
16
+ "@hotwired/turbo": "^8.0.12",
17
+ "@tailwindcss/typography": "^0.5.15",
18
18
  "autoprefixer": "^10.4.20",
19
- "daisyui": "^4.12.10",
20
- "protos-stimulus": "^0.0.3",
21
- "postcss": "^8.4.41",
22
- "tailwindcss": "^3.4.10",
23
- "vite": "^5.4.0",
24
- "vite-plugin-ruby": "^5.0.0",
25
- "vite-plugin-full-reload": "^1.2.0"
26
- },
27
- "optionalDependencies": {
28
- "@rollup/rollup-linux-arm64-musl": "4.20.0"
29
- },
30
- "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610"
19
+ "daisyui": "^4.12.20",
20
+ "postcss": "^8.4.49",
21
+ "protos-stimulus": "^0.0.4",
22
+ "tailwindcss": "^3.4.16",
23
+ "vite": "^6.0.3",
24
+ "vite-plugin-ruby": "^5.1.1"
25
+ }
31
26
  }
@@ -1,12 +1,15 @@
1
1
  import defaultTheme from "tailwindcss/defaultTheme"
2
+ import daisyui from "daisyui"
3
+ import typography from "@tailwindcss/typography"
4
+ import variableFonts from "./frontend/tailwindcss/variable_font_plugin"
2
5
 
3
6
  // For importing tailwind styles from protos gem
4
- const execSync = require('child_process').execSync;
5
- const output = execSync('bundle show protos', { encoding: 'utf-8' });
6
- const protos_path = output.trim() + '/**/*.rb';
7
+ import { execSync } from "child_process"
8
+ const output = execSync("bundle show protos", { encoding: "utf-8" });
9
+ const protos_path = output.trim() + "/**/*.rb";
7
10
 
8
- /** @type {import('tailwindcss').Config} */
9
- module.exports = {
11
+ /** @type {import("tailwindcss").Config} */
12
+ const config = {
10
13
  content: [
11
14
  "./app/**/*.rb",
12
15
  "./lib/**/*.rb",
@@ -75,9 +78,10 @@ module.exports = {
75
78
  ]
76
79
  },
77
80
  plugins: [
78
- require("daisyui"),
79
- require('@tailwindcss/typography'),
80
- require("./frontend/tailwindcss/variable_font_plugin"),
81
+ daisyui,
82
+ typography,
83
+ variableFonts
81
84
  ],
82
85
  }
83
86
 
87
+ export default config
@@ -1,14 +1,9 @@
1
1
  import { defineConfig } from "vite"
2
2
  import RubyPlugin from "vite-plugin-ruby"
3
- import FullReload from "vite-plugin-full-reload"
4
3
 
5
4
  export default defineConfig({
6
5
  server: { hmr: false },
7
6
  plugins: [
8
7
  RubyPlugin(),
9
- FullReload(
10
- "build/index.html",
11
- { delay: 0 }
12
- ),
13
8
  ],
14
9
  })