├── .gitattributes
├── .gitignore
├── .npmrc
├── .ruby-version
├── Gemfile
├── Gemfile.lock
├── Procfile
├── Procfile.dev
├── README.md
├── Rakefile
├── app
├── assets
│ ├── config
│ │ └── manifest.js
│ ├── images
│ │ └── .keep
│ └── stylesheets
│ │ └── application.css
├── controllers
│ ├── application_controller.rb
│ ├── concerns
│ │ └── .keep
│ └── dashboard_controller.rb
├── frontend
│ ├── components
│ │ └── Layout.jsx
│ ├── entrypoints
│ │ └── application.jsx
│ ├── pages
│ │ └── Dashboard.jsx
│ └── ssr
│ │ └── ssr.jsx
├── helpers
│ └── application_helper.rb
├── models
│ ├── application_record.rb
│ └── concerns
│ │ └── .keep
└── views
│ └── layouts
│ └── application.html.erb
├── bin
├── bundle
├── rails
├── rake
├── setup
└── vite
├── config.ru
├── config
├── application.rb
├── boot.rb
├── credentials.yml.enc
├── database.yml
├── environment.rb
├── environments
│ ├── development.rb
│ ├── production.rb
│ └── test.rb
├── initializers
│ ├── assets.rb
│ ├── content_security_policy.rb
│ ├── filter_parameter_logging.rb
│ ├── inertia.rb
│ ├── inflections.rb
│ └── permissions_policy.rb
├── locales
│ └── en.yml
├── puma.rb
├── routes.rb
└── vite.json
├── db
└── seeds.rb
├── lib
├── assets
│ └── .keep
└── tasks
│ └── .keep
├── log
└── .keep
├── package.json
├── pnpm-lock.yaml
├── public
├── 404.html
├── 422.html
├── 500.html
├── apple-touch-icon-precomposed.png
├── apple-touch-icon.png
├── favicon.ico
├── robots.txt
└── ssr
│ ├── ssr.js
│ └── ssr.js.map
├── test
├── controllers
│ └── .keep
├── fixtures
│ └── files
│ │ └── .keep
├── helpers
│ └── .keep
├── integration
│ └── .keep
├── models
│ └── .keep
└── test_helper.rb
├── tmp
├── .keep
└── pids
│ └── .keep
├── vendor
└── .keep
└── vite.config.ts
/.gitattributes:
--------------------------------------------------------------------------------
1 | # See https://git-scm.com/docs/gitattributes for more about git attribute files.
2 |
3 | # Mark the database schema as having been generated.
4 | db/schema.rb linguist-generated
5 |
6 | # Mark any vendored files as having been vendored.
7 | vendor/* linguist-vendored
8 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2 | #
3 | # If you find yourself ignoring temporary files generated by your text editor
4 | # or operating system, you probably want to add a global ignore instead:
5 | # git config --global core.excludesfile '~/.gitignore_global'
6 |
7 | # Ignore bundler config.
8 | /.bundle
9 |
10 | # Ignore the default SQLite database.
11 | /db/*.sqlite3
12 | /db/*.sqlite3-*
13 |
14 | # Ignore all logfiles and tempfiles.
15 | /log/*
16 | /tmp/*
17 | !/log/.keep
18 | !/tmp/.keep
19 |
20 | # Ignore pidfiles, but keep the directory.
21 | /tmp/pids/*
22 | !/tmp/pids/
23 | !/tmp/pids/.keep
24 |
25 |
26 | /public/assets
27 |
28 | # Ignore master key for decrypting credentials and more.
29 | /config/master.key
30 |
31 | # Vite Ruby
32 | /public/vite*
33 | node_modules
34 | # Vite uses dotenv and suggests to ignore local-only env files. See
35 | # https://vitejs.dev/guide/env-and-mode.html#env-files
36 | *.local
37 |
38 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | strict-peer-dependencies=false
2 |
--------------------------------------------------------------------------------
/.ruby-version:
--------------------------------------------------------------------------------
1 | ruby-3.1.1
2 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 | git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3 |
4 | ruby "3.1.1"
5 |
6 | # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
7 | gem "rails", "~> 7.0.2", ">= 7.0.2.3"
8 |
9 | # The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]
10 | gem "sprockets-rails"
11 |
12 | # Use sqlite3 as the database for Active Record
13 | gem "sqlite3", "~> 1.4"
14 |
15 | # Use the Puma web server [https://github.com/puma/puma]
16 | gem "puma", "~> 5.0"
17 |
18 | # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
19 | gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ]
20 |
21 | gem "vite_rails"
22 |
23 | gem "inertia_rails", git: 'https://github.com/inertiajs/inertia-rails'
24 |
25 | group :development, :test do
26 | # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
27 | gem "debug", platforms: %i[ mri mingw x64_mingw ]
28 | end
29 |
30 | group :development do
31 | # Speed up commands on slow machines / big apps [https://github.com/rails/spring]
32 | # gem "spring"
33 | end
34 |
35 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GIT
2 | remote: https://github.com/inertiajs/inertia-rails
3 | revision: 14ecdfb6e81f04ddd8f5fa964d7d1f2d4bef60fa
4 | specs:
5 | inertia_rails (1.11.1)
6 | rails (>= 5)
7 |
8 | GEM
9 | remote: https://rubygems.org/
10 | specs:
11 | actioncable (7.0.2.3)
12 | actionpack (= 7.0.2.3)
13 | activesupport (= 7.0.2.3)
14 | nio4r (~> 2.0)
15 | websocket-driver (>= 0.6.1)
16 | actionmailbox (7.0.2.3)
17 | actionpack (= 7.0.2.3)
18 | activejob (= 7.0.2.3)
19 | activerecord (= 7.0.2.3)
20 | activestorage (= 7.0.2.3)
21 | activesupport (= 7.0.2.3)
22 | mail (>= 2.7.1)
23 | net-imap
24 | net-pop
25 | net-smtp
26 | actionmailer (7.0.2.3)
27 | actionpack (= 7.0.2.3)
28 | actionview (= 7.0.2.3)
29 | activejob (= 7.0.2.3)
30 | activesupport (= 7.0.2.3)
31 | mail (~> 2.5, >= 2.5.4)
32 | net-imap
33 | net-pop
34 | net-smtp
35 | rails-dom-testing (~> 2.0)
36 | actionpack (7.0.2.3)
37 | actionview (= 7.0.2.3)
38 | activesupport (= 7.0.2.3)
39 | rack (~> 2.0, >= 2.2.0)
40 | rack-test (>= 0.6.3)
41 | rails-dom-testing (~> 2.0)
42 | rails-html-sanitizer (~> 1.0, >= 1.2.0)
43 | actiontext (7.0.2.3)
44 | actionpack (= 7.0.2.3)
45 | activerecord (= 7.0.2.3)
46 | activestorage (= 7.0.2.3)
47 | activesupport (= 7.0.2.3)
48 | globalid (>= 0.6.0)
49 | nokogiri (>= 1.8.5)
50 | actionview (7.0.2.3)
51 | activesupport (= 7.0.2.3)
52 | builder (~> 3.1)
53 | erubi (~> 1.4)
54 | rails-dom-testing (~> 2.0)
55 | rails-html-sanitizer (~> 1.1, >= 1.2.0)
56 | activejob (7.0.2.3)
57 | activesupport (= 7.0.2.3)
58 | globalid (>= 0.3.6)
59 | activemodel (7.0.2.3)
60 | activesupport (= 7.0.2.3)
61 | activerecord (7.0.2.3)
62 | activemodel (= 7.0.2.3)
63 | activesupport (= 7.0.2.3)
64 | activestorage (7.0.2.3)
65 | actionpack (= 7.0.2.3)
66 | activejob (= 7.0.2.3)
67 | activerecord (= 7.0.2.3)
68 | activesupport (= 7.0.2.3)
69 | marcel (~> 1.0)
70 | mini_mime (>= 1.1.0)
71 | activesupport (7.0.2.3)
72 | concurrent-ruby (~> 1.0, >= 1.0.2)
73 | i18n (>= 1.6, < 2)
74 | minitest (>= 5.1)
75 | tzinfo (~> 2.0)
76 | builder (3.2.4)
77 | concurrent-ruby (1.1.10)
78 | crass (1.0.6)
79 | debug (1.5.0)
80 | irb (>= 1.3.6)
81 | reline (>= 0.2.7)
82 | digest (3.1.0)
83 | dry-cli (0.7.0)
84 | erubi (1.10.0)
85 | globalid (1.0.0)
86 | activesupport (>= 5.0)
87 | i18n (1.10.0)
88 | concurrent-ruby (~> 1.0)
89 | io-console (0.5.11)
90 | irb (1.4.1)
91 | reline (>= 0.3.0)
92 | loofah (2.18.0)
93 | crass (~> 1.0.2)
94 | nokogiri (>= 1.5.9)
95 | mail (2.7.1)
96 | mini_mime (>= 0.1.1)
97 | marcel (1.0.2)
98 | method_source (1.0.0)
99 | mini_mime (1.1.2)
100 | minitest (5.16.1)
101 | net-imap (0.2.3)
102 | digest
103 | net-protocol
104 | strscan
105 | net-pop (0.1.1)
106 | digest
107 | net-protocol
108 | timeout
109 | net-protocol (0.1.3)
110 | timeout
111 | net-smtp (0.3.1)
112 | digest
113 | net-protocol
114 | timeout
115 | nio4r (2.5.8)
116 | nokogiri (1.13.6-arm64-darwin)
117 | racc (~> 1.4)
118 | nokogiri (1.13.6-x86_64-darwin)
119 | racc (~> 1.4)
120 | puma (5.6.4)
121 | nio4r (~> 2.0)
122 | racc (1.6.0)
123 | rack (2.2.4)
124 | rack-proxy (0.7.2)
125 | rack
126 | rack-test (2.0.2)
127 | rack (>= 1.3)
128 | rails (7.0.2.3)
129 | actioncable (= 7.0.2.3)
130 | actionmailbox (= 7.0.2.3)
131 | actionmailer (= 7.0.2.3)
132 | actionpack (= 7.0.2.3)
133 | actiontext (= 7.0.2.3)
134 | actionview (= 7.0.2.3)
135 | activejob (= 7.0.2.3)
136 | activemodel (= 7.0.2.3)
137 | activerecord (= 7.0.2.3)
138 | activestorage (= 7.0.2.3)
139 | activesupport (= 7.0.2.3)
140 | bundler (>= 1.15.0)
141 | railties (= 7.0.2.3)
142 | rails-dom-testing (2.0.3)
143 | activesupport (>= 4.2.0)
144 | nokogiri (>= 1.6)
145 | rails-html-sanitizer (1.4.3)
146 | loofah (~> 2.3)
147 | railties (7.0.2.3)
148 | actionpack (= 7.0.2.3)
149 | activesupport (= 7.0.2.3)
150 | method_source
151 | rake (>= 12.2)
152 | thor (~> 1.0)
153 | zeitwerk (~> 2.5)
154 | rake (13.0.6)
155 | reline (0.3.1)
156 | io-console (~> 0.5)
157 | sprockets (4.0.3)
158 | concurrent-ruby (~> 1.0)
159 | rack (> 1, < 3)
160 | sprockets-rails (3.4.2)
161 | actionpack (>= 5.2)
162 | activesupport (>= 5.2)
163 | sprockets (>= 3.0.0)
164 | sqlite3 (1.4.2)
165 | strscan (3.0.1)
166 | thor (1.2.1)
167 | timeout (0.2.0)
168 | tzinfo (2.0.4)
169 | concurrent-ruby (~> 1.0)
170 | vite_rails (3.0.10)
171 | railties (>= 5.1, < 8)
172 | vite_ruby (~> 3.0)
173 | vite_ruby (3.1.6)
174 | dry-cli (~> 0.7.0)
175 | rack-proxy (~> 0.6, >= 0.6.1)
176 | zeitwerk (~> 2.2)
177 | websocket-driver (0.7.5)
178 | websocket-extensions (>= 0.1.0)
179 | websocket-extensions (0.1.5)
180 | zeitwerk (2.6.0)
181 |
182 | PLATFORMS
183 | arm64-darwin-21
184 | x86_64-darwin-21
185 |
186 | DEPENDENCIES
187 | debug
188 | inertia_rails!
189 | puma (~> 5.0)
190 | rails (~> 7.0.2, >= 7.0.2.3)
191 | sprockets-rails
192 | sqlite3 (~> 1.4)
193 | tzinfo-data
194 | vite_rails
195 |
196 | RUBY VERSION
197 | ruby 3.1.1
198 |
199 | BUNDLED WITH
200 | 2.3.7
201 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: bin/vite ssr & bin/rails s
2 |
--------------------------------------------------------------------------------
/Procfile.dev:
--------------------------------------------------------------------------------
1 | vite: bin/vite dev
2 | web: bin/rails s
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Inertia on Rails with SSR enabled
2 |
3 | This is a minimal installation of [Ruby on Rails](https://github.com/rails/rails), [Vite](https://github.com/vitejs/vite), and [InertiaJS](https://github.com/inertiajs/inertia-rails). (It also uses the [Tailwind Play CDN](https://github.com/tailwindlabs/tailwindcss) for some simple styling).
4 | Feel free to fork this and use it for your next spike, mvp, or entire application. If you'd like to take a look around to see how everything is working, I'd recommend checking out the following files:
5 |
6 |
7 | - `app/frontend/pages/Dashboard.jsx`: The React component being rendered by the `/` route
8 | - `app/controllers/dashboard_controller.rb`: The controller that handled rendering the root page
9 | - `app/frontend/components/Layout.jsx`: The React component providing the "magic" layout similar to Rails's application layout
10 | - `app/frontend/entrypoints/application.jsx`: The Vite entrypoint that handles initializing InertiaJS
11 |
12 |
13 |
14 | To run locally:
15 |
16 | ```
17 | bundle install
18 | npm install
19 | foreman -f Procfile.dev
20 | ```
21 |
22 | To create an SSR build:
23 |
24 | ```
25 | bin/vite build --ssr
26 | ```
27 |
28 | To start the SSR node.js server:
29 |
30 | ```
31 | bin/vite ssr
32 | ```
33 |
34 | For an example on how to enable SSR for an existing app, [see this example in PingCRM](https://github.com/ElMassimo/pingcrm-vite/pull/5).
35 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | # Add your own tasks in files placed in lib/tasks ending in .rake,
2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3 |
4 | require_relative "config/application"
5 |
6 | Rails.application.load_tasks
7 |
--------------------------------------------------------------------------------
/app/assets/config/manifest.js:
--------------------------------------------------------------------------------
1 | //= link_tree ../images
2 | //= link_directory ../stylesheets .css
3 |
--------------------------------------------------------------------------------
/app/assets/images/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/app/assets/images/.keep
--------------------------------------------------------------------------------
/app/assets/stylesheets/application.css:
--------------------------------------------------------------------------------
1 | /*
2 | * This is a manifest file that'll be compiled into application.css, which will include all the files
3 | * listed below.
4 | *
5 | * Any CSS (and SCSS, if configured) file within this directory, lib/assets/stylesheets, or any plugin's
6 | * vendor/assets/stylesheets directory can be referenced here using a relative path.
7 | *
8 | * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9 | * compiled file so the styles you add here take precedence over styles defined in any other CSS
10 | * files in this directory. Styles in this file should be added after the last require_* statement.
11 | * It is generally better to create a new file per style scope.
12 | *
13 | *= require_tree .
14 | *= require_self
15 | */
16 |
--------------------------------------------------------------------------------
/app/controllers/application_controller.rb:
--------------------------------------------------------------------------------
1 | class ApplicationController < ActionController::Base
2 | end
3 |
--------------------------------------------------------------------------------
/app/controllers/concerns/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/app/controllers/concerns/.keep
--------------------------------------------------------------------------------
/app/controllers/dashboard_controller.rb:
--------------------------------------------------------------------------------
1 | class DashboardController < ApplicationController
2 | def index
3 | render inertia: 'Dashboard', props: {
4 | name: 'Inertia Rails'
5 | }
6 | end
7 | end
8 |
--------------------------------------------------------------------------------
/app/frontend/components/Layout.jsx:
--------------------------------------------------------------------------------
1 | import { InertiaLink } from "@inertiajs/inertia-react";
2 |
3 | const Layout = ({children}) => (
4 | <>
5 |
6 |
7 |
8 |
9 |
10 |
14 |
15 | Dashboard
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | {children}
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | >
38 | )
39 |
40 |
41 |
42 | export default page => {page} ;
43 |
--------------------------------------------------------------------------------
/app/frontend/entrypoints/application.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import { render } from 'react-dom'
3 | import { createInertiaApp } from '@inertiajs/inertia-react'
4 | import { InertiaProgress } from '@inertiajs/progress';
5 | import axios from 'axios';
6 | import Layout from '../components/Layout';
7 |
8 | const pages = import.meta.glob('../pages/*.jsx')
9 |
10 | document.addEventListener('DOMContentLoaded', () => {
11 | const csrfToken = document.querySelector('meta[name=csrf-token]').content;
12 | axios.defaults.headers.common['X-CSRF-Token'] = csrfToken;
13 |
14 |
15 | InertiaProgress.init();
16 |
17 | createInertiaApp({
18 | resolve: async name => {
19 | const page = (await pages[`../pages/${name}.jsx`]()).default;
20 | page.layout = page.layout || Layout
21 |
22 | return page
23 | },
24 | setup({ el, App, props }) {
25 | render( , el)
26 | },
27 | })
28 | });
29 |
30 |
--------------------------------------------------------------------------------
/app/frontend/pages/Dashboard.jsx:
--------------------------------------------------------------------------------
1 | export default function Dashboard({name}) {
2 | return (
3 | <>
4 | Hello {name}!
5 |
6 |
12 |
13 | It's also running SSR powered by Vite.
14 |
15 |
16 | Feel free to fork this and use it for your next spike, mvp, or entire application. If you'd like to take a look around to see how everything is working,
17 | I'd recommend checking out the following files:
18 |
19 |
20 | app/frontend/pages/Dashboard.jsx : The React component containing what you're reading now!
21 | app/controllers/dashboard_controller.rb : The controller that handled rendering this page
22 | app/frontend/components/Layout.jsx : The React component providing the "magic" layout similar to Rails's application layout
23 | app/frontend/entrypoints/application.jsx : The Vite entrypoint that handles initializing InertiaJS
24 |
25 |
26 | >
27 | )
28 | }
29 |
--------------------------------------------------------------------------------
/app/frontend/ssr/ssr.jsx:
--------------------------------------------------------------------------------
1 | import ReactDOMServer from 'react-dom/server'
2 | import { createInertiaApp } from '@inertiajs/inertia-react'
3 | import cjsCreateServer from '@inertiajs/server'
4 |
5 | const pages = import.meta.globEagerDefault('../pages/*.jsx')
6 |
7 | // Unwrap the CJS module in @inertiajs/server.
8 | const createServer = typeof cjsCreateServer === 'function' ? cjsCreateServer : cjsCreateServer.default
9 |
10 | createServer((page) => createInertiaApp({
11 | page,
12 | render: ReactDOMServer.renderToString,
13 | resolve: name => pages[`../pages/${name}.jsx`],
14 | setup: ({ App, props }) => ,
15 | }))
16 |
--------------------------------------------------------------------------------
/app/helpers/application_helper.rb:
--------------------------------------------------------------------------------
1 | module ApplicationHelper
2 | end
3 |
--------------------------------------------------------------------------------
/app/models/application_record.rb:
--------------------------------------------------------------------------------
1 | class ApplicationRecord < ActiveRecord::Base
2 | primary_abstract_class
3 | end
4 |
--------------------------------------------------------------------------------
/app/models/concerns/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/app/models/concerns/.keep
--------------------------------------------------------------------------------
/app/views/layouts/application.html.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Inertia Rails Template
5 |
6 | <%= csrf_meta_tags %>
7 | <%= csp_meta_tag %>
8 |
9 |
10 |
11 | <%= stylesheet_link_tag "application" %>
12 | <%= vite_client_tag %>
13 | <%= vite_react_refresh_tag %>
14 | <%= vite_javascript_tag 'application.jsx' %>
15 |
24 |
25 |
26 |
27 |
28 | <%= yield %>
29 |
30 |
31 |
--------------------------------------------------------------------------------
/bin/bundle:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | # frozen_string_literal: true
3 |
4 | #
5 | # This file was generated by Bundler.
6 | #
7 | # The application 'bundle' is installed as part of a gem, and
8 | # this file is here to facilitate running it.
9 | #
10 |
11 | require "rubygems"
12 |
13 | m = Module.new do
14 | module_function
15 |
16 | def invoked_as_script?
17 | File.expand_path($0) == File.expand_path(__FILE__)
18 | end
19 |
20 | def env_var_version
21 | ENV["BUNDLER_VERSION"]
22 | end
23 |
24 | def cli_arg_version
25 | return unless invoked_as_script? # don't want to hijack other binstubs
26 | return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
27 | bundler_version = nil
28 | update_index = nil
29 | ARGV.each_with_index do |a, i|
30 | if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
31 | bundler_version = a
32 | end
33 | next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
34 | bundler_version = $1
35 | update_index = i
36 | end
37 | bundler_version
38 | end
39 |
40 | def gemfile
41 | gemfile = ENV["BUNDLE_GEMFILE"]
42 | return gemfile if gemfile && !gemfile.empty?
43 |
44 | File.expand_path("../../Gemfile", __FILE__)
45 | end
46 |
47 | def lockfile
48 | lockfile =
49 | case File.basename(gemfile)
50 | when "gems.rb" then gemfile.sub(/\.rb$/, gemfile)
51 | else "#{gemfile}.lock"
52 | end
53 | File.expand_path(lockfile)
54 | end
55 |
56 | def lockfile_version
57 | return unless File.file?(lockfile)
58 | lockfile_contents = File.read(lockfile)
59 | return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
60 | Regexp.last_match(1)
61 | end
62 |
63 | def bundler_requirement
64 | @bundler_requirement ||=
65 | env_var_version || cli_arg_version ||
66 | bundler_requirement_for(lockfile_version)
67 | end
68 |
69 | def bundler_requirement_for(version)
70 | return "#{Gem::Requirement.default}.a" unless version
71 |
72 | bundler_gem_version = Gem::Version.new(version)
73 |
74 | requirement = bundler_gem_version.approximate_recommendation
75 |
76 | return requirement unless Gem.rubygems_version < Gem::Version.new("2.7.0")
77 |
78 | requirement += ".a" if bundler_gem_version.prerelease?
79 |
80 | requirement
81 | end
82 |
83 | def load_bundler!
84 | ENV["BUNDLE_GEMFILE"] ||= gemfile
85 |
86 | activate_bundler
87 | end
88 |
89 | def activate_bundler
90 | gem_error = activation_error_handling do
91 | gem "bundler", bundler_requirement
92 | end
93 | return if gem_error.nil?
94 | require_error = activation_error_handling do
95 | require "bundler/version"
96 | end
97 | return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
98 | warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
99 | exit 42
100 | end
101 |
102 | def activation_error_handling
103 | yield
104 | nil
105 | rescue StandardError, LoadError => e
106 | e
107 | end
108 | end
109 |
110 | m.load_bundler!
111 |
112 | if m.invoked_as_script?
113 | load Gem.bin_path("bundler", "bundle")
114 | end
115 |
--------------------------------------------------------------------------------
/bin/rails:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | APP_PATH = File.expand_path("../config/application", __dir__)
3 | require_relative "../config/boot"
4 | require "rails/commands"
5 |
--------------------------------------------------------------------------------
/bin/rake:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require_relative "../config/boot"
3 | require "rake"
4 | Rake.application.run
5 |
--------------------------------------------------------------------------------
/bin/setup:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | require "fileutils"
3 |
4 | # path to your application root.
5 | APP_ROOT = File.expand_path("..", __dir__)
6 |
7 | def system!(*args)
8 | system(*args) || abort("\n== Command #{args} failed ==")
9 | end
10 |
11 | FileUtils.chdir APP_ROOT do
12 | # This script is a way to set up or update your development environment automatically.
13 | # This script is idempotent, so that you can run it at any time and get an expectable outcome.
14 | # Add necessary setup steps to this file.
15 |
16 | puts "== Installing dependencies =="
17 | system! "gem install bundler --conservative"
18 | system("bundle check") || system!("bundle install")
19 |
20 | # puts "\n== Copying sample files =="
21 | # unless File.exist?("config/database.yml")
22 | # FileUtils.cp "config/database.yml.sample", "config/database.yml"
23 | # end
24 |
25 | puts "\n== Preparing database =="
26 | system! "bin/rails db:prepare"
27 |
28 | puts "\n== Removing old logs and tempfiles =="
29 | system! "bin/rails log:clear tmp:clear"
30 |
31 | puts "\n== Restarting application server =="
32 | system! "bin/rails restart"
33 | end
34 |
--------------------------------------------------------------------------------
/bin/vite:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 | # frozen_string_literal: true
3 |
4 | #
5 | # This file was generated by Bundler.
6 | #
7 | # The application 'vite' is installed as part of a gem, and
8 | # this file is here to facilitate running it.
9 | #
10 |
11 | require "pathname"
12 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13 | Pathname.new(__FILE__).realpath)
14 |
15 | bundle_binstub = File.expand_path("../bundle", __FILE__)
16 |
17 | if File.file?(bundle_binstub)
18 | if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19 | load(bundle_binstub)
20 | else
21 | abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22 | Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23 | end
24 | end
25 |
26 | require "rubygems"
27 | require "bundler/setup"
28 |
29 | load Gem.bin_path("vite_ruby", "vite")
30 |
--------------------------------------------------------------------------------
/config.ru:
--------------------------------------------------------------------------------
1 | # This file is used by Rack-based servers to start the application.
2 |
3 | require_relative "config/environment"
4 |
5 | run Rails.application
6 | Rails.application.load_server
7 |
--------------------------------------------------------------------------------
/config/application.rb:
--------------------------------------------------------------------------------
1 | require_relative "boot"
2 |
3 | require "rails"
4 | # Pick the frameworks you want:
5 | require "active_model/railtie"
6 | # require "active_job/railtie"
7 | require "active_record/railtie"
8 | # require "active_storage/engine"
9 | require "action_controller/railtie"
10 | # require "action_mailer/railtie"
11 | # require "action_mailbox/engine"
12 | # require "action_text/engine"
13 | require "action_view/railtie"
14 | # require "action_cable/engine"
15 | require "rails/test_unit/railtie"
16 |
17 | # Require the gems listed in Gemfile, including any gems
18 | # you've limited to :test, :development, or :production.
19 | Bundler.require(*Rails.groups)
20 |
21 | module InertiaTemplate
22 | class Application < Rails::Application
23 | # Initialize configuration defaults for originally generated Rails version.
24 | config.load_defaults 7.0
25 |
26 | # Configuration for the application, engines, and railties goes here.
27 | #
28 | # These settings can be overridden in specific environments using the files
29 | # in config/environments, which are processed later.
30 | #
31 | # config.time_zone = "Central Time (US & Canada)"
32 | # config.eager_load_paths << Rails.root.join("extras")
33 |
34 | # Don't generate system test files.
35 | config.generators.system_tests = nil
36 | end
37 | end
38 |
--------------------------------------------------------------------------------
/config/boot.rb:
--------------------------------------------------------------------------------
1 | ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
2 |
3 | require "bundler/setup" # Set up gems listed in the Gemfile.
4 |
--------------------------------------------------------------------------------
/config/credentials.yml.enc:
--------------------------------------------------------------------------------
1 | OkmQ+Mcy8N4lMmfxAFo6hlJ6MuOk46FpZWBCN/Fo972rHSmsq1RwqTcGY/vvLZOrbWFeCAvsDs0R3shHye3OUMbGr+pH7vAeH/bMQ6Dc5p3w7Jx0gUXr3MPsvZ+fZX0HB2EONxirHtIt6Q2JQ+gwKgq7t8otwXZV3sLtxkqYKQ50wayaq89AEsFwE1vsw21Ao64QdHckRPJF9f6WElJuPNeUuNNOsM7qc+xXHcjmbdhzHdvdCn1jGGjajw5EvcGL6KecQpv4xWegWnvsM2Ntw+sRKd/dQFsaVEWfWTsPsF7VQAHlNN1pmwfziEGp5DDNIT+PTU+XpvJXyZ/KtpbdVjAP9vCaWBoVh0m/xWBnERvVgXYAO23w3TUyhuuyOvXo/5H7KjP7NE3YOCe9Wlyb7SNEhM7sC9Ym92xe--ZyCmObo526n3EM3k--dWBDA0SnepaXjZuKZMp0lw==
--------------------------------------------------------------------------------
/config/database.yml:
--------------------------------------------------------------------------------
1 | # SQLite. Versions 3.8.0 and up are supported.
2 | # gem install sqlite3
3 | #
4 | # Ensure the SQLite 3 gem is defined in your Gemfile
5 | # gem "sqlite3"
6 | #
7 | default: &default
8 | adapter: sqlite3
9 | pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
10 | timeout: 5000
11 |
12 | development:
13 | <<: *default
14 | database: db/development.sqlite3
15 |
16 | # Warning: The database defined as "test" will be erased and
17 | # re-generated from your development database when you run "rake".
18 | # Do not set this db to the same as development or production.
19 | test:
20 | <<: *default
21 | database: db/test.sqlite3
22 |
23 | production:
24 | <<: *default
25 | database: db/production.sqlite3
26 |
--------------------------------------------------------------------------------
/config/environment.rb:
--------------------------------------------------------------------------------
1 | # Load the Rails application.
2 | require_relative "application"
3 |
4 | # Initialize the Rails application.
5 | Rails.application.initialize!
6 |
--------------------------------------------------------------------------------
/config/environments/development.rb:
--------------------------------------------------------------------------------
1 | require "active_support/core_ext/integer/time"
2 |
3 | Rails.application.configure do
4 | # Settings specified here will take precedence over those in config/application.rb.
5 |
6 | # In the development environment your application's code is reloaded any time
7 | # it changes. This slows down response time but is perfect for development
8 | # since you don't have to restart the web server when you make code changes.
9 | config.cache_classes = false
10 |
11 | # Do not eager load code on boot.
12 | config.eager_load = false
13 |
14 | # Show full error reports.
15 | config.consider_all_requests_local = true
16 |
17 | # Enable server timing
18 | config.server_timing = true
19 |
20 | # Enable/disable caching. By default caching is disabled.
21 | # Run rails dev:cache to toggle caching.
22 | if Rails.root.join("tmp/caching-dev.txt").exist?
23 | config.action_controller.perform_caching = true
24 | config.action_controller.enable_fragment_cache_logging = true
25 |
26 | config.cache_store = :memory_store
27 | config.public_file_server.headers = {
28 | "Cache-Control" => "public, max-age=#{2.days.to_i}"
29 | }
30 | else
31 | config.action_controller.perform_caching = false
32 |
33 | config.cache_store = :null_store
34 | end
35 |
36 | # Print deprecation notices to the Rails logger.
37 | config.active_support.deprecation = :log
38 |
39 | # Raise exceptions for disallowed deprecations.
40 | config.active_support.disallowed_deprecation = :raise
41 |
42 | # Tell Active Support which deprecation messages to disallow.
43 | config.active_support.disallowed_deprecation_warnings = []
44 |
45 | # Raise an error on page load if there are pending migrations.
46 | config.active_record.migration_error = :page_load
47 |
48 | # Highlight code that triggered database queries in logs.
49 | config.active_record.verbose_query_logs = true
50 |
51 | # Suppress logger output for asset requests.
52 | config.assets.quiet = true
53 |
54 | # Raises error for missing translations.
55 | # config.i18n.raise_on_missing_translations = true
56 |
57 | # Annotate rendered view with file names.
58 | # config.action_view.annotate_rendered_view_with_filenames = true
59 |
60 | # Uncomment if you wish to allow Action Cable access from any origin.
61 | # config.action_cable.disable_request_forgery_protection = true
62 | end
63 |
--------------------------------------------------------------------------------
/config/environments/production.rb:
--------------------------------------------------------------------------------
1 | require "active_support/core_ext/integer/time"
2 |
3 | Rails.application.configure do
4 | # Settings specified here will take precedence over those in config/application.rb.
5 |
6 | # Code is not reloaded between requests.
7 | config.cache_classes = true
8 |
9 | # Eager load code on boot. This eager loads most of Rails and
10 | # your application in memory, allowing both threaded web servers
11 | # and those relying on copy on write to perform better.
12 | # Rake tasks automatically ignore this option for performance.
13 | config.eager_load = true
14 |
15 | # Full error reports are disabled and caching is turned on.
16 | config.consider_all_requests_local = false
17 | config.action_controller.perform_caching = true
18 |
19 | # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
20 | # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
21 | # config.require_master_key = true
22 |
23 | # Disable serving static files from the `/public` folder by default since
24 | # Apache or NGINX already handles this.
25 | config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"] != 'false'
26 |
27 | # Compress CSS using a preprocessor.
28 | # config.assets.css_compressor = :sass
29 |
30 | # Do not fallback to assets pipeline if a precompiled asset is missed.
31 | config.assets.compile = false
32 |
33 | # Enable serving of images, stylesheets, and JavaScripts from an asset server.
34 | # config.asset_host = "http://assets.example.com"
35 |
36 | # Specifies the header that your server uses for sending files.
37 | # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache
38 | # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX
39 |
40 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
41 | # config.force_ssl = true
42 |
43 | # Include generic and useful information about system operation, but avoid logging too much
44 | # information to avoid inadvertent exposure of personally identifiable information (PII).
45 | config.log_level = :info
46 |
47 | # Prepend all log lines with the following tags.
48 | config.log_tags = [ :request_id ]
49 |
50 | # Use a different cache store in production.
51 | # config.cache_store = :mem_cache_store
52 |
53 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
54 | # the I18n.default_locale when a translation cannot be found).
55 | config.i18n.fallbacks = true
56 |
57 | # Don't log any deprecations.
58 | config.active_support.report_deprecations = false
59 |
60 | # Use default logging formatter so that PID and timestamp are not suppressed.
61 | config.log_formatter = ::Logger::Formatter.new
62 |
63 | # Use a different logger for distributed setups.
64 | # require "syslog/logger"
65 | # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name")
66 |
67 | if ENV["RAILS_LOG_TO_STDOUT"].present?
68 | logger = ActiveSupport::Logger.new(STDOUT)
69 | logger.formatter = config.log_formatter
70 | config.logger = ActiveSupport::TaggedLogging.new(logger)
71 | end
72 |
73 | # Do not dump schema after migrations.
74 | config.active_record.dump_schema_after_migration = false
75 | end
76 |
--------------------------------------------------------------------------------
/config/environments/test.rb:
--------------------------------------------------------------------------------
1 | require "active_support/core_ext/integer/time"
2 |
3 | # The test environment is used exclusively to run your application's
4 | # test suite. You never need to work with it otherwise. Remember that
5 | # your test database is "scratch space" for the test suite and is wiped
6 | # and recreated between test runs. Don't rely on the data there!
7 |
8 | Rails.application.configure do
9 | # Settings specified here will take precedence over those in config/application.rb.
10 |
11 | # Turn false under Spring and add config.action_view.cache_template_loading = true.
12 | config.cache_classes = true
13 |
14 | # Eager loading loads your whole application. When running a single test locally,
15 | # this probably isn't necessary. It's a good idea to do in a continuous integration
16 | # system, or in some way before deploying your code.
17 | config.eager_load = ENV["CI"].present?
18 |
19 | # Configure public file server for tests with Cache-Control for performance.
20 | config.public_file_server.enabled = true
21 | config.public_file_server.headers = {
22 | "Cache-Control" => "public, max-age=#{1.hour.to_i}"
23 | }
24 |
25 | # Show full error reports and disable caching.
26 | config.consider_all_requests_local = true
27 | config.action_controller.perform_caching = false
28 | config.cache_store = :null_store
29 |
30 | # Raise exceptions instead of rendering exception templates.
31 | config.action_dispatch.show_exceptions = false
32 |
33 | # Disable request forgery protection in test environment.
34 | config.action_controller.allow_forgery_protection = false
35 |
36 | # Print deprecation notices to the stderr.
37 | config.active_support.deprecation = :stderr
38 |
39 | # Raise exceptions for disallowed deprecations.
40 | config.active_support.disallowed_deprecation = :raise
41 |
42 | # Tell Active Support which deprecation messages to disallow.
43 | config.active_support.disallowed_deprecation_warnings = []
44 |
45 | # Raises error for missing translations.
46 | # config.i18n.raise_on_missing_translations = true
47 |
48 | # Annotate rendered view with file names.
49 | # config.action_view.annotate_rendered_view_with_filenames = true
50 | end
51 |
--------------------------------------------------------------------------------
/config/initializers/assets.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Version of your assets, change this if you want to expire all your assets.
4 | Rails.application.config.assets.version = "1.0"
5 |
6 | # Add additional assets to the asset load path.
7 | # Rails.application.config.assets.paths << Emoji.images_path
8 |
9 | # Precompile additional assets.
10 | # application.js, application.css, and all non-JS/CSS in the app/assets
11 | # folder are already added.
12 | # Rails.application.config.assets.precompile += %w( admin.js admin.css )
13 |
--------------------------------------------------------------------------------
/config/initializers/content_security_policy.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Define an application-wide content security policy
4 | # For further information see the following documentation
5 | # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
6 |
7 | # Rails.application.configure do
8 | # config.content_security_policy do |policy|
9 | # policy.default_src :self, :https
10 | # policy.font_src :self, :https, :data
11 | # policy.img_src :self, :https, :data
12 | # policy.object_src :none
13 | # policy.script_src :self, :https
14 | # Allow @vite/client to hot reload javascript changes in development
15 | # policy.script_src *policy.script_src, :unsafe_eval, "http://#{ ViteRuby.config.host_with_port }" if Rails.env.development?
16 |
17 | # You may need to enable this in production as well depending on your setup.
18 | # policy.script_src *policy.script_src, :blob if Rails.env.test?
19 |
20 | # policy.style_src :self, :https
21 | # Allow @vite/client to hot reload style changes in development
22 | # policy.style_src *policy.style_src, :unsafe_inline if Rails.env.development?
23 |
24 | # # Specify URI for violation reports
25 | # # policy.report_uri "/csp-violation-report-endpoint"
26 | # end
27 | #
28 | # # Generate session nonces for permitted importmap and inline scripts
29 | # config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
30 | # config.content_security_policy_nonce_directives = %w(script-src)
31 | #
32 | # # Report CSP violations to a specified URI. See:
33 | # # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
34 | # # config.content_security_policy_report_only = true
35 | # end
36 |
--------------------------------------------------------------------------------
/config/initializers/filter_parameter_logging.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Configure parameters to be filtered from the log file. Use this to limit dissemination of
4 | # sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
5 | # notations and behaviors.
6 | Rails.application.config.filter_parameters += [
7 | :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
8 | ]
9 |
--------------------------------------------------------------------------------
/config/initializers/inertia.rb:
--------------------------------------------------------------------------------
1 | InertiaRails.configure do |config|
2 | config.ssr_enabled = true
3 | config.ssr_url = 'http://localhost:13714'
4 | end
5 |
--------------------------------------------------------------------------------
/config/initializers/inflections.rb:
--------------------------------------------------------------------------------
1 | # Be sure to restart your server when you modify this file.
2 |
3 | # Add new inflection rules using the following format. Inflections
4 | # are locale specific, and you may define rules for as many different
5 | # locales as you wish. All of these examples are active by default:
6 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
7 | # inflect.plural /^(ox)$/i, "\\1en"
8 | # inflect.singular /^(ox)en/i, "\\1"
9 | # inflect.irregular "person", "people"
10 | # inflect.uncountable %w( fish sheep )
11 | # end
12 |
13 | # These inflection rules are supported but not enabled by default:
14 | # ActiveSupport::Inflector.inflections(:en) do |inflect|
15 | # inflect.acronym "RESTful"
16 | # end
17 |
--------------------------------------------------------------------------------
/config/initializers/permissions_policy.rb:
--------------------------------------------------------------------------------
1 | # Define an application-wide HTTP permissions policy. For further
2 | # information see https://developers.google.com/web/updates/2018/06/feature-policy
3 | #
4 | # Rails.application.config.permissions_policy do |f|
5 | # f.camera :none
6 | # f.gyroscope :none
7 | # f.microphone :none
8 | # f.usb :none
9 | # f.fullscreen :self
10 | # f.payment :self, "https://secure.example.com"
11 | # end
12 |
--------------------------------------------------------------------------------
/config/locales/en.yml:
--------------------------------------------------------------------------------
1 | # Files in the config/locales directory are used for internationalization
2 | # and are automatically loaded by Rails. If you want to use locales other
3 | # than English, add the necessary files in this directory.
4 | #
5 | # To use the locales, use `I18n.t`:
6 | #
7 | # I18n.t "hello"
8 | #
9 | # In views, this is aliased to just `t`:
10 | #
11 | # <%= t("hello") %>
12 | #
13 | # To use a different locale, set it with `I18n.locale`:
14 | #
15 | # I18n.locale = :es
16 | #
17 | # This would use the information in config/locales/es.yml.
18 | #
19 | # The following keys must be escaped otherwise they will not be retrieved by
20 | # the default I18n backend:
21 | #
22 | # true, false, on, off, yes, no
23 | #
24 | # Instead, surround them with single quotes.
25 | #
26 | # en:
27 | # "true": "foo"
28 | #
29 | # To learn more, please read the Rails Internationalization guide
30 | # available at https://guides.rubyonrails.org/i18n.html.
31 |
32 | en:
33 | hello: "Hello world"
34 |
--------------------------------------------------------------------------------
/config/puma.rb:
--------------------------------------------------------------------------------
1 | # Puma can serve each request in a thread from an internal thread pool.
2 | # The `threads` method setting takes two numbers: a minimum and maximum.
3 | # Any libraries that use thread pools should be configured to match
4 | # the maximum value specified for Puma. Default is set to 5 threads for minimum
5 | # and maximum; this matches the default thread size of Active Record.
6 | #
7 | max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
8 | min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
9 | threads min_threads_count, max_threads_count
10 |
11 | # Specifies the `worker_timeout` threshold that Puma will use to wait before
12 | # terminating a worker in development environments.
13 | #
14 | worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
15 |
16 | # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
17 | #
18 | port ENV.fetch("PORT") { 3000 }
19 |
20 | # Specifies the `environment` that Puma will run in.
21 | #
22 | environment ENV.fetch("RAILS_ENV") { "development" }
23 |
24 | # Specifies the `pidfile` that Puma will use.
25 | pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
26 |
27 | # Specifies the number of `workers` to boot in clustered mode.
28 | # Workers are forked web server processes. If using threads and workers together
29 | # the concurrency of the application would be max `threads` * `workers`.
30 | # Workers do not work on JRuby or Windows (both of which do not support
31 | # processes).
32 | #
33 | # workers ENV.fetch("WEB_CONCURRENCY") { 2 }
34 |
35 | # Use the `preload_app!` method when specifying a `workers` number.
36 | # This directive tells Puma to first boot the application and load code
37 | # before forking the application. This takes advantage of Copy On Write
38 | # process behavior so workers use less memory.
39 | #
40 | # preload_app!
41 |
42 | # Allow puma to be restarted by `bin/rails restart` command.
43 | plugin :tmp_restart
44 |
--------------------------------------------------------------------------------
/config/routes.rb:
--------------------------------------------------------------------------------
1 | Rails.application.routes.draw do
2 | # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
3 |
4 | root 'dashboard#index'
5 | end
6 |
--------------------------------------------------------------------------------
/config/vite.json:
--------------------------------------------------------------------------------
1 | {
2 | "all": {
3 | "sourceCodeDir": "app/frontend",
4 | "watchAdditionalPaths": []
5 | },
6 | "development": {
7 | "autoBuild": true,
8 | "publicOutputDir": "vite-dev",
9 | "port": 3036
10 | },
11 | "test": {
12 | "autoBuild": true,
13 | "publicOutputDir": "vite-test",
14 | "port": 3037
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/db/seeds.rb:
--------------------------------------------------------------------------------
1 | # This file should contain all the record creation needed to seed the database with its default values.
2 | # The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup).
3 | #
4 | # Examples:
5 | #
6 | # movies = Movie.create([{ name: "Star Wars" }, { name: "Lord of the Rings" }])
7 | # Character.create(name: "Luke", movie: movies.first)
8 |
--------------------------------------------------------------------------------
/lib/assets/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/lib/assets/.keep
--------------------------------------------------------------------------------
/lib/tasks/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/lib/tasks/.keep
--------------------------------------------------------------------------------
/log/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/log/.keep
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "module",
3 | "devDependencies": {
4 | "@inertiajs/inertia": "^0.11.0",
5 | "@inertiajs/inertia-react": "^0.8.0",
6 | "@inertiajs/progress": "^0.2.7",
7 | "@vitejs/plugin-react": "2.0.0-alpha.2",
8 | "axios": "^0.27.2",
9 | "react": "^18.2.0",
10 | "react-dom": "^18.2.0",
11 | "vite": "^3.0.0-beta.5",
12 | "vite-plugin-ruby": "^3.0.12"
13 | },
14 | "dependencies": {
15 | "@inertiajs/server": "^0.1.0"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@inertiajs/inertia': ^0.11.0
5 | '@inertiajs/inertia-react': ^0.8.0
6 | '@inertiajs/progress': ^0.2.7
7 | '@inertiajs/server': ^0.1.0
8 | '@vitejs/plugin-react': 2.0.0-alpha.2
9 | axios: ^0.27.2
10 | react: ^18.2.0
11 | react-dom: ^18.2.0
12 | vite: ^3.0.0-beta.5
13 | vite-plugin-ruby: ^3.0.12
14 |
15 | dependencies:
16 | '@inertiajs/server': 0.1.0_@inertiajs+inertia@0.11.0
17 |
18 | devDependencies:
19 | '@inertiajs/inertia': 0.11.0
20 | '@inertiajs/inertia-react': 0.8.0_c53tup63oweczngep3ttpnzt3y
21 | '@inertiajs/progress': 0.2.7_@inertiajs+inertia@0.11.0
22 | '@vitejs/plugin-react': 2.0.0-alpha.2_vite@3.0.0-beta.5
23 | axios: 0.27.2
24 | react: 18.2.0
25 | react-dom: 18.2.0_react@18.2.0
26 | vite: 3.0.0-beta.5
27 | vite-plugin-ruby: 3.0.12_vite@3.0.0-beta.5
28 |
29 | packages:
30 |
31 | /@ampproject/remapping/2.2.0:
32 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
33 | engines: {node: '>=6.0.0'}
34 | dependencies:
35 | '@jridgewell/gen-mapping': 0.1.1
36 | '@jridgewell/trace-mapping': 0.3.13
37 | dev: true
38 |
39 | /@babel/code-frame/7.18.6:
40 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
41 | engines: {node: '>=6.9.0'}
42 | dependencies:
43 | '@babel/highlight': 7.18.6
44 | dev: true
45 |
46 | /@babel/compat-data/7.18.6:
47 | resolution: {integrity: sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==}
48 | engines: {node: '>=6.9.0'}
49 | dev: true
50 |
51 | /@babel/core/7.18.6:
52 | resolution: {integrity: sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==}
53 | engines: {node: '>=6.9.0'}
54 | dependencies:
55 | '@ampproject/remapping': 2.2.0
56 | '@babel/code-frame': 7.18.6
57 | '@babel/generator': 7.18.7
58 | '@babel/helper-compilation-targets': 7.18.6_@babel+core@7.18.6
59 | '@babel/helper-module-transforms': 7.18.6
60 | '@babel/helpers': 7.18.6
61 | '@babel/parser': 7.18.6
62 | '@babel/template': 7.18.6
63 | '@babel/traverse': 7.18.6
64 | '@babel/types': 7.18.7
65 | convert-source-map: 1.8.0
66 | debug: 4.3.4
67 | gensync: 1.0.0-beta.2
68 | json5: 2.2.1
69 | semver: 6.3.0
70 | transitivePeerDependencies:
71 | - supports-color
72 | dev: true
73 |
74 | /@babel/generator/7.18.7:
75 | resolution: {integrity: sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==}
76 | engines: {node: '>=6.9.0'}
77 | dependencies:
78 | '@babel/types': 7.18.7
79 | '@jridgewell/gen-mapping': 0.3.2
80 | jsesc: 2.5.2
81 | dev: true
82 |
83 | /@babel/helper-annotate-as-pure/7.18.6:
84 | resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
85 | engines: {node: '>=6.9.0'}
86 | dependencies:
87 | '@babel/types': 7.18.7
88 | dev: true
89 |
90 | /@babel/helper-compilation-targets/7.18.6_@babel+core@7.18.6:
91 | resolution: {integrity: sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==}
92 | engines: {node: '>=6.9.0'}
93 | peerDependencies:
94 | '@babel/core': ^7.0.0
95 | dependencies:
96 | '@babel/compat-data': 7.18.6
97 | '@babel/core': 7.18.6
98 | '@babel/helper-validator-option': 7.18.6
99 | browserslist: 4.20.3
100 | semver: 6.3.0
101 | dev: true
102 |
103 | /@babel/helper-environment-visitor/7.18.6:
104 | resolution: {integrity: sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==}
105 | engines: {node: '>=6.9.0'}
106 | dev: true
107 |
108 | /@babel/helper-function-name/7.18.6:
109 | resolution: {integrity: sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==}
110 | engines: {node: '>=6.9.0'}
111 | dependencies:
112 | '@babel/template': 7.18.6
113 | '@babel/types': 7.18.7
114 | dev: true
115 |
116 | /@babel/helper-hoist-variables/7.18.6:
117 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
118 | engines: {node: '>=6.9.0'}
119 | dependencies:
120 | '@babel/types': 7.18.7
121 | dev: true
122 |
123 | /@babel/helper-module-imports/7.18.6:
124 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==}
125 | engines: {node: '>=6.9.0'}
126 | dependencies:
127 | '@babel/types': 7.18.7
128 | dev: true
129 |
130 | /@babel/helper-module-transforms/7.18.6:
131 | resolution: {integrity: sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==}
132 | engines: {node: '>=6.9.0'}
133 | dependencies:
134 | '@babel/helper-environment-visitor': 7.18.6
135 | '@babel/helper-module-imports': 7.18.6
136 | '@babel/helper-simple-access': 7.18.6
137 | '@babel/helper-split-export-declaration': 7.18.6
138 | '@babel/helper-validator-identifier': 7.18.6
139 | '@babel/template': 7.18.6
140 | '@babel/traverse': 7.18.6
141 | '@babel/types': 7.18.7
142 | transitivePeerDependencies:
143 | - supports-color
144 | dev: true
145 |
146 | /@babel/helper-plugin-utils/7.16.7:
147 | resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==}
148 | engines: {node: '>=6.9.0'}
149 | dev: true
150 |
151 | /@babel/helper-plugin-utils/7.18.6:
152 | resolution: {integrity: sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==}
153 | engines: {node: '>=6.9.0'}
154 | dev: true
155 |
156 | /@babel/helper-simple-access/7.18.6:
157 | resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==}
158 | engines: {node: '>=6.9.0'}
159 | dependencies:
160 | '@babel/types': 7.18.7
161 | dev: true
162 |
163 | /@babel/helper-split-export-declaration/7.18.6:
164 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
165 | engines: {node: '>=6.9.0'}
166 | dependencies:
167 | '@babel/types': 7.18.7
168 | dev: true
169 |
170 | /@babel/helper-validator-identifier/7.18.6:
171 | resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==}
172 | engines: {node: '>=6.9.0'}
173 | dev: true
174 |
175 | /@babel/helper-validator-option/7.18.6:
176 | resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==}
177 | engines: {node: '>=6.9.0'}
178 | dev: true
179 |
180 | /@babel/helpers/7.18.6:
181 | resolution: {integrity: sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==}
182 | engines: {node: '>=6.9.0'}
183 | dependencies:
184 | '@babel/template': 7.18.6
185 | '@babel/traverse': 7.18.6
186 | '@babel/types': 7.18.7
187 | transitivePeerDependencies:
188 | - supports-color
189 | dev: true
190 |
191 | /@babel/highlight/7.18.6:
192 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
193 | engines: {node: '>=6.9.0'}
194 | dependencies:
195 | '@babel/helper-validator-identifier': 7.18.6
196 | chalk: 2.4.2
197 | js-tokens: 4.0.0
198 | dev: true
199 |
200 | /@babel/parser/7.18.6:
201 | resolution: {integrity: sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==}
202 | engines: {node: '>=6.0.0'}
203 | hasBin: true
204 | dependencies:
205 | '@babel/types': 7.18.7
206 | dev: true
207 |
208 | /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.18.6:
209 | resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==}
210 | engines: {node: '>=6.9.0'}
211 | peerDependencies:
212 | '@babel/core': ^7.0.0-0
213 | dependencies:
214 | '@babel/core': 7.18.6
215 | '@babel/helper-plugin-utils': 7.18.6
216 | dev: true
217 |
218 | /@babel/plugin-transform-react-jsx-development/7.16.7_@babel+core@7.18.6:
219 | resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==}
220 | engines: {node: '>=6.9.0'}
221 | peerDependencies:
222 | '@babel/core': ^7.0.0-0
223 | dependencies:
224 | '@babel/core': 7.18.6
225 | '@babel/plugin-transform-react-jsx': 7.18.6_@babel+core@7.18.6
226 | dev: true
227 |
228 | /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.18.6:
229 | resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==}
230 | engines: {node: '>=6.9.0'}
231 | peerDependencies:
232 | '@babel/core': ^7.0.0-0
233 | dependencies:
234 | '@babel/core': 7.18.6
235 | '@babel/helper-plugin-utils': 7.18.6
236 | dev: true
237 |
238 | /@babel/plugin-transform-react-jsx-source/7.16.7_@babel+core@7.18.6:
239 | resolution: {integrity: sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==}
240 | engines: {node: '>=6.9.0'}
241 | peerDependencies:
242 | '@babel/core': ^7.0.0-0
243 | dependencies:
244 | '@babel/core': 7.18.6
245 | '@babel/helper-plugin-utils': 7.16.7
246 | dev: true
247 |
248 | /@babel/plugin-transform-react-jsx/7.18.6_@babel+core@7.18.6:
249 | resolution: {integrity: sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==}
250 | engines: {node: '>=6.9.0'}
251 | peerDependencies:
252 | '@babel/core': ^7.0.0-0
253 | dependencies:
254 | '@babel/core': 7.18.6
255 | '@babel/helper-annotate-as-pure': 7.18.6
256 | '@babel/helper-module-imports': 7.18.6
257 | '@babel/helper-plugin-utils': 7.18.6
258 | '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.18.6
259 | '@babel/types': 7.18.7
260 | dev: true
261 |
262 | /@babel/template/7.18.6:
263 | resolution: {integrity: sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==}
264 | engines: {node: '>=6.9.0'}
265 | dependencies:
266 | '@babel/code-frame': 7.18.6
267 | '@babel/parser': 7.18.6
268 | '@babel/types': 7.18.7
269 | dev: true
270 |
271 | /@babel/traverse/7.18.6:
272 | resolution: {integrity: sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==}
273 | engines: {node: '>=6.9.0'}
274 | dependencies:
275 | '@babel/code-frame': 7.18.6
276 | '@babel/generator': 7.18.7
277 | '@babel/helper-environment-visitor': 7.18.6
278 | '@babel/helper-function-name': 7.18.6
279 | '@babel/helper-hoist-variables': 7.18.6
280 | '@babel/helper-split-export-declaration': 7.18.6
281 | '@babel/parser': 7.18.6
282 | '@babel/types': 7.18.7
283 | debug: 4.3.4
284 | globals: 11.12.0
285 | transitivePeerDependencies:
286 | - supports-color
287 | dev: true
288 |
289 | /@babel/types/7.18.7:
290 | resolution: {integrity: sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==}
291 | engines: {node: '>=6.9.0'}
292 | dependencies:
293 | '@babel/helper-validator-identifier': 7.18.6
294 | to-fast-properties: 2.0.0
295 | dev: true
296 |
297 | /@inertiajs/inertia-react/0.8.0_c53tup63oweczngep3ttpnzt3y:
298 | resolution: {integrity: sha512-b0qMCS5I8+91XfC7+k51Poh5IuCmOQ598SNlIFsaI6jya0Jt8qwEpW2aTZlLy3bm49RKiMWB3d3OgMmxo9iA5A==}
299 | peerDependencies:
300 | '@inertiajs/inertia': ^0.11.0
301 | react: ^16.9.0 || ^17.0.0
302 | dependencies:
303 | '@inertiajs/inertia': 0.11.0
304 | lodash.isequal: 4.5.0
305 | react: 18.2.0
306 | dev: true
307 |
308 | /@inertiajs/inertia/0.11.0:
309 | resolution: {integrity: sha512-QF4hctgFC+B/t/WClCwfOla+WoDE9iTltQJ0u+DCfjl0KdGoCvIxYiNtuH8h8oM+RQMb8orjbpW3pHapjYI5Vw==}
310 | dependencies:
311 | axios: 0.21.4
312 | deepmerge: 4.2.2
313 | qs: 6.10.3
314 | transitivePeerDependencies:
315 | - debug
316 |
317 | /@inertiajs/progress/0.2.7_@inertiajs+inertia@0.11.0:
318 | resolution: {integrity: sha512-zxadfLlBPIUvTE9g5k71V/Ayzo8P9kEp4hV4UKywCC2kURufxV7bycbZqU1GeMCFGDT+VRrjXNl676Pwwa1HoQ==}
319 | peerDependencies:
320 | '@inertiajs/inertia': ^0.6.0 || ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0
321 | dependencies:
322 | '@inertiajs/inertia': 0.11.0
323 | nprogress: 0.2.0
324 | dev: true
325 |
326 | /@inertiajs/server/0.1.0_@inertiajs+inertia@0.11.0:
327 | resolution: {integrity: sha512-Ab1DqaRgW53nZq3sPN1AitHPJ1UoHiTRLbdGGgrswO6HhTYu6m7aewY80+YtiL1VEWGJfOumeNPqhnY+3/414w==}
328 | peerDependencies:
329 | '@inertiajs/inertia': ^0.11.0
330 | dependencies:
331 | '@inertiajs/inertia': 0.11.0
332 | dev: false
333 |
334 | /@jridgewell/gen-mapping/0.1.1:
335 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
336 | engines: {node: '>=6.0.0'}
337 | dependencies:
338 | '@jridgewell/set-array': 1.1.1
339 | '@jridgewell/sourcemap-codec': 1.4.13
340 | dev: true
341 |
342 | /@jridgewell/gen-mapping/0.3.2:
343 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
344 | engines: {node: '>=6.0.0'}
345 | dependencies:
346 | '@jridgewell/set-array': 1.1.1
347 | '@jridgewell/sourcemap-codec': 1.4.13
348 | '@jridgewell/trace-mapping': 0.3.13
349 | dev: true
350 |
351 | /@jridgewell/resolve-uri/3.0.7:
352 | resolution: {integrity: sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==}
353 | engines: {node: '>=6.0.0'}
354 | dev: true
355 |
356 | /@jridgewell/set-array/1.1.1:
357 | resolution: {integrity: sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==}
358 | engines: {node: '>=6.0.0'}
359 | dev: true
360 |
361 | /@jridgewell/sourcemap-codec/1.4.13:
362 | resolution: {integrity: sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==}
363 | dev: true
364 |
365 | /@jridgewell/trace-mapping/0.3.13:
366 | resolution: {integrity: sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==}
367 | dependencies:
368 | '@jridgewell/resolve-uri': 3.0.7
369 | '@jridgewell/sourcemap-codec': 1.4.13
370 | dev: true
371 |
372 | /@nodelib/fs.scandir/2.1.5:
373 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
374 | engines: {node: '>= 8'}
375 | dependencies:
376 | '@nodelib/fs.stat': 2.0.5
377 | run-parallel: 1.2.0
378 | dev: true
379 |
380 | /@nodelib/fs.stat/2.0.5:
381 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
382 | engines: {node: '>= 8'}
383 | dev: true
384 |
385 | /@nodelib/fs.walk/1.2.8:
386 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
387 | engines: {node: '>= 8'}
388 | dependencies:
389 | '@nodelib/fs.scandir': 2.1.5
390 | fastq: 1.13.0
391 | dev: true
392 |
393 | /@rollup/pluginutils/4.2.1:
394 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
395 | engines: {node: '>= 8.0.0'}
396 | dependencies:
397 | estree-walker: 2.0.2
398 | picomatch: 2.3.1
399 | dev: true
400 |
401 | /@vitejs/plugin-react/2.0.0-alpha.2_vite@3.0.0-beta.5:
402 | resolution: {integrity: sha512-NKJIeXMB0t6Eyu9YP8HHU7RMtUsIGr8vTRYeHYqWTIKE23cRTIShJfNXdz7tTz6oE8RLllCoYoz1Ldj0d8dbCg==}
403 | engines: {node: '>=14.6.0'}
404 | peerDependencies:
405 | vite: ^3.0.0-alpha
406 | dependencies:
407 | '@babel/core': 7.18.6
408 | '@babel/plugin-transform-react-jsx': 7.18.6_@babel+core@7.18.6
409 | '@babel/plugin-transform-react-jsx-development': 7.16.7_@babel+core@7.18.6
410 | '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.18.6
411 | '@babel/plugin-transform-react-jsx-source': 7.16.7_@babel+core@7.18.6
412 | '@rollup/pluginutils': 4.2.1
413 | react-refresh: 0.13.0
414 | resolve: 1.22.1
415 | vite: 3.0.0-beta.5
416 | transitivePeerDependencies:
417 | - supports-color
418 | dev: true
419 |
420 | /ansi-styles/3.2.1:
421 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
422 | engines: {node: '>=4'}
423 | dependencies:
424 | color-convert: 1.9.3
425 | dev: true
426 |
427 | /asynckit/0.4.0:
428 | resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=}
429 | dev: true
430 |
431 | /axios/0.21.4:
432 | resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
433 | dependencies:
434 | follow-redirects: 1.15.0
435 | transitivePeerDependencies:
436 | - debug
437 |
438 | /axios/0.27.2:
439 | resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==}
440 | dependencies:
441 | follow-redirects: 1.15.0
442 | form-data: 4.0.0
443 | transitivePeerDependencies:
444 | - debug
445 | dev: true
446 |
447 | /braces/3.0.2:
448 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
449 | engines: {node: '>=8'}
450 | dependencies:
451 | fill-range: 7.0.1
452 | dev: true
453 |
454 | /browserslist/4.20.3:
455 | resolution: {integrity: sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==}
456 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
457 | hasBin: true
458 | dependencies:
459 | caniuse-lite: 1.0.30001340
460 | electron-to-chromium: 1.4.137
461 | escalade: 3.1.1
462 | node-releases: 2.0.4
463 | picocolors: 1.0.0
464 | dev: true
465 |
466 | /call-bind/1.0.2:
467 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
468 | dependencies:
469 | function-bind: 1.1.1
470 | get-intrinsic: 1.1.1
471 |
472 | /caniuse-lite/1.0.30001340:
473 | resolution: {integrity: sha512-jUNz+a9blQTQVu4uFcn17uAD8IDizPzQkIKh3LCJfg9BkyIqExYYdyc/ZSlWUSKb8iYiXxKsxbv4zYSvkqjrxw==}
474 | dev: true
475 |
476 | /chalk/2.4.2:
477 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
478 | engines: {node: '>=4'}
479 | dependencies:
480 | ansi-styles: 3.2.1
481 | escape-string-regexp: 1.0.5
482 | supports-color: 5.5.0
483 | dev: true
484 |
485 | /color-convert/1.9.3:
486 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
487 | dependencies:
488 | color-name: 1.1.3
489 | dev: true
490 |
491 | /color-name/1.1.3:
492 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
493 | dev: true
494 |
495 | /combined-stream/1.0.8:
496 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
497 | engines: {node: '>= 0.8'}
498 | dependencies:
499 | delayed-stream: 1.0.0
500 | dev: true
501 |
502 | /convert-source-map/1.8.0:
503 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
504 | dependencies:
505 | safe-buffer: 5.1.2
506 | dev: true
507 |
508 | /debug/4.3.4:
509 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
510 | engines: {node: '>=6.0'}
511 | peerDependencies:
512 | supports-color: '*'
513 | peerDependenciesMeta:
514 | supports-color:
515 | optional: true
516 | dependencies:
517 | ms: 2.1.2
518 | dev: true
519 |
520 | /deepmerge/4.2.2:
521 | resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
522 | engines: {node: '>=0.10.0'}
523 |
524 | /delayed-stream/1.0.0:
525 | resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=}
526 | engines: {node: '>=0.4.0'}
527 | dev: true
528 |
529 | /electron-to-chromium/1.4.137:
530 | resolution: {integrity: sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==}
531 | dev: true
532 |
533 | /esbuild-android-64/0.14.48:
534 | resolution: {integrity: sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==}
535 | engines: {node: '>=12'}
536 | cpu: [x64]
537 | os: [android]
538 | requiresBuild: true
539 | dev: true
540 | optional: true
541 |
542 | /esbuild-android-arm64/0.14.48:
543 | resolution: {integrity: sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==}
544 | engines: {node: '>=12'}
545 | cpu: [arm64]
546 | os: [android]
547 | requiresBuild: true
548 | dev: true
549 | optional: true
550 |
551 | /esbuild-darwin-64/0.14.48:
552 | resolution: {integrity: sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==}
553 | engines: {node: '>=12'}
554 | cpu: [x64]
555 | os: [darwin]
556 | requiresBuild: true
557 | dev: true
558 | optional: true
559 |
560 | /esbuild-darwin-arm64/0.14.48:
561 | resolution: {integrity: sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==}
562 | engines: {node: '>=12'}
563 | cpu: [arm64]
564 | os: [darwin]
565 | requiresBuild: true
566 | dev: true
567 | optional: true
568 |
569 | /esbuild-freebsd-64/0.14.48:
570 | resolution: {integrity: sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==}
571 | engines: {node: '>=12'}
572 | cpu: [x64]
573 | os: [freebsd]
574 | requiresBuild: true
575 | dev: true
576 | optional: true
577 |
578 | /esbuild-freebsd-arm64/0.14.48:
579 | resolution: {integrity: sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==}
580 | engines: {node: '>=12'}
581 | cpu: [arm64]
582 | os: [freebsd]
583 | requiresBuild: true
584 | dev: true
585 | optional: true
586 |
587 | /esbuild-linux-32/0.14.48:
588 | resolution: {integrity: sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==}
589 | engines: {node: '>=12'}
590 | cpu: [ia32]
591 | os: [linux]
592 | requiresBuild: true
593 | dev: true
594 | optional: true
595 |
596 | /esbuild-linux-64/0.14.48:
597 | resolution: {integrity: sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==}
598 | engines: {node: '>=12'}
599 | cpu: [x64]
600 | os: [linux]
601 | requiresBuild: true
602 | dev: true
603 | optional: true
604 |
605 | /esbuild-linux-arm/0.14.48:
606 | resolution: {integrity: sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==}
607 | engines: {node: '>=12'}
608 | cpu: [arm]
609 | os: [linux]
610 | requiresBuild: true
611 | dev: true
612 | optional: true
613 |
614 | /esbuild-linux-arm64/0.14.48:
615 | resolution: {integrity: sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==}
616 | engines: {node: '>=12'}
617 | cpu: [arm64]
618 | os: [linux]
619 | requiresBuild: true
620 | dev: true
621 | optional: true
622 |
623 | /esbuild-linux-mips64le/0.14.48:
624 | resolution: {integrity: sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==}
625 | engines: {node: '>=12'}
626 | cpu: [mips64el]
627 | os: [linux]
628 | requiresBuild: true
629 | dev: true
630 | optional: true
631 |
632 | /esbuild-linux-ppc64le/0.14.48:
633 | resolution: {integrity: sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==}
634 | engines: {node: '>=12'}
635 | cpu: [ppc64]
636 | os: [linux]
637 | requiresBuild: true
638 | dev: true
639 | optional: true
640 |
641 | /esbuild-linux-riscv64/0.14.48:
642 | resolution: {integrity: sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==}
643 | engines: {node: '>=12'}
644 | cpu: [riscv64]
645 | os: [linux]
646 | requiresBuild: true
647 | dev: true
648 | optional: true
649 |
650 | /esbuild-linux-s390x/0.14.48:
651 | resolution: {integrity: sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==}
652 | engines: {node: '>=12'}
653 | cpu: [s390x]
654 | os: [linux]
655 | requiresBuild: true
656 | dev: true
657 | optional: true
658 |
659 | /esbuild-netbsd-64/0.14.48:
660 | resolution: {integrity: sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==}
661 | engines: {node: '>=12'}
662 | cpu: [x64]
663 | os: [netbsd]
664 | requiresBuild: true
665 | dev: true
666 | optional: true
667 |
668 | /esbuild-openbsd-64/0.14.48:
669 | resolution: {integrity: sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==}
670 | engines: {node: '>=12'}
671 | cpu: [x64]
672 | os: [openbsd]
673 | requiresBuild: true
674 | dev: true
675 | optional: true
676 |
677 | /esbuild-sunos-64/0.14.48:
678 | resolution: {integrity: sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==}
679 | engines: {node: '>=12'}
680 | cpu: [x64]
681 | os: [sunos]
682 | requiresBuild: true
683 | dev: true
684 | optional: true
685 |
686 | /esbuild-windows-32/0.14.48:
687 | resolution: {integrity: sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==}
688 | engines: {node: '>=12'}
689 | cpu: [ia32]
690 | os: [win32]
691 | requiresBuild: true
692 | dev: true
693 | optional: true
694 |
695 | /esbuild-windows-64/0.14.48:
696 | resolution: {integrity: sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==}
697 | engines: {node: '>=12'}
698 | cpu: [x64]
699 | os: [win32]
700 | requiresBuild: true
701 | dev: true
702 | optional: true
703 |
704 | /esbuild-windows-arm64/0.14.48:
705 | resolution: {integrity: sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==}
706 | engines: {node: '>=12'}
707 | cpu: [arm64]
708 | os: [win32]
709 | requiresBuild: true
710 | dev: true
711 | optional: true
712 |
713 | /esbuild/0.14.48:
714 | resolution: {integrity: sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==}
715 | engines: {node: '>=12'}
716 | hasBin: true
717 | requiresBuild: true
718 | optionalDependencies:
719 | esbuild-android-64: 0.14.48
720 | esbuild-android-arm64: 0.14.48
721 | esbuild-darwin-64: 0.14.48
722 | esbuild-darwin-arm64: 0.14.48
723 | esbuild-freebsd-64: 0.14.48
724 | esbuild-freebsd-arm64: 0.14.48
725 | esbuild-linux-32: 0.14.48
726 | esbuild-linux-64: 0.14.48
727 | esbuild-linux-arm: 0.14.48
728 | esbuild-linux-arm64: 0.14.48
729 | esbuild-linux-mips64le: 0.14.48
730 | esbuild-linux-ppc64le: 0.14.48
731 | esbuild-linux-riscv64: 0.14.48
732 | esbuild-linux-s390x: 0.14.48
733 | esbuild-netbsd-64: 0.14.48
734 | esbuild-openbsd-64: 0.14.48
735 | esbuild-sunos-64: 0.14.48
736 | esbuild-windows-32: 0.14.48
737 | esbuild-windows-64: 0.14.48
738 | esbuild-windows-arm64: 0.14.48
739 | dev: true
740 |
741 | /escalade/3.1.1:
742 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
743 | engines: {node: '>=6'}
744 | dev: true
745 |
746 | /escape-string-regexp/1.0.5:
747 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
748 | engines: {node: '>=0.8.0'}
749 | dev: true
750 |
751 | /estree-walker/2.0.2:
752 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
753 | dev: true
754 |
755 | /fast-glob/3.2.11:
756 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==}
757 | engines: {node: '>=8.6.0'}
758 | dependencies:
759 | '@nodelib/fs.stat': 2.0.5
760 | '@nodelib/fs.walk': 1.2.8
761 | glob-parent: 5.1.2
762 | merge2: 1.4.1
763 | micromatch: 4.0.5
764 | dev: true
765 |
766 | /fastq/1.13.0:
767 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
768 | dependencies:
769 | reusify: 1.0.4
770 | dev: true
771 |
772 | /fill-range/7.0.1:
773 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
774 | engines: {node: '>=8'}
775 | dependencies:
776 | to-regex-range: 5.0.1
777 | dev: true
778 |
779 | /follow-redirects/1.15.0:
780 | resolution: {integrity: sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==}
781 | engines: {node: '>=4.0'}
782 | peerDependencies:
783 | debug: '*'
784 | peerDependenciesMeta:
785 | debug:
786 | optional: true
787 |
788 | /form-data/4.0.0:
789 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
790 | engines: {node: '>= 6'}
791 | dependencies:
792 | asynckit: 0.4.0
793 | combined-stream: 1.0.8
794 | mime-types: 2.1.35
795 | dev: true
796 |
797 | /fsevents/2.3.2:
798 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
799 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
800 | os: [darwin]
801 | requiresBuild: true
802 | dev: true
803 | optional: true
804 |
805 | /function-bind/1.1.1:
806 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
807 |
808 | /gensync/1.0.0-beta.2:
809 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
810 | engines: {node: '>=6.9.0'}
811 | dev: true
812 |
813 | /get-intrinsic/1.1.1:
814 | resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==}
815 | dependencies:
816 | function-bind: 1.1.1
817 | has: 1.0.3
818 | has-symbols: 1.0.3
819 |
820 | /glob-parent/5.1.2:
821 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
822 | engines: {node: '>= 6'}
823 | dependencies:
824 | is-glob: 4.0.3
825 | dev: true
826 |
827 | /globals/11.12.0:
828 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
829 | engines: {node: '>=4'}
830 | dev: true
831 |
832 | /has-flag/3.0.0:
833 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
834 | engines: {node: '>=4'}
835 | dev: true
836 |
837 | /has-symbols/1.0.3:
838 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
839 | engines: {node: '>= 0.4'}
840 |
841 | /has/1.0.3:
842 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
843 | engines: {node: '>= 0.4.0'}
844 | dependencies:
845 | function-bind: 1.1.1
846 |
847 | /is-core-module/2.9.0:
848 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==}
849 | dependencies:
850 | has: 1.0.3
851 | dev: true
852 |
853 | /is-extglob/2.1.1:
854 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
855 | engines: {node: '>=0.10.0'}
856 | dev: true
857 |
858 | /is-glob/4.0.3:
859 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
860 | engines: {node: '>=0.10.0'}
861 | dependencies:
862 | is-extglob: 2.1.1
863 | dev: true
864 |
865 | /is-number/7.0.0:
866 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
867 | engines: {node: '>=0.12.0'}
868 | dev: true
869 |
870 | /js-tokens/4.0.0:
871 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
872 | dev: true
873 |
874 | /jsesc/2.5.2:
875 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
876 | engines: {node: '>=4'}
877 | hasBin: true
878 | dev: true
879 |
880 | /json5/2.2.1:
881 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==}
882 | engines: {node: '>=6'}
883 | hasBin: true
884 | dev: true
885 |
886 | /lodash.isequal/4.5.0:
887 | resolution: {integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA=}
888 | dev: true
889 |
890 | /loose-envify/1.4.0:
891 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
892 | hasBin: true
893 | dependencies:
894 | js-tokens: 4.0.0
895 | dev: true
896 |
897 | /merge2/1.4.1:
898 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
899 | engines: {node: '>= 8'}
900 | dev: true
901 |
902 | /micromatch/4.0.5:
903 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
904 | engines: {node: '>=8.6'}
905 | dependencies:
906 | braces: 3.0.2
907 | picomatch: 2.3.1
908 | dev: true
909 |
910 | /mime-db/1.52.0:
911 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
912 | engines: {node: '>= 0.6'}
913 | dev: true
914 |
915 | /mime-types/2.1.35:
916 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
917 | engines: {node: '>= 0.6'}
918 | dependencies:
919 | mime-db: 1.52.0
920 | dev: true
921 |
922 | /ms/2.1.2:
923 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
924 | dev: true
925 |
926 | /nanoid/3.3.4:
927 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
928 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
929 | hasBin: true
930 | dev: true
931 |
932 | /node-releases/2.0.4:
933 | resolution: {integrity: sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==}
934 | dev: true
935 |
936 | /nprogress/0.2.0:
937 | resolution: {integrity: sha1-y480xTIT2JVyP8urkH6UIq28r7E=}
938 | dev: true
939 |
940 | /object-inspect/1.12.0:
941 | resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==}
942 |
943 | /path-parse/1.0.7:
944 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
945 | dev: true
946 |
947 | /picocolors/1.0.0:
948 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
949 | dev: true
950 |
951 | /picomatch/2.3.1:
952 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
953 | engines: {node: '>=8.6'}
954 | dev: true
955 |
956 | /postcss/8.4.14:
957 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
958 | engines: {node: ^10 || ^12 || >=14}
959 | dependencies:
960 | nanoid: 3.3.4
961 | picocolors: 1.0.0
962 | source-map-js: 1.0.2
963 | dev: true
964 |
965 | /qs/6.10.3:
966 | resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
967 | engines: {node: '>=0.6'}
968 | dependencies:
969 | side-channel: 1.0.4
970 |
971 | /queue-microtask/1.2.3:
972 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
973 | dev: true
974 |
975 | /react-dom/18.2.0_react@18.2.0:
976 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
977 | peerDependencies:
978 | react: ^18.2.0
979 | dependencies:
980 | loose-envify: 1.4.0
981 | react: 18.2.0
982 | scheduler: 0.23.0
983 | dev: true
984 |
985 | /react-refresh/0.13.0:
986 | resolution: {integrity: sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==}
987 | engines: {node: '>=0.10.0'}
988 | dev: true
989 |
990 | /react/18.2.0:
991 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
992 | engines: {node: '>=0.10.0'}
993 | dependencies:
994 | loose-envify: 1.4.0
995 | dev: true
996 |
997 | /resolve/1.22.1:
998 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
999 | hasBin: true
1000 | dependencies:
1001 | is-core-module: 2.9.0
1002 | path-parse: 1.0.7
1003 | supports-preserve-symlinks-flag: 1.0.0
1004 | dev: true
1005 |
1006 | /reusify/1.0.4:
1007 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1008 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1009 | dev: true
1010 |
1011 | /rollup/2.75.7:
1012 | resolution: {integrity: sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==}
1013 | engines: {node: '>=10.0.0'}
1014 | hasBin: true
1015 | optionalDependencies:
1016 | fsevents: 2.3.2
1017 | dev: true
1018 |
1019 | /run-parallel/1.2.0:
1020 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1021 | dependencies:
1022 | queue-microtask: 1.2.3
1023 | dev: true
1024 |
1025 | /safe-buffer/5.1.2:
1026 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
1027 | dev: true
1028 |
1029 | /scheduler/0.23.0:
1030 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
1031 | dependencies:
1032 | loose-envify: 1.4.0
1033 | dev: true
1034 |
1035 | /semver/6.3.0:
1036 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
1037 | hasBin: true
1038 | dev: true
1039 |
1040 | /side-channel/1.0.4:
1041 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
1042 | dependencies:
1043 | call-bind: 1.0.2
1044 | get-intrinsic: 1.1.1
1045 | object-inspect: 1.12.0
1046 |
1047 | /source-map-js/1.0.2:
1048 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
1049 | engines: {node: '>=0.10.0'}
1050 | dev: true
1051 |
1052 | /supports-color/5.5.0:
1053 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1054 | engines: {node: '>=4'}
1055 | dependencies:
1056 | has-flag: 3.0.0
1057 | dev: true
1058 |
1059 | /supports-preserve-symlinks-flag/1.0.0:
1060 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1061 | engines: {node: '>= 0.4'}
1062 | dev: true
1063 |
1064 | /to-fast-properties/2.0.0:
1065 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
1066 | engines: {node: '>=4'}
1067 | dev: true
1068 |
1069 | /to-regex-range/5.0.1:
1070 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1071 | engines: {node: '>=8.0'}
1072 | dependencies:
1073 | is-number: 7.0.0
1074 | dev: true
1075 |
1076 | /vite-plugin-ruby/3.0.12_vite@3.0.0-beta.5:
1077 | resolution: {integrity: sha512-QosYDK6qOV1UeeFXlcH+A4pyoIs2lU9R2gWm+AJZ6gZ2yiiiLShYF6juYV8GeDsaXcOfVbPetkuPfnQCzE4mPQ==}
1078 | peerDependencies:
1079 | vite: '>=2.5.0'
1080 | dependencies:
1081 | debug: 4.3.4
1082 | fast-glob: 3.2.11
1083 | vite: 3.0.0-beta.5
1084 | transitivePeerDependencies:
1085 | - supports-color
1086 | dev: true
1087 |
1088 | /vite/3.0.0-beta.5:
1089 | resolution: {integrity: sha512-SfesZuCME4fEmLy4hgsJAg55HRiTgDhH3oPM44XePrdKP5FqYvDkzpSWl6ldDOJYTskKWafGyyuYfXoxodv40Q==}
1090 | engines: {node: '>=14.18.0'}
1091 | hasBin: true
1092 | peerDependencies:
1093 | less: '*'
1094 | sass: '*'
1095 | stylus: '*'
1096 | terser: ^5.4.0
1097 | peerDependenciesMeta:
1098 | less:
1099 | optional: true
1100 | sass:
1101 | optional: true
1102 | stylus:
1103 | optional: true
1104 | terser:
1105 | optional: true
1106 | dependencies:
1107 | esbuild: 0.14.48
1108 | postcss: 8.4.14
1109 | resolve: 1.22.1
1110 | rollup: 2.75.7
1111 | optionalDependencies:
1112 | fsevents: 2.3.2
1113 | dev: true
1114 |
--------------------------------------------------------------------------------
/public/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The page you were looking for doesn't exist (404)
5 |
6 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
The page you were looking for doesn't exist.
62 |
You may have mistyped the address or the page may have moved.
63 |
64 |
If you are the application owner check the logs for more information.
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/public/422.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The change you wanted was rejected (422)
5 |
6 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
The change you wanted was rejected.
62 |
Maybe you tried to change something you didn't have access to.
63 |
64 |
If you are the application owner check the logs for more information.
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/public/500.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | We're sorry, but something went wrong (500)
5 |
6 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
We're sorry, but something went wrong.
62 |
63 |
If you are the application owner check the logs for more information.
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/public/apple-touch-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/public/apple-touch-icon-precomposed.png
--------------------------------------------------------------------------------
/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/public/favicon.ico
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
2 |
--------------------------------------------------------------------------------
/public/ssr/ssr.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __defProp = Object.defineProperty;
3 | var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4 | var __hasOwnProp = Object.prototype.hasOwnProperty;
5 | var __propIsEnum = Object.prototype.propertyIsEnumerable;
6 | var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7 | var __spreadValues = (a, b) => {
8 | for (var prop in b || (b = {}))
9 | if (__hasOwnProp.call(b, prop))
10 | __defNormalProp(a, prop, b[prop]);
11 | if (__getOwnPropSymbols)
12 | for (var prop of __getOwnPropSymbols(b)) {
13 | if (__propIsEnum.call(b, prop))
14 | __defNormalProp(a, prop, b[prop]);
15 | }
16 | return a;
17 | };
18 | var jsxRuntime = require("react/jsx-runtime");
19 | var ReactDOMServer = require("react-dom/server");
20 | var inertiaReact = require("@inertiajs/inertia-react");
21 | var createServer = require("@inertiajs/server");
22 | function _interopDefaultLegacy(e) {
23 | return e && typeof e === "object" && "default" in e ? e : { "default": e };
24 | }
25 | var ReactDOMServer__default = /* @__PURE__ */ _interopDefaultLegacy(ReactDOMServer);
26 | var createServer__default = /* @__PURE__ */ _interopDefaultLegacy(createServer);
27 | function Dashboard({
28 | name
29 | }) {
30 | return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
31 | children: [/* @__PURE__ */ jsxRuntime.jsxs("h1", {
32 | className: "text-3xl font-bold leading-tight text-gray-900 mb-4",
33 | children: ["Hello ", name, "!"]
34 | }), /* @__PURE__ */ jsxRuntime.jsxs("div", {
35 | className: "my-3",
36 | children: ["This is a minimal installation of ", /* @__PURE__ */ jsxRuntime.jsx("a", {
37 | className: "font-bold hover:underline",
38 | href: "https://github.com/rails/rails",
39 | target: "_blank",
40 | children: "Ruby on Rails"
41 | }), ",", /* @__PURE__ */ jsxRuntime.jsx("a", {
42 | className: "font-bold hover:underline",
43 | href: "https://github.com/vitejs/vite",
44 | target: "_blank",
45 | children: "Vite"
46 | }), ", and ", /* @__PURE__ */ jsxRuntime.jsx("a", {
47 | className: "font-bold hover:underline",
48 | href: "https://github.com/inertiajs/inertia-rails",
49 | target: "_blank",
50 | children: "InertiaJS"
51 | }), ". (It also uses the ", /* @__PURE__ */ jsxRuntime.jsx("a", {
52 | className: "font-bold hover:underline",
53 | href: "https://github.com/tailwindlabs/tailwindcss",
54 | target: "_blank",
55 | children: "Tailwind Play CDN"
56 | }), " for some simple styling)."]
57 | }), /* @__PURE__ */ jsxRuntime.jsx("div", {
58 | className: "my-3",
59 | children: "It's also running SSR powered by Vite."
60 | }), /* @__PURE__ */ jsxRuntime.jsxs("div", {
61 | className: "my-3",
62 | children: ["Feel free to fork this and use it for your next spike, mvp, or entire application. If you'd like to take a look around to see how everything is working, I'd recommend checking out the following files:", /* @__PURE__ */ jsxRuntime.jsxs("ul", {
63 | className: "m-4 list-disc",
64 | children: [/* @__PURE__ */ jsxRuntime.jsxs("li", {
65 | children: [/* @__PURE__ */ jsxRuntime.jsx("pre", {
66 | className: "inline bg-slate-100",
67 | children: "app/frontend/pages/Dashboard.jsx"
68 | }), ": The React component containing what you're reading now!"]
69 | }), /* @__PURE__ */ jsxRuntime.jsxs("li", {
70 | children: [/* @__PURE__ */ jsxRuntime.jsx("pre", {
71 | className: "inline bg-slate-100",
72 | children: "app/controllers/dashboard_controller.rb"
73 | }), ": The controller that handled rendering this page"]
74 | }), /* @__PURE__ */ jsxRuntime.jsxs("li", {
75 | children: [/* @__PURE__ */ jsxRuntime.jsx("pre", {
76 | className: "inline bg-slate-100",
77 | children: "app/frontend/components/Layout.jsx"
78 | }), `: The React component providing the "magic" layout similar to Rails's application layout`]
79 | }), /* @__PURE__ */ jsxRuntime.jsxs("li", {
80 | children: [/* @__PURE__ */ jsxRuntime.jsx("pre", {
81 | className: "inline bg-slate-100",
82 | children: "app/frontend/entrypoints/application.jsx"
83 | }), ": The Vite entrypoint that handles initializing InertiaJS"]
84 | })]
85 | })]
86 | })]
87 | });
88 | }
89 | (function dedupeRequire(dedupe) {
90 | const Module = require("module");
91 | const resolveFilename = Module._resolveFilename;
92 | Module._resolveFilename = function(request, parent, isMain, options) {
93 | if (request[0] !== "." && request[0] !== "/") {
94 | const parts = request.split("/");
95 | const pkgName = parts[0][0] === "@" ? parts[0] + "/" + parts[1] : parts[0];
96 | if (dedupe.includes(pkgName)) {
97 | parent = module;
98 | }
99 | }
100 | return resolveFilename(request, parent, isMain, options);
101 | };
102 | })(["react", "react-dom"]);
103 | const pages = { "../pages/Dashboard.jsx": Dashboard };
104 | createServer__default["default"]((page) => inertiaReact.createInertiaApp({
105 | page,
106 | render: ReactDOMServer__default["default"].renderToString,
107 | resolve: (name) => pages[`../pages/${name}.jsx`],
108 | setup: ({
109 | App,
110 | props
111 | }) => /* @__PURE__ */ jsxRuntime.jsx(App, __spreadValues({}, props))
112 | }));
113 | //# sourceMappingURL=ssr.js.map
114 |
--------------------------------------------------------------------------------
/public/ssr/ssr.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"ssr.js","sources":["../../app/frontend/pages/Dashboard.jsx","../../app/frontend/ssr/ssr.jsx"],"sourcesContent":["export default function Dashboard({name}) {\n return (\n <>\n Hello {name}! \n \n \n \n It's also running SSR powered by Vite.\n
\n \n Feel free to fork this and use it for your next spike, mvp, or entire application. If you'd like to take a look around to see how everything is working,\n I'd recommend checking out the following files:\n\n
\n app/frontend/pages/Dashboard.jsx : The React component containing what you're reading now! \n app/controllers/dashboard_controller.rb : The controller that handled rendering this page \n app/frontend/components/Layout.jsx : The React component providing the \"magic\" layout similar to Rails's application layout \n app/frontend/entrypoints/application.jsx : The Vite entrypoint that handles initializing InertiaJS \n \n
\n >\n )\n}\n","import ReactDOMServer from 'react-dom/server'\nimport { createInertiaApp } from '@inertiajs/inertia-react'\nimport createServer from '@inertiajs/server'\n\nconst pages = import.meta.globEagerDefault('../pages/*.jsx')\n\ncreateServer((page) => createInertiaApp({\n page,\n render: ReactDOMServer.renderToString,\n resolve: name => pages[`../pages/${name}.jsx`],\n setup: ({ App, props }) => ,\n}))\n"],"names":["name","_Fragment","_jsxs","_jsx","pages","import","createServer","page","createInertiaApp","render","ReactDOMServer","renderToString","resolve","setup","App","props"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAkC,mBAAA;AAAA,EAACA;AAAAA,GAAO;AACxC,yCACEC,WAAAA,UAAA;AAAA,IAAA,UACE,CAAAC,2BAAA,KAAA,MAAA;AAAA,MAAI,WAAU;AAAA,MAAd,UAAA,CAAA,UAA2EF,MAA3E,GAAA;AAAA,IAAA,CAAA,GAEAE,2BAAA,KAAA,OAAA;AAAA,MAAK,WAAU;AAAA,MAAf,UACoC,CAAA,sCAAAC,2BAAA,IAAA,KAAA;AAAA,QAAG,WAAU;AAAA,QAA4B,MAAK;AAAA,QAAiC,QAAO;AAAA,QAAtF,UAAA;AAAA,MAAA,CAAA,GAClC,KAAAA,2BAAA,IAAA,KAAA;AAAA,QAAG,WAAU;AAAA,QAA4B,MAAK;AAAA,QAAiC,QAAO;AAAA,QAAtF,UAAA;AAAA,MAAA,CAAA,GACI,UAAAA,2BAAA,IAAA,KAAA;AAAA,QAAG,WAAU;AAAA,QAA4B,MAAK;AAAA,QAA6C,QAAO;AAAA,QAAlG,UAAA;AAAA,MAAA,CAAA,GACc,wBAAAA,2BAAA,IAAA,KAAA;AAAA,QAAG,WAAU;AAAA,QAA4B,MAAK;AAAA,QAA8C,QAAO;AAAA,QAAnG,UAAA;AAAA,MAJpB,CAAA,GAAA,4BAAA;AAAA,IAAA,CAAA,GAMAA,2BAAA,IAAA,OAAA;AAAA,MAAK,WAAU;AAAA,MAAf,UAAA;AAAA,IAAA,CAAA,GAGAD,2BAAA,KAAA,OAAA;AAAA,MAAK,WAAU;AAAA,MAAf,UAIE,CAAA,4MAAAA,2BAAA,KAAA,MAAA;AAAA,QAAI,WAAU;AAAA,QAAd,UACE,CAAAA,2BAAA,KAAA,MAAA;AAAA,UAAA,UAAI,CAAAC,2BAAA,IAAA,OAAA;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA;AAAA,UAAJ,CAAA,GAAA,2DAAA;AAAA,QAAA,CAAA,GACAD,2BAAA,KAAA,MAAA;AAAA,UAAA,UAAI,CAAAC,2BAAA,IAAA,OAAA;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA;AAAA,UAAJ,CAAA,GAAA,mDAAA;AAAA,QAAA,CAAA,GACAD,2BAAA,KAAA,MAAA;AAAA,UAAA,UAAI,CAAAC,2BAAA,IAAA,OAAA;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA;AAAA,UAAA,CAAJ,GAAA,0FAAA;AAAA,QAAA,CAAA,GACAD,2BAAA,KAAA,MAAA;AAAA,UAAA,UAAI,CAAAC,2BAAA,IAAA,OAAA;AAAA,YAAK,WAAU;AAAA,YAAf,UAAA;AAAA,UAAJ,CAAA,GAAA,2DAAA;AAAA,QAAA,CAJF,CAAA;AAAA,MAAA,CAJF,CAAA;AAAA,IAAA,CAZF,CAAA;AAAA,EAAA,CADF;AA0BD;;;;;;;;;;;;;;;ACvBD,MAAMC,QAAQC;AAEdC,sBAAAA,WAAcC,UAASC,8BAAiB;AAAA,EACtCD;AAAAA,EACAE,QAAQC,wBAAeC,WAAAA;AAAAA,EACvBC,SAASZ,CAAQI,SAAAA,MAAO,YAAWJ;AAAAA,EACnCa,OAAO,CAAC;AAAA,IAAEC;AAAAA,IAAKC;AAAAA,uCAAa,KAAQA,mBAAAA,MAAT;AAJW,CAAD,CAA3B;"}
--------------------------------------------------------------------------------
/test/controllers/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/test/controllers/.keep
--------------------------------------------------------------------------------
/test/fixtures/files/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/test/fixtures/files/.keep
--------------------------------------------------------------------------------
/test/helpers/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/test/helpers/.keep
--------------------------------------------------------------------------------
/test/integration/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/test/integration/.keep
--------------------------------------------------------------------------------
/test/models/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/test/models/.keep
--------------------------------------------------------------------------------
/test/test_helper.rb:
--------------------------------------------------------------------------------
1 | ENV["RAILS_ENV"] ||= "test"
2 | require_relative "../config/environment"
3 | require "rails/test_help"
4 |
5 | class ActiveSupport::TestCase
6 | # Run tests in parallel with specified workers
7 | parallelize(workers: :number_of_processors)
8 |
9 | # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
10 | fixtures :all
11 |
12 | # Add more helper methods to be used by all tests here...
13 | end
14 |
--------------------------------------------------------------------------------
/tmp/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/tmp/.keep
--------------------------------------------------------------------------------
/tmp/pids/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/tmp/pids/.keep
--------------------------------------------------------------------------------
/vendor/.keep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElMassimo/inertia-rails-ssr-template/5b662617d1d7a410ffec8dafa78bb907eef79145/vendor/.keep
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import RubyPlugin from 'vite-plugin-ruby'
3 | import ReactPlugin from '@vitejs/plugin-react'
4 |
5 | export default defineConfig({
6 | plugins: [
7 | RubyPlugin(),
8 | ReactPlugin(),
9 | ],
10 | })
11 |
--------------------------------------------------------------------------------