inertia_rails 3.3.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/README.md +6 -7
- data/lib/generators/inertia/controller/controller_generator.rb +18 -0
- data/lib/generators/inertia/controller/templates/controller.rb.tt +10 -0
- data/lib/generators/inertia/install/frameworks.yml +98 -0
- data/lib/generators/inertia/install/helpers.rb +51 -0
- data/lib/generators/inertia/install/install_generator.rb +291 -0
- data/lib/generators/inertia/install/js_package_manager.rb +50 -0
- data/lib/generators/inertia/install/templates/assets/inertia.svg +1 -0
- data/lib/generators/inertia/install/templates/assets/react.svg +1 -0
- data/lib/generators/inertia/install/templates/assets/svelte.svg +1 -0
- data/lib/generators/inertia/install/templates/assets/vite_ruby.svg +1 -0
- data/lib/generators/inertia/install/templates/assets/vue.svg +1 -0
- data/lib/generators/{inertia_rails/install → inertia/install/templates}/controller.rb +3 -1
- data/lib/generators/inertia/install/templates/dev +23 -0
- data/lib/generators/inertia/install/templates/initializer.rb +6 -0
- data/lib/generators/inertia/install/templates/react/InertiaExample.jsx +60 -0
- data/lib/generators/inertia/install/templates/react/InertiaExample.module.css +80 -0
- data/lib/generators/inertia/install/templates/react/InertiaExample.tsx +60 -0
- data/lib/generators/inertia/install/templates/react/inertia.js +45 -0
- data/lib/generators/inertia/install/templates/react/inertia.ts +51 -0
- data/lib/generators/inertia/install/templates/react/tsconfig.app.json +27 -0
- data/lib/generators/inertia/install/templates/react/tsconfig.json +11 -0
- data/lib/generators/inertia/install/templates/react/tsconfig.node.json +13 -0
- data/lib/generators/inertia/install/templates/react/vite-env.d.ts +1 -0
- data/lib/generators/inertia/install/templates/svelte/InertiaExample.svelte +112 -0
- data/lib/generators/inertia/install/templates/svelte/InertiaExample.ts.svelte +112 -0
- data/lib/generators/inertia/install/templates/svelte/inertia.js +44 -0
- data/lib/generators/inertia/install/templates/svelte/inertia.ts.tt +45 -0
- data/lib/generators/inertia/install/templates/svelte/svelte.config.js +7 -0
- data/lib/generators/inertia/install/templates/svelte/tsconfig.json +21 -0
- data/lib/generators/inertia/install/templates/svelte/tsconfig.node.json +12 -0
- data/lib/generators/inertia/install/templates/svelte/vite-env.d.ts +2 -0
- data/lib/generators/inertia/install/templates/svelte4/InertiaExample.svelte +116 -0
- data/lib/generators/inertia/install/templates/svelte4/InertiaExample.ts.svelte +116 -0
- data/lib/generators/inertia/install/templates/svelte4/inertia.js +43 -0
- data/lib/generators/inertia/install/templates/svelte4/inertia.ts.tt +44 -0
- data/lib/generators/inertia/install/templates/svelte4/svelte.config.js +7 -0
- data/lib/generators/inertia/install/templates/svelte4/tsconfig.json +21 -0
- data/lib/generators/inertia/install/templates/svelte4/tsconfig.node.json +12 -0
- data/lib/generators/inertia/install/templates/svelte4/vite-env.d.ts +2 -0
- data/lib/generators/inertia/install/templates/tailwind/application.css +13 -0
- data/lib/generators/inertia/install/templates/tailwind/postcss.config.js +6 -0
- data/lib/generators/inertia/install/templates/tailwind/tailwind.config.js.tt +18 -0
- data/lib/generators/inertia/install/templates/vue/InertiaExample.ts.vue +117 -0
- data/lib/generators/inertia/install/templates/vue/InertiaExample.vue +117 -0
- data/lib/generators/inertia/install/templates/vue/inertia.js +35 -0
- data/lib/generators/inertia/install/templates/vue/inertia.ts +35 -0
- data/lib/generators/inertia/install/templates/vue/tsconfig.app.json +24 -0
- data/lib/generators/inertia/install/templates/vue/tsconfig.json +11 -0
- data/lib/generators/inertia/install/templates/vue/tsconfig.node.json +22 -0
- data/lib/generators/inertia/install/templates/vue/vite-env.d.ts +1 -0
- data/lib/generators/inertia/scaffold/scaffold_generator.rb +16 -0
- data/lib/generators/inertia/scaffold_controller/scaffold_controller_generator.rb +60 -0
- data/lib/generators/inertia/scaffold_controller/templates/controller.rb.tt +100 -0
- data/lib/generators/inertia_templates/controller/controller_generator.rb +12 -0
- data/lib/generators/inertia_templates/controller/templates/react/view.jsx.tt +8 -0
- data/lib/generators/inertia_templates/controller/templates/react/view.tsx.tt +8 -0
- data/lib/generators/inertia_templates/controller/templates/svelte/view.svelte.tt +2 -0
- data/lib/generators/inertia_templates/controller/templates/svelte4/view.svelte.tt +2 -0
- data/lib/generators/inertia_templates/controller/templates/vue/view.vue.tt +4 -0
- data/lib/generators/inertia_templates/scaffold/scaffold_generator.rb +12 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/Edit.jsx.tt +35 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/Edit.tsx.tt +40 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/Form.jsx.tt +111 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/Form.tsx.tt +130 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/Index.jsx.tt +26 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/Index.tsx.tt +32 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/New.jsx.tt +27 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/New.tsx.tt +32 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/One.jsx.tt +26 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/One.tsx.tt +32 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/Show.jsx.tt +32 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/Show.tsx.tt +38 -0
- data/lib/generators/inertia_templates/scaffold/templates/react/types.ts.tt +19 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/Edit.svelte.tt +36 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/Edit.ts.svelte.tt +37 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/Form.svelte.tt +97 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/Form.ts.svelte.tt +102 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/Index.svelte.tt +35 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/Index.ts.svelte.tt +39 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/New.svelte.tt +29 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/New.ts.svelte.tt +30 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/One.svelte.tt +28 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/One.ts.svelte.tt +30 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/Show.svelte.tt +35 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/Show.ts.svelte.tt +39 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte/types.ts.tt +19 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/Edit.svelte.tt +37 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/Edit.ts.svelte.tt +38 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/Form.svelte.tt +96 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/Form.ts.svelte.tt +106 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/Index.svelte.tt +36 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/Index.ts.svelte.tt +37 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/New.svelte.tt +30 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/New.ts.svelte.tt +31 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/One.svelte.tt +28 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/One.ts.svelte.tt +30 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/Show.svelte.tt +39 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/Show.ts.svelte.tt +40 -0
- data/lib/generators/inertia_templates/scaffold/templates/svelte4/types.ts.tt +19 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/Edit.ts.vue.tt +37 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/Edit.vue.tt +36 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/Form.ts.vue.tt +101 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/Form.vue.tt +94 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/Index.ts.vue.tt +35 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/Index.vue.tt +31 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/New.ts.vue.tt +30 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/New.vue.tt +29 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/One.ts.vue.tt +28 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/One.vue.tt +26 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/Show.ts.vue.tt +41 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/Show.vue.tt +37 -0
- data/lib/generators/inertia_templates/scaffold/templates/vue/types.ts.tt +19 -0
- data/lib/generators/inertia_tw_templates/controller/controller_generator.rb +12 -0
- data/lib/generators/inertia_tw_templates/controller/templates/react/view.jsx.tt +8 -0
- data/lib/generators/inertia_tw_templates/controller/templates/react/view.tsx.tt +8 -0
- data/lib/generators/inertia_tw_templates/controller/templates/svelte/view.svelte.tt +2 -0
- data/lib/generators/inertia_tw_templates/controller/templates/svelte4/view.svelte.tt +2 -0
- data/lib/generators/inertia_tw_templates/controller/templates/vue/view.vue.tt +4 -0
- data/lib/generators/inertia_tw_templates/scaffold/scaffold_generator.rb +12 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/Edit.jsx.tt +42 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/Edit.tsx.tt +47 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/Form.jsx.tt +122 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/Form.tsx.tt +142 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/Index.jsx.tt +43 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/Index.tsx.tt +49 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/New.jsx.tt +30 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/New.tsx.tt +35 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/One.jsx.tt +26 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/One.tsx.tt +32 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/Show.jsx.tt +47 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/Show.tsx.tt +53 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/react/types.ts.tt +19 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Edit.svelte.tt +44 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Edit.ts.svelte.tt +45 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Form.svelte.tt +118 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Form.ts.svelte.tt +123 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Index.svelte.tt +42 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Index.ts.svelte.tt +46 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/New.svelte.tt +32 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/New.ts.svelte.tt +33 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/One.svelte.tt +28 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/One.ts.svelte.tt +30 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Show.svelte.tt +50 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/Show.ts.svelte.tt +54 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte/types.ts.tt +19 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Edit.svelte.tt +45 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Edit.ts.svelte.tt +46 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Form.svelte.tt +120 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Form.ts.svelte.tt +130 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Index.svelte.tt +43 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Index.ts.svelte.tt +44 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/New.svelte.tt +33 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/New.ts.svelte.tt +34 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/One.svelte.tt +28 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/One.ts.svelte.tt +30 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Show.svelte.tt +51 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/Show.ts.svelte.tt +52 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/svelte4/types.ts.tt +19 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/Edit.ts.vue.tt +45 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/Edit.vue.tt +44 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/Form.ts.vue.tt +134 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/Form.vue.tt +127 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/Index.ts.vue.tt +47 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/Index.vue.tt +43 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/New.ts.vue.tt +33 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/New.vue.tt +32 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/One.ts.vue.tt +28 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/One.vue.tt +26 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/Show.ts.vue.tt +53 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/Show.vue.tt +49 -0
- data/lib/generators/inertia_tw_templates/scaffold/templates/vue/types.ts.tt +19 -0
- data/lib/inertia_rails/action_filter.rb +27 -0
- data/lib/inertia_rails/always_prop.rb +6 -0
- data/lib/inertia_rails/base_prop.rb +14 -0
- data/lib/inertia_rails/configuration.rb +1 -1
- data/lib/inertia_rails/controller.rb +70 -15
- data/lib/inertia_rails/generators/controller_template_base.rb +63 -0
- data/lib/inertia_rails/generators/helper.rb +139 -0
- data/lib/inertia_rails/generators/scaffold_template_base.rb +45 -0
- data/lib/inertia_rails/inertia_rails.rb +18 -12
- data/lib/inertia_rails/lazy_prop.rb +20 -0
- data/lib/inertia_rails/renderer.rb +71 -17
- data/lib/inertia_rails/version.rb +1 -1
- data/lib/patches/better_errors.rb +10 -8
- data/lib/patches/debug_exceptions/patch-5-0.rb +7 -3
- data/lib/patches/debug_exceptions/patch-5-1.rb +7 -3
- data/lib/patches/mapper.rb +9 -5
- data/lib/patches/request.rb +10 -6
- metadata +192 -126
- data/.github/workflows/push.yml +0 -33
- data/.gitignore +0 -25
- data/.rspec +0 -3
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -7
- data/Rakefile +0 -6
- data/bin/console +0 -13
- data/bin/setup +0 -8
- data/inertia_rails.gemspec +0 -37
- data/lib/generators/inertia_rails/install/react/InertiaExample.jsx +0 -9
- data/lib/generators/inertia_rails/install/react/inertia.jsx +0 -17
- data/lib/generators/inertia_rails/install/svelte/InertiaExample.svelte +0 -11
- data/lib/generators/inertia_rails/install/svelte/inertia.js +0 -14
- data/lib/generators/inertia_rails/install/vue/InertiaExample.vue +0 -11
- data/lib/generators/inertia_rails/install/vue/inertia.js +0 -20
- data/lib/generators/inertia_rails/install_generator.rb +0 -84
- data/lib/inertia_rails/lazy.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef66baa0e1a57eca72a52421858b7d0f1cc27e6bd0bbf09f53d2c6440b677b94
|
4
|
+
data.tar.gz: 832a854fc9e749a365d3745521d256834eb778693e256cdda2321253eda47332
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1dc4a22fe2d2fd31fc1284030f2cc64f292cdc1224b15e37e2370d4f5b081c6240f6ed3340f827ccb9c0ad0b0022acdd51001ca3585c404ca1033b93b2503666
|
7
|
+
data.tar.gz: 9becf43df35016ef9659f0055439b599c88d0a422eec1d6728bbf22b2393cb16bd5b177b697044651a9c79c51be332d5a9564969b6773f0815fada77d6408fae
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,27 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [3.5.0] - 2024-11-29
|
8
|
+
|
9
|
+
* Add Algolia search for docs (#151, @skryukov)
|
10
|
+
* Add support for Always props (#152, @skryukov)
|
11
|
+
* Add support for :except in partial reloads (#152, @skryukov)
|
12
|
+
* CI fixes (#156, @bknoles)
|
13
|
+
* Support dot notation for :only partial reloads (#163, @bknoles)
|
14
|
+
* Avoid some monkey patching (#164, @adrianpacala)
|
15
|
+
* Upstream generators from inertia_rails-contrib (#158, @skryukov)
|
16
|
+
* Raise a deprecation warning instead of an exception if you pass a non-hashable to inertia errors (#168, @skryukov)
|
17
|
+
|
18
|
+
## [3.4.0] - 2024-11-02
|
19
|
+
|
20
|
+
* Inertia Rails documentation (@skryukov)
|
21
|
+
* Add specs for config refactor (#139)
|
22
|
+
* New feature: if/unless/only/except options for inertia_share. Enables per-action sharing! (#137, @skryukov)
|
23
|
+
* Bugfix: for inertia errors when using message_pack to serialize cookies. (#143, @BenMorganMY)
|
24
|
+
* Test Rails 7.2 in CI/CD (#145, @skryukov)
|
25
|
+
* Bring redirect behavior in line with Rails 7.0 behavior (#146, @skryukov)
|
26
|
+
* Gemspec cleanup (#149, @skryukov)
|
27
|
+
|
7
28
|
## [3.3.0] - 2024-10-27
|
8
29
|
|
9
30
|
* Refactor Inertia configuration into a controller class method. Thanks @ElMassimo!
|
data/README.md
CHANGED
@@ -13,16 +13,15 @@ Add the `inertia_rails` gem to your Gemfile.
|
|
13
13
|
gem 'inertia_rails'
|
14
14
|
```
|
15
15
|
|
16
|
-
|
16
|
+
Follow the complete [Server-side setup](https://inertia-rails.dev/guide/server-side-setup) in the official documentation.
|
17
17
|
|
18
18
|
### Frontend
|
19
19
|
|
20
|
-
|
21
|
-
the [official docs](https://inertiajs.com/client-side-setup) are specific to Laravel.
|
20
|
+
Follow the [Client-side setup](https://inertia-rails.dev/guide/client-side-setup) guide for detailed configuration steps.
|
22
21
|
|
23
|
-
|
22
|
+
### Example Projects:
|
24
23
|
|
25
|
-
|
24
|
+
Reference these sample implementations:
|
26
25
|
|
27
26
|
- [React/Vite](https://github.com/BrandonShar/inertia-rails-template)
|
28
27
|
- [React/Vite + SSR](https://github.com/ElMassimo/inertia-rails-ssr-template)
|
@@ -103,11 +102,11 @@ end
|
|
103
102
|
|
104
103
|
### Shared Data
|
105
104
|
|
106
|
-
If you have data that you want to be provided as a prop to every component (a common use-case is information about the authenticated user) you can use the `
|
105
|
+
If you have data that you want to be provided as a prop to every component (a common use-case is information about the authenticated user) you can use the `inertia_share` controller method.
|
107
106
|
|
108
107
|
```ruby
|
109
108
|
class EventsController < ApplicationController
|
110
|
-
# share
|
109
|
+
# share synchronously
|
111
110
|
inertia_share app_name: env['app.name']
|
112
111
|
|
113
112
|
# share lazily, evaluated at render time
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators/rails/controller/controller_generator'
|
4
|
+
require 'inertia_rails/generators/helper'
|
5
|
+
|
6
|
+
module Inertia
|
7
|
+
module Generators
|
8
|
+
class ControllerGenerator < Rails::Generators::ControllerGenerator
|
9
|
+
include InertiaRails::Generators::Helper
|
10
|
+
|
11
|
+
source_root File.expand_path('./templates', __dir__)
|
12
|
+
|
13
|
+
remove_hook_for :template_engine
|
14
|
+
|
15
|
+
hook_for :inertia_templates, required: true, default: InertiaRails::Generators::Helper.guess_inertia_template
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% module_namespacing do -%>
|
2
|
+
class <%= class_name %>Controller < <%= parent_class_name.classify %>
|
3
|
+
<% actions.each do |action| -%>
|
4
|
+
def <%= action %>
|
5
|
+
render inertia: '<%= "#{inertia_base_path}/#{action.camelize}" %>'
|
6
|
+
end
|
7
|
+
<%= "\n" unless action == actions.last -%>
|
8
|
+
<% end -%>
|
9
|
+
end
|
10
|
+
<% end -%>
|
@@ -0,0 +1,98 @@
|
|
1
|
+
react:
|
2
|
+
inertia_package: "@inertiajs/react"
|
3
|
+
packages:
|
4
|
+
- "@vitejs/plugin-react"
|
5
|
+
- "react"
|
6
|
+
- "react-dom"
|
7
|
+
packages_ts:
|
8
|
+
- "@types/react"
|
9
|
+
- "@types/react-dom"
|
10
|
+
- "typescript"
|
11
|
+
vite_plugin_import: "import react from '@vitejs/plugin-react'"
|
12
|
+
vite_plugin_call: "react()"
|
13
|
+
copy_files_ts:
|
14
|
+
"InertiaExample.tsx": "%{js_destination_path}/pages/InertiaExample.tsx"
|
15
|
+
"tsconfig.json": "tsconfig.json"
|
16
|
+
"tsconfig.app.json": "tsconfig.app.json"
|
17
|
+
"tsconfig.node.json": "tsconfig.node.json"
|
18
|
+
"vite-env.d.ts": "%{js_destination_path}/vite-env.d.ts"
|
19
|
+
copy_files_js:
|
20
|
+
"InertiaExample.jsx": "%{js_destination_path}/pages/InertiaExample.jsx"
|
21
|
+
copy_files:
|
22
|
+
"InertiaExample.module.css": "%{js_destination_path}/pages/InertiaExample.module.css"
|
23
|
+
"../assets/react.svg": "%{js_destination_path}/assets/react.svg"
|
24
|
+
"../assets/inertia.svg": "%{js_destination_path}/assets/inertia.svg"
|
25
|
+
"../assets/vite_ruby.svg": "%{js_destination_path}/assets/vite_ruby.svg"
|
26
|
+
|
27
|
+
vue:
|
28
|
+
inertia_package: "@inertiajs/vue3"
|
29
|
+
packages:
|
30
|
+
- "vue"
|
31
|
+
- "@vitejs/plugin-vue"
|
32
|
+
packages_ts:
|
33
|
+
- "typescript@~5.6.2"
|
34
|
+
- "vue-tsc"
|
35
|
+
vite_plugin_import: "import vue from '@vitejs/plugin-vue'"
|
36
|
+
vite_plugin_call: "vue()"
|
37
|
+
copy_files:
|
38
|
+
"../assets/vue.svg": "%{js_destination_path}/assets/vue.svg"
|
39
|
+
"../assets/inertia.svg": "%{js_destination_path}/assets/inertia.svg"
|
40
|
+
"../assets/vite_ruby.svg": "%{js_destination_path}/assets/vite_ruby.svg"
|
41
|
+
copy_files_ts:
|
42
|
+
"InertiaExample.ts.vue": "%{js_destination_path}/pages/InertiaExample.vue"
|
43
|
+
"tsconfig.json": "tsconfig.json"
|
44
|
+
"tsconfig.app.json": "tsconfig.app.json"
|
45
|
+
"tsconfig.node.json": "tsconfig.node.json"
|
46
|
+
"vite-env.d.ts": "%{js_destination_path}/vite-env.d.ts"
|
47
|
+
copy_files_js:
|
48
|
+
"InertiaExample.vue": "%{js_destination_path}/pages/InertiaExample.vue"
|
49
|
+
|
50
|
+
svelte4:
|
51
|
+
inertia_package: "@inertiajs/svelte"
|
52
|
+
packages:
|
53
|
+
- "svelte@4"
|
54
|
+
- "@sveltejs/vite-plugin-svelte@3"
|
55
|
+
packages_ts:
|
56
|
+
- "@tsconfig/svelte@4"
|
57
|
+
- "svelte-check"
|
58
|
+
- "typescript"
|
59
|
+
- "tslib"
|
60
|
+
vite_plugin_import: "import { svelte } from '@sveltejs/vite-plugin-svelte'"
|
61
|
+
vite_plugin_call: "svelte()"
|
62
|
+
copy_files_ts:
|
63
|
+
"InertiaExample.ts.svelte": "%{js_destination_path}/pages/InertiaExample.svelte"
|
64
|
+
"tsconfig.json": "tsconfig.json"
|
65
|
+
"tsconfig.node.json": "tsconfig.node.json"
|
66
|
+
"vite-env.d.ts": "%{js_destination_path}/vite-env.d.ts"
|
67
|
+
copy_files_js:
|
68
|
+
"InertiaExample.svelte": "%{js_destination_path}/pages/InertiaExample.svelte"
|
69
|
+
copy_files:
|
70
|
+
"svelte.config.js": "svelte.config.js"
|
71
|
+
"../assets/svelte.svg": "%{js_destination_path}/assets/svelte.svg"
|
72
|
+
"../assets/inertia.svg": "%{js_destination_path}/assets/inertia.svg"
|
73
|
+
"../assets/vite_ruby.svg": "%{js_destination_path}/assets/vite_ruby.svg"
|
74
|
+
|
75
|
+
svelte:
|
76
|
+
inertia_package: "@inertiajs/svelte"
|
77
|
+
packages:
|
78
|
+
- "svelte@5"
|
79
|
+
- "@sveltejs/vite-plugin-svelte@4"
|
80
|
+
packages_ts:
|
81
|
+
- "@tsconfig/svelte@5"
|
82
|
+
- "svelte-check"
|
83
|
+
- "typescript"
|
84
|
+
- "tslib"
|
85
|
+
vite_plugin_import: "import { svelte } from '@sveltejs/vite-plugin-svelte'"
|
86
|
+
vite_plugin_call: "svelte()"
|
87
|
+
copy_files_ts:
|
88
|
+
"InertiaExample.ts.svelte": "%{js_destination_path}/pages/InertiaExample.svelte"
|
89
|
+
"tsconfig.json": "tsconfig.json"
|
90
|
+
"tsconfig.node.json": "tsconfig.node.json"
|
91
|
+
"vite-env.d.ts": "%{js_destination_path}/vite-env.d.ts"
|
92
|
+
copy_files_js:
|
93
|
+
"InertiaExample.svelte": "%{js_destination_path}/pages/InertiaExample.svelte"
|
94
|
+
copy_files:
|
95
|
+
"svelte.config.js": "svelte.config.js"
|
96
|
+
"../assets/svelte.svg": "%{js_destination_path}/assets/svelte.svg"
|
97
|
+
"../assets/inertia.svg": "%{js_destination_path}/assets/inertia.svg"
|
98
|
+
"../assets/vite_ruby.svg": "%{js_destination_path}/assets/vite_ruby.svg"
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Inertia
|
4
|
+
module Generators
|
5
|
+
module Helpers
|
6
|
+
### FS Helpers
|
7
|
+
def js_destination_path
|
8
|
+
return ViteRuby.config.source_code_dir if defined?(ViteRuby)
|
9
|
+
|
10
|
+
if file?('config/vite.json')
|
11
|
+
source_code_dir = JSON.parse(File.read(file_path('config/vite.json'))).dig('all', 'sourceCodeDir')
|
12
|
+
return source_code_dir if source_code_dir
|
13
|
+
end
|
14
|
+
|
15
|
+
'app/frontend'
|
16
|
+
end
|
17
|
+
|
18
|
+
def js_destination_root
|
19
|
+
file_path(js_destination_path)
|
20
|
+
end
|
21
|
+
|
22
|
+
def js_file_path(*relative_path)
|
23
|
+
File.join(js_destination_root, *relative_path)
|
24
|
+
end
|
25
|
+
|
26
|
+
def file?(*relative_path)
|
27
|
+
File.file?(file_path(*relative_path))
|
28
|
+
end
|
29
|
+
|
30
|
+
def file_path(*relative_path)
|
31
|
+
File.join(destination_root, *relative_path)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Interactivity Helpers
|
35
|
+
def ask(*)
|
36
|
+
unless options[:interactive]
|
37
|
+
say_error 'Specify all options when running the generator non-interactively.', :red
|
38
|
+
exit(1)
|
39
|
+
end
|
40
|
+
|
41
|
+
super
|
42
|
+
end
|
43
|
+
|
44
|
+
def yes?(*)
|
45
|
+
return false unless options[:interactive]
|
46
|
+
|
47
|
+
super
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,291 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
require 'rails/generators'
|
5
|
+
require 'rails/generators/base'
|
6
|
+
|
7
|
+
require_relative 'helpers'
|
8
|
+
require_relative 'js_package_manager'
|
9
|
+
|
10
|
+
module Inertia
|
11
|
+
module Generators
|
12
|
+
class InstallGenerator < Rails::Generators::Base
|
13
|
+
include Helpers
|
14
|
+
|
15
|
+
FRAMEWORKS = YAML.load_file(File.expand_path('./frameworks.yml', __dir__))
|
16
|
+
|
17
|
+
source_root File.expand_path('./templates', __dir__)
|
18
|
+
|
19
|
+
class_option :framework, type: :string,
|
20
|
+
desc: 'The framework you want to use with Inertia',
|
21
|
+
enum: FRAMEWORKS.keys,
|
22
|
+
default: nil
|
23
|
+
|
24
|
+
class_option :inertia_version, type: :string, default: 'latest',
|
25
|
+
desc: 'The version of Inertia.js to install'
|
26
|
+
|
27
|
+
class_option :typescript, type: :boolean, default: false,
|
28
|
+
desc: 'Whether to use TypeScript'
|
29
|
+
|
30
|
+
class_option :package_manager, type: :string, default: nil,
|
31
|
+
enum: JSPackageManager.package_managers,
|
32
|
+
desc: "The package manager you want to use to install Inertia's npm packages"
|
33
|
+
|
34
|
+
class_option :interactive, type: :boolean, default: true,
|
35
|
+
desc: 'Whether to prompt for optional installations'
|
36
|
+
|
37
|
+
class_option :tailwind, type: :boolean, default: false,
|
38
|
+
desc: 'Whether to install Tailwind CSS'
|
39
|
+
class_option :vite, type: :boolean, default: false,
|
40
|
+
desc: 'Whether to install Vite Ruby'
|
41
|
+
class_option :example_page, type: :boolean, default: true,
|
42
|
+
desc: 'Whether to add an example Inertia page'
|
43
|
+
|
44
|
+
class_option :verbose, type: :boolean, default: false,
|
45
|
+
desc: 'Run the generator in verbose mode'
|
46
|
+
|
47
|
+
remove_class_option :skip_namespace, :skip_collision_check
|
48
|
+
|
49
|
+
def install
|
50
|
+
say "Installing Inertia's Rails adapter"
|
51
|
+
|
52
|
+
if inertia_resolved_version.version == '0'
|
53
|
+
say_error "Could not find the Inertia.js package version #{options[:inertia_version]}.", :red
|
54
|
+
exit(false)
|
55
|
+
end
|
56
|
+
|
57
|
+
install_vite unless ruby_vite_installed?
|
58
|
+
|
59
|
+
install_typescript if typescript?
|
60
|
+
|
61
|
+
install_tailwind if install_tailwind?
|
62
|
+
|
63
|
+
install_inertia
|
64
|
+
|
65
|
+
install_example_page if options[:example_page]
|
66
|
+
|
67
|
+
say 'Copying bin/dev'
|
68
|
+
copy_file "#{__dir__}/templates/dev", 'bin/dev'
|
69
|
+
chmod 'bin/dev', 0o755, verbose: verbose?
|
70
|
+
|
71
|
+
say "Inertia's Rails adapter successfully installed", :green
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def install_inertia
|
77
|
+
say "Adding Inertia's Rails adapter initializer"
|
78
|
+
template 'initializer.rb', file_path('config/initializers/inertia_rails.rb')
|
79
|
+
|
80
|
+
say 'Installing Inertia npm packages'
|
81
|
+
add_dependencies(*FRAMEWORKS[framework]['packages'])
|
82
|
+
add_dependencies(inertia_package)
|
83
|
+
|
84
|
+
unless File.read(vite_config_path).include?(FRAMEWORKS[framework]['vite_plugin_import'])
|
85
|
+
say "Adding Vite plugin for #{framework}"
|
86
|
+
insert_into_file vite_config_path, "\n #{FRAMEWORKS[framework]['vite_plugin_call']},", after: 'plugins: ['
|
87
|
+
prepend_file vite_config_path, "#{FRAMEWORKS[framework]['vite_plugin_import']}\n"
|
88
|
+
end
|
89
|
+
|
90
|
+
say "Copying #{inertia_entrypoint} entrypoint"
|
91
|
+
template "#{framework}/#{inertia_entrypoint}", js_file_path("entrypoints/#{inertia_entrypoint}")
|
92
|
+
|
93
|
+
if application_layout.exist?
|
94
|
+
say "Adding #{inertia_entrypoint} script tag to the application layout"
|
95
|
+
headers = <<-ERB
|
96
|
+
<%= #{vite_tag} "inertia" %>
|
97
|
+
<%= inertia_ssr_head %>
|
98
|
+
ERB
|
99
|
+
insert_into_file application_layout.to_s, headers, after: "<%= vite_client_tag %>\n"
|
100
|
+
|
101
|
+
if framework == 'react' && !application_layout.read.include?('vite_react_refresh_tag')
|
102
|
+
say 'Adding Vite React Refresh tag to the application layout'
|
103
|
+
insert_into_file application_layout.to_s, "<%= vite_react_refresh_tag %>\n ",
|
104
|
+
before: '<%= vite_client_tag %>'
|
105
|
+
end
|
106
|
+
|
107
|
+
gsub_file application_layout.to_s, /<title>/, '<title inertia>' unless svelte?
|
108
|
+
else
|
109
|
+
say_error 'Could not find the application layout file. Please add the following tags manually:', :red
|
110
|
+
say_error '- <title>...</title>'
|
111
|
+
say_error '+ <title inertia>...</title>'
|
112
|
+
say_error '+ <%= inertia_ssr_head %>'
|
113
|
+
say_error '+ <%= vite_react_refresh_tag %>' if framework == 'react'
|
114
|
+
say_error "+ <%= #{vite_tag} \"inertia\" %>"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def install_typescript
|
119
|
+
say 'Adding TypeScript support'
|
120
|
+
if svelte? && inertia_resolved_version.release < Gem::Version.new('1.3.0')
|
121
|
+
say 'WARNING: @inertiajs/svelte < 1.3.0 does not support TypeScript ' \
|
122
|
+
"(resolved version: #{inertia_resolved_version}).",
|
123
|
+
:yellow
|
124
|
+
say 'Skipping TypeScript support for @inertiajs/svelte', :yellow
|
125
|
+
@typescript = false
|
126
|
+
return
|
127
|
+
end
|
128
|
+
|
129
|
+
add_dependencies(*FRAMEWORKS[framework]['packages_ts'])
|
130
|
+
|
131
|
+
say 'Copying adding scripts to package.json'
|
132
|
+
run 'npm pkg set scripts.check="svelte-check --tsconfig ./tsconfig.json && tsc -p tsconfig.node.json"' if svelte?
|
133
|
+
run 'npm pkg set scripts.check="vue-tsc -p tsconfig.app.json && tsc -p tsconfig.node.json"' if framework == 'vue'
|
134
|
+
run 'npm pkg set scripts.check="tsc -p tsconfig.app.json && tsc -p tsconfig.node.json"' if framework == 'react'
|
135
|
+
end
|
136
|
+
|
137
|
+
def install_example_page
|
138
|
+
say 'Copying example Inertia controller'
|
139
|
+
template 'controller.rb', file_path('app/controllers/inertia_example_controller.rb')
|
140
|
+
|
141
|
+
say 'Adding a route for the example Inertia controller'
|
142
|
+
route "get 'inertia-example', to: 'inertia_example#index'"
|
143
|
+
|
144
|
+
say 'Copying page assets'
|
145
|
+
copy_files = FRAMEWORKS[framework]['copy_files'].merge(
|
146
|
+
FRAMEWORKS[framework]["copy_files_#{typescript? ? 'ts' : 'js'}"]
|
147
|
+
)
|
148
|
+
copy_files.each do |source, destination|
|
149
|
+
template "#{framework}/#{source}", file_path(format(destination, js_destination_path: js_destination_path))
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def install_tailwind
|
154
|
+
say 'Installing Tailwind CSS'
|
155
|
+
add_dependencies(%w[tailwindcss postcss autoprefixer @tailwindcss/forms @tailwindcss/typography
|
156
|
+
@tailwindcss/container-queries])
|
157
|
+
|
158
|
+
template 'tailwind/tailwind.config.js', file_path('tailwind.config.js')
|
159
|
+
copy_file 'tailwind/postcss.config.js', file_path('postcss.config.js')
|
160
|
+
copy_file 'tailwind/application.css', js_file_path('entrypoints/application.css')
|
161
|
+
|
162
|
+
if application_layout.exist?
|
163
|
+
say 'Adding Tailwind CSS to the application layout'
|
164
|
+
insert_into_file application_layout.to_s, "<%= vite_stylesheet_tag \"application\" %>\n ",
|
165
|
+
before: '<%= vite_client_tag %>'
|
166
|
+
else
|
167
|
+
say_error 'Could not find the application layout file. Please add the following tags manually:', :red
|
168
|
+
say_error '+ <%= vite_stylesheet_tag "application" %>' if install_tailwind?
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def install_vite
|
173
|
+
unless install_vite?
|
174
|
+
say_error 'This generator only supports Ruby on Rails with Vite.', :red
|
175
|
+
exit(false)
|
176
|
+
end
|
177
|
+
|
178
|
+
in_root do
|
179
|
+
Bundler.with_original_env do
|
180
|
+
if (capture = run('bundle add vite_rails', capture: !verbose?))
|
181
|
+
say 'Vite Rails gem successfully installed', :green
|
182
|
+
else
|
183
|
+
say capture
|
184
|
+
say_error 'Failed to install Vite Rails gem', :red
|
185
|
+
exit(false)
|
186
|
+
end
|
187
|
+
if (capture = run('bundle exec vite install', capture: !verbose?))
|
188
|
+
say 'Vite Rails successfully installed', :green
|
189
|
+
else
|
190
|
+
say capture
|
191
|
+
say_error 'Failed to install Vite Rails', :red
|
192
|
+
exit(false)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def ruby_vite_installed?
|
199
|
+
return true if package_manager.present? && ruby_vite?
|
200
|
+
|
201
|
+
if !package_manager.present?
|
202
|
+
say_status 'Could not find a package.json file to install Inertia to.', nil
|
203
|
+
elsif gem_installed?('webpacker') || gem_installed?('shakapacker')
|
204
|
+
say 'Webpacker or Shakapacker is installed.', :yellow
|
205
|
+
say 'Vite Ruby can work alongside Webpacker or Shakapacker, but it might cause issues.', :yellow
|
206
|
+
say 'Please see the Vite Ruby documentation for the migration guide:', :yellow
|
207
|
+
say 'https://vite-ruby.netlify.app/guide/migration.html#webpacker-%F0%9F%93%A6', :yellow
|
208
|
+
else
|
209
|
+
say_status 'Could not find a Vite configuration files ' \
|
210
|
+
'(`config/vite.json` & `vite.config.{ts,js,mjs,cjs,mts,cts}`).',
|
211
|
+
nil
|
212
|
+
end
|
213
|
+
false
|
214
|
+
end
|
215
|
+
|
216
|
+
def gem_installed?(name)
|
217
|
+
regex = /^[^#]*gem\s+['"]#{name}['"]/
|
218
|
+
File.read(file_path('Gemfile')).match?(regex)
|
219
|
+
end
|
220
|
+
|
221
|
+
def application_layout
|
222
|
+
@application_layout ||= Pathname.new(file_path('app/views/layouts/application.html.erb'))
|
223
|
+
end
|
224
|
+
|
225
|
+
def ruby_vite?
|
226
|
+
file?('config/vite.json') && vite_config_path
|
227
|
+
end
|
228
|
+
|
229
|
+
def package_manager
|
230
|
+
@package_manager ||= JSPackageManager.new(self)
|
231
|
+
end
|
232
|
+
|
233
|
+
def add_dependencies(*packages)
|
234
|
+
package_manager.add_dependencies(*packages)
|
235
|
+
end
|
236
|
+
|
237
|
+
def vite_config_path
|
238
|
+
@vite_config_path ||= Dir.glob(file_path('vite.config.{ts,js,mjs,cjs,mts,cts}')).first
|
239
|
+
end
|
240
|
+
|
241
|
+
def install_vite?
|
242
|
+
return @install_vite if defined?(@install_vite)
|
243
|
+
|
244
|
+
@install_vite = options[:vite] || yes?('Would you like to install Vite Ruby? (y/n)', :green)
|
245
|
+
end
|
246
|
+
|
247
|
+
def install_tailwind?
|
248
|
+
return @install_tailwind if defined?(@install_tailwind)
|
249
|
+
|
250
|
+
@install_tailwind = options[:tailwind] || yes?('Would you like to install Tailwind CSS? (y/n)', :green)
|
251
|
+
end
|
252
|
+
|
253
|
+
def typescript?
|
254
|
+
return @typescript if defined?(@typescript)
|
255
|
+
|
256
|
+
@typescript = options[:typescript] || yes?('Would you like to use TypeScript? (y/n)', :green)
|
257
|
+
end
|
258
|
+
|
259
|
+
def inertia_entrypoint
|
260
|
+
"inertia.#{typescript? ? 'ts' : 'js'}"
|
261
|
+
end
|
262
|
+
|
263
|
+
def vite_tag
|
264
|
+
typescript? ? 'vite_typescript_tag' : 'vite_javascript_tag'
|
265
|
+
end
|
266
|
+
|
267
|
+
def inertia_resolved_version
|
268
|
+
@inertia_resolved_version ||= Gem::Version.new(
|
269
|
+
`npm show @inertiajs/core@#{options[:inertia_version]} version`.strip
|
270
|
+
)
|
271
|
+
end
|
272
|
+
|
273
|
+
def verbose?
|
274
|
+
options[:verbose]
|
275
|
+
end
|
276
|
+
|
277
|
+
def svelte?
|
278
|
+
framework.start_with? 'svelte'
|
279
|
+
end
|
280
|
+
|
281
|
+
def inertia_package
|
282
|
+
"#{FRAMEWORKS[framework]['inertia_package']}@#{options[:inertia_version]}"
|
283
|
+
end
|
284
|
+
|
285
|
+
def framework
|
286
|
+
@framework ||= options[:framework] || ask('What framework do you want to use with Inertia?', :green,
|
287
|
+
limited_to: FRAMEWORKS.keys, default: 'react')
|
288
|
+
end
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Inertia
|
4
|
+
module Generators
|
5
|
+
class JSPackageManager
|
6
|
+
def self.package_managers
|
7
|
+
%w[npm yarn bun pnpm]
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(generator)
|
11
|
+
@generator = generator
|
12
|
+
end
|
13
|
+
|
14
|
+
def present?
|
15
|
+
package_manager.present?
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_dependencies(*dependencies)
|
19
|
+
options = @generator.options[:verbose] ? '' : ' --silent'
|
20
|
+
@generator.in_root do
|
21
|
+
@generator.run "#{package_manager} add #{dependencies.join(' ')}#{options}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def package_manager
|
28
|
+
@package_manager ||= @generator.options[:package_manager] || detect_package_manager
|
29
|
+
end
|
30
|
+
|
31
|
+
def detect_package_manager
|
32
|
+
return nil unless file?('package.json')
|
33
|
+
|
34
|
+
if file?('package-lock.json')
|
35
|
+
'npm'
|
36
|
+
elsif file?('bun.lockb')
|
37
|
+
'bun'
|
38
|
+
elsif file?('pnpm-lock.yaml')
|
39
|
+
'pnpm'
|
40
|
+
else
|
41
|
+
'yarn'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def file?(*relative_path)
|
46
|
+
@generator.file?(*relative_path)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg width="100%" height="100%" viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg"><linearGradient id="a" x1="0" y1="200" x2="400" y2="200" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9653ea"/><stop offset="1" stop-color="#6e74ef"/></linearGradient><path fill="url(#a)" fill-rule="evenodd" d="M400 200C400 89.543 310.457 0 200 0S0 89.543 0 200s89.543 200 200 200 200-89.543 200-200Z"/><path fill="#fff" d="M137.331 117.6H52.4l82.069 82.069L52.4 281.737h84.931L219.4 199.67Z"/><path fill="#fff" d="M265.231 117.6H180.3l82.069 82.069-82.069 82.068h84.931L347.3 199.67Z"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg viewBox="-10.5 -9.45 21 18.9" fill="none" xmlns="http://www.w3.org/2000/svg" class="uwu-hidden mt-4 mb-3 text-brand dark:text-brand-dark w-24 lg:w-28 self-center text-sm me-0 flex origin-center transition-all ease-in-out"><circle r="2" fill="#58C4DC"/><g stroke="#58C4DC"><ellipse rx="10" ry="4.5"/><ellipse rx="10" ry="4.5" transform="rotate(60)"/><ellipse rx="10" ry="4.5" transform="rotate(120)"/></g></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="iconify iconify--logos" width="26.6" height="32" viewBox="0 0 256 308"><path fill="#FF3E00" d="M239.682 40.707C211.113-.182 154.69-12.301 113.895 13.69L42.247 59.356a82.198 82.198 0 0 0-37.135 55.056 86.566 86.566 0 0 0 8.536 55.576 82.425 82.425 0 0 0-12.296 30.719 87.596 87.596 0 0 0 14.964 66.244c28.574 40.893 84.997 53.007 125.787 27.016l71.648-45.664a82.182 82.182 0 0 0 37.135-55.057 86.601 86.601 0 0 0-8.53-55.577 82.409 82.409 0 0 0 12.29-30.718 87.573 87.573 0 0 0-14.963-66.244"/><path fill="#FFF" d="M106.889 270.841c-23.102 6.007-47.497-3.036-61.103-22.648a52.685 52.685 0 0 1-9.003-39.85 49.978 49.978 0 0 1 1.713-6.693l1.35-4.115 3.671 2.697a92.447 92.447 0 0 0 28.036 14.007l2.663.808-.245 2.659a16.067 16.067 0 0 0 2.89 10.656 17.143 17.143 0 0 0 18.397 6.828 15.786 15.786 0 0 0 4.403-1.935l71.67-45.672a14.922 14.922 0 0 0 6.734-9.977 15.923 15.923 0 0 0-2.713-12.011 17.156 17.156 0 0 0-18.404-6.832 15.78 15.78 0 0 0-4.396 1.933l-27.35 17.434a52.298 52.298 0 0 1-14.553 6.391c-23.101 6.007-47.497-3.036-61.101-22.649a52.681 52.681 0 0 1-9.004-39.849 49.428 49.428 0 0 1 22.34-33.114l71.664-45.677a52.218 52.218 0 0 1 14.563-6.398c23.101-6.007 47.497 3.036 61.101 22.648a52.685 52.685 0 0 1 9.004 39.85 50.559 50.559 0 0 1-1.713 6.692l-1.35 4.116-3.67-2.693a92.373 92.373 0 0 0-28.037-14.013l-2.664-.809.246-2.658a16.099 16.099 0 0 0-2.89-10.656 17.143 17.143 0 0 0-18.398-6.828 15.786 15.786 0 0 0-4.402 1.935l-71.67 45.674a14.898 14.898 0 0 0-6.73 9.975 15.9 15.9 0 0 0 2.709 12.012 17.156 17.156 0 0 0 18.404 6.832 15.841 15.841 0 0 0 4.402-1.935l27.345-17.427a52.147 52.147 0 0 1 14.552-6.397c23.101-6.006 47.497 3.037 61.102 22.65a52.681 52.681 0 0 1 9.003 39.848 49.453 49.453 0 0 1-22.34 33.12l-71.664 45.673a52.218 52.218 0 0 1-14.563 6.398"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 366 304" fill="none"><path d="M91.95 46.973a5.5 5.5 0 0 0-.401.722l-59.724 69.638a5.5 5.5 0 0 0 .003 7.165l147 171.086a5.502 5.502 0 0 0 8.344 0l147-171.084a5.5 5.5 0 0 0 .003-7.165l-59.723-69.637a5.5 5.5 0 0 0-4.996-3.198H96.543a5.5 5.5 0 0 0-4.592 2.473z" fill="url(#a)" stroke="url(#b)" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/><path d="m265.857 19.004-116.154 5.598a4.346 4.346 0 0 0-3.643 3.885v109.121c-.267 2.885 2.326 5.217 5.182 4.659l20.815-4.659c3.114-.608 5.819 2.194 5.082 5.268l-8.01 45.423c-.767 3.199 2.18 6.052 5.371 5.201l17.232-3.395c3.195-.852 6.144 2.01 5.369 5.211l-18.069 74.653c-1.13 4.67 5.068 7.44 7.82 3.495l1.838-2.635L291.703 81.887c1.725-3.163-.947-6.923-4.518-6.357l-34.224 5.417c-3.217.508-5.839-2.544-4.834-5.627l22.576-50.691c1.006-3.088-1.626-6.144-4.846-5.625z" fill="url(#c)"/><defs><linearGradient id="a" x1="28.5" y1="34" x2="246.355" y2="194.428" gradientUnits="userSpaceOnUse"><stop stop-color="#FF006B"/><stop offset=".364" stop-color="#C00"/><stop offset="1" stop-color="#980D03"/></linearGradient><linearGradient id="b" x1="28.5" y1="34" x2="246.355" y2="194.428" gradientUnits="userSpaceOnUse"><stop stop-color="#FF006B"/><stop offset=".364" stop-color="#C00"/><stop offset="1" stop-color="#980D03"/></linearGradient><linearGradient id="c" x1="183.666" y1="-5.499" x2="211.353" y2="242.278" gradientUnits="userSpaceOnUse"><stop stop-color="#FFDD35"/><stop offset=".083" stop-color="#FFD233"/><stop offset=".594" stop-color="#FFA800"/><stop offset=".839" stop-color="#F90"/></linearGradient></defs></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="iconify iconify--logos" width="37.07" height="36" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8 0 0h97.92L128 51.2 157.44 0h47.36Z"/><path fill="#41B883" d="m0 0 128 220.8L256 0h-51.2L128 132.48 50.56 0H0Z"/><path fill="#35495E" d="M50.56 0 128 133.12 204.8 0h-47.36L128 51.2 97.92 0H50.56Z"/></svg>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env sh
|
2
|
+
|
3
|
+
export PORT="${PORT:-3000}"
|
4
|
+
|
5
|
+
if command -v overmind 1> /dev/null 2>&1
|
6
|
+
then
|
7
|
+
overmind start -f Procfile.dev "$@"
|
8
|
+
exit $?
|
9
|
+
fi
|
10
|
+
|
11
|
+
if command -v hivemind 1> /dev/null 2>&1
|
12
|
+
then
|
13
|
+
echo "Hivemind is installed. Running the application with Hivemind..."
|
14
|
+
exec hivemind Procfile.dev "$@"
|
15
|
+
exit $?
|
16
|
+
fi
|
17
|
+
|
18
|
+
if gem list --no-installed --exact --silent foreman; then
|
19
|
+
echo "Installing foreman..."
|
20
|
+
gem install foreman
|
21
|
+
fi
|
22
|
+
|
23
|
+
foreman start -f Procfile.dev "$@"
|