js-routes 2.3.3 → 2.3.4
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 +46 -28
- data/Readme.md +1 -3
- data/lib/js_routes/configuration.rb +6 -1
- data/lib/js_routes/instance.rb +6 -6
- data/lib/js_routes/utils.rb +9 -0
- data/lib/js_routes/version.rb +1 -1
- data/lib/routes.d.ts +1 -0
- data/lib/routes.js +15 -3
- data/lib/routes.ts +20 -3
- data/lib/tasks/js_routes.rake +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8057000afc83b5ce111428c7aec30249f52ef15872db97527757c94fc7faf6d
|
4
|
+
data.tar.gz: f7d4b47f6248278cb53b5cac80807d37aec7a51a1c47f1c4711e1e6bd0d2d3ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40c3c12d7d4a37089268aebda4b82d2f5d8944d5c16048394c1e38eda270f82f867faed7b129e4c27295bcf8158e998e42b92b552c015303d965c0e2227b0780
|
7
|
+
data.tar.gz: 0f075f81e3d5c0b3d6ed9315e3a34d34857c9c9bf34f136c6884e95b4ab6c6f37c0ebb4ee767eceba98bad7377bd1f4e0bc5e68019c9179fef32b4a7f57b96ea
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
##
|
3
|
+
## [2.3.4]
|
4
|
+
|
5
|
+
* Fix deprecator usage in `rake js:routes:typescript` [#327](https://github.com/railsware/js-routes/issues/327)
|
6
|
+
* Migrate to yarn 4
|
7
|
+
* Deprecated `prefix` option in favor of `default_url_options.script_name`.
|
8
|
+
* Add support for `script_name` [Rails helper option](https://api.rubyonrails.org/classes/ActionDispatch/Routing/UrlFor.html#method-i-url_for).
|
9
|
+
|
10
|
+
``` javascript
|
11
|
+
Routes.post_path(1, { script_name: "/myapp" })
|
12
|
+
// => /myapp/post/1
|
13
|
+
|
14
|
+
Routes.configure({
|
15
|
+
default_url_options: { script_name: "/myapp" }
|
16
|
+
})
|
17
|
+
|
18
|
+
Routes.post_path(1) // => /myapp/post/1
|
19
|
+
```
|
20
|
+
|
21
|
+
## [2.3.3]
|
4
22
|
|
5
23
|
* Rework default banner to use `routes.rb` digest instead of timestamp to ensure
|
6
24
|
consistent routes.js version accross environments.
|
@@ -17,7 +35,7 @@ The new default banner:
|
|
17
35
|
*/
|
18
36
|
```
|
19
37
|
|
20
|
-
##
|
38
|
+
## [2.3.2]
|
21
39
|
|
22
40
|
* Add `banner` option that allow to control JSDoc on top of generated file. [#324](https://github.com/bogdan/repo/issues/324).
|
23
41
|
|
@@ -34,13 +52,13 @@ JsRoutes.setup do |c|
|
|
34
52
|
end
|
35
53
|
```
|
36
54
|
|
37
|
-
##
|
55
|
+
## [2.3.1]
|
38
56
|
|
39
57
|
* Add timestamp on when routes.js was generated into banner.
|
40
58
|
* Fix application specified directly without proc. [#323](https://github.com/railsware/js-routes/issues/323)
|
41
59
|
* Support `optional_definition_params` option. See [Related Docs](./Readme.md#optional-definition-params).
|
42
60
|
|
43
|
-
##
|
61
|
+
## [2.3.0]
|
44
62
|
|
45
63
|
* Drop support of Rails 4.x
|
46
64
|
* Fix support of shakapacker [#321](https://github.com/railsware/js-routes/issues/321).
|
@@ -48,7 +66,7 @@ end
|
|
48
66
|
* Deprecated `rake js:routes:typescript`.
|
49
67
|
`rake js:routes` now automatically detects if types support can be used on not.
|
50
68
|
|
51
|
-
##
|
69
|
+
## [2.2.10]
|
52
70
|
|
53
71
|
* Remove sorbet files from repo
|
54
72
|
* Clearly define files included in gem
|
@@ -56,109 +74,109 @@ end
|
|
56
74
|
* Remove empty object linter warning on DTS module
|
57
75
|
* Generators: Add `.ts` extension when searching for main JS file of the project
|
58
76
|
|
59
|
-
##
|
77
|
+
## [2.2.9]
|
60
78
|
|
61
79
|
* Fix middleware error for non-modern setup.
|
62
80
|
* Added [Sorbet](https://sorbet.org/) method signatures.
|
63
81
|
* Always use DTS module type when calling JsRoutes.definitions or .definitions!.
|
64
82
|
[#313](https://github.com/railsware/js-routes/issues/313)
|
65
83
|
|
66
|
-
##
|
84
|
+
## [2.2.8]
|
67
85
|
|
68
86
|
* Leave emoji symbols intact when encoding URI fragment [#312](https://github.com/railsware/js-routes/issues/312)
|
69
87
|
* Use webpacker config variable instead of hardcode [#309](https://github.com/railsware/js-routes/issues/309)
|
70
88
|
* Use `File.exist?` to be compatible with all versions of ruby [#310](https://github.com/railsware/js-routes/issues/310)
|
71
89
|
|
72
|
-
##
|
90
|
+
## [2.2.7]
|
73
91
|
|
74
92
|
* Fix ESM Tree Shaking [#306](https://github.com/railsware/js-routes/issues/306)
|
75
93
|
|
76
|
-
##
|
94
|
+
## [2.2.6]
|
77
95
|
|
78
96
|
* Prefer to extend `javascript:build` instead of `assets:precompile`. [#305](https://github.com/railsware/js-routes/issues/305)
|
79
97
|
* Add stimulus framework application.js location to generators
|
80
98
|
|
81
|
-
##
|
99
|
+
## [2.2.5]
|
82
100
|
|
83
101
|
* Upgraded eslint and prettier versions [#304](https://github.com/railsware/js-routes/issues/304)
|
84
102
|
* Fix middleware generator [#300](https://github.com/railsware/js-routes/issues/300)
|
85
103
|
* Support `params` special parameter
|
86
104
|
|
87
|
-
##
|
105
|
+
## [2.2.4]
|
88
106
|
|
89
107
|
* Fix rails engine loading if sprockets is not in Gemfile. Fixes [#294](https://github.com/railsware/js-routes/issues/294)
|
90
108
|
|
91
|
-
##
|
109
|
+
## [2.2.3]
|
92
110
|
|
93
111
|
* Fixed NIL module type namespace defintion [#297](https://github.com/railsware/js-routes/issues/297).
|
94
112
|
* The patch may cause a problem with nested `namespace` option.
|
95
113
|
* Ex. Value like `MyProject.Routes` requires to define `window.MyProject` before importing the routes file
|
96
114
|
|
97
|
-
##
|
115
|
+
## [2.2.2]
|
98
116
|
|
99
117
|
* Fix custom file path [#295](https://github.com/railsware/js-routes/issues/295)
|
100
118
|
|
101
|
-
##
|
119
|
+
## [2.2.1]
|
102
120
|
|
103
121
|
* Improve generator to update route files on `assets:precompile` and add them to `.gitignore by default` [#288](https://github.com/railsware/js-routes/issues/288#issuecomment-1012182815)
|
104
122
|
|
105
|
-
##
|
123
|
+
## [2.2.0]
|
106
124
|
|
107
125
|
* Use Rack Middleware to automatically update routes file in development [#288](https://github.com/railsware/js-routes/issues/288)
|
108
126
|
* This setup is now a default recommended due to lack of any downside comparing to [ERB Loader](./Readme.md#webpacker) and [Manual Setup](./Readme.md#advanced-setup)
|
109
127
|
|
110
|
-
##
|
128
|
+
## [2.1.3]
|
111
129
|
|
112
130
|
* Fix `default_url_options` bug. [#290](https://github.com/railsware/js-routes/issues/290)
|
113
131
|
|
114
|
-
##
|
132
|
+
## [2.1.2]
|
115
133
|
|
116
134
|
* Improve browser window object detection. [#287](https://github.com/railsware/js-routes/issues/287)
|
117
135
|
|
118
|
-
##
|
136
|
+
## [2.1.1]
|
119
137
|
|
120
138
|
* Added webpacker generator `./bin/rails generate js_routes:webpacker`
|
121
139
|
* Reorganized Readme to describe different setups with their pros and cons more clearly
|
122
140
|
|
123
|
-
##
|
141
|
+
## [2.1.0]
|
124
142
|
|
125
143
|
* Support typescript defintions file aka `routes.d.ts`. See [Readme.md](./Readme.md#definitions) for more information.
|
126
144
|
|
127
|
-
##
|
145
|
+
## [2.0.8]
|
128
146
|
|
129
147
|
* Forbid usage of `namespace` option if `module_type` is not `nil`. [#281](https://github.com/railsware/js-routes/issues/281).
|
130
148
|
|
131
|
-
##
|
149
|
+
## [2.0.7]
|
132
150
|
|
133
151
|
* Remove source map annotation from JS file. Fixes [#277](https://github.com/railsware/js-routes/issues/277)
|
134
152
|
* Generated file is not minified, so it is better to use app side bundler/compressor for source maps
|
135
153
|
|
136
154
|
|
137
|
-
##
|
155
|
+
## [2.0.6]
|
138
156
|
|
139
157
|
* Disable `namespace` option default for all envs [#278](https://github.com/railsware/js-routes/issues/278)
|
140
158
|
|
141
|
-
##
|
159
|
+
## [2.0.5]
|
142
160
|
|
143
161
|
* Fixed backward compatibility issue [#276](https://github.com/railsware/js-routes/issues/276)
|
144
162
|
|
145
|
-
##
|
163
|
+
## [2.0.4]
|
146
164
|
|
147
165
|
* Fixed backward compatibility issue [#275](https://github.com/railsware/js-routes/issues/275)
|
148
166
|
|
149
|
-
##
|
167
|
+
## [2.0.3]
|
150
168
|
|
151
169
|
* Fixed backward compatibility issue [#275](https://github.com/railsware/js-routes/issues/275)
|
152
170
|
|
153
|
-
##
|
171
|
+
## [2.0.2]
|
154
172
|
|
155
173
|
* Fixed backward compatibility issue [#274](https://github.com/railsware/js-routes/issues/274)
|
156
174
|
|
157
|
-
##
|
175
|
+
## [2.0.1]
|
158
176
|
|
159
177
|
* Fixed backward compatibility issue [#272](https://github.com/railsware/js-routes/issues/272)
|
160
178
|
|
161
|
-
##
|
179
|
+
## [2.0.0]
|
162
180
|
|
163
181
|
Version 2.0 has some breaking changes.
|
164
182
|
See [UPGRADE TO 2.0](./VERSION_2_UPGRADE.md) for guidance.
|
data/Readme.md
CHANGED
@@ -353,10 +353,8 @@ Options to configure routes formatting. These options are available both in Ruby
|
|
353
353
|
|
354
354
|
* `default_url_options` - default parameters used when generating URLs
|
355
355
|
* Example: `{format: "json", trailing_slash: true, protocol: "https", subdomain: "api", host: "example.com", port: 3000}`
|
356
|
+
* See [`url_for` doc](https://api.rubyonrails.org/classes/ActionDispatch/Routing/UrlFor.html#method-i-url_for) for list of supported options
|
356
357
|
* Default: `{}`
|
357
|
-
* `prefix` - string that will prepend any generated URL. Usually used when app URL root includes a path component.
|
358
|
-
* Example: `/rails-app`
|
359
|
-
* Default: `Rails.application.config.relative_url_root`
|
360
358
|
* `serializer` - a JS function that serializes a Javascript Hash object into URL paramters like `{a: 1, b: 2} => "a=1&b=2"`.
|
361
359
|
* Default: `nil`. Uses built-in serializer compatible with Rails
|
362
360
|
* Example: `jQuery.param` - use jQuery's serializer algorithm. You can attach serialize function from your favorite AJAX framework.
|
@@ -19,7 +19,7 @@ module JsRoutes
|
|
19
19
|
sig { returns(FileName) }
|
20
20
|
attr_accessor :file
|
21
21
|
sig { returns(Prefix) }
|
22
|
-
|
22
|
+
attr_reader :prefix
|
23
23
|
sig { returns(T::Boolean) }
|
24
24
|
attr_accessor :url_links
|
25
25
|
sig { returns(T::Boolean) }
|
@@ -91,6 +91,11 @@ module JsRoutes
|
|
91
91
|
public_send(attribute)
|
92
92
|
end
|
93
93
|
|
94
|
+
def prefix=(value)
|
95
|
+
JsRoutes::Utils.deprecator.warn("JsRoutes configuration prefix is deprecated in favor of default_url_options.script_name.")
|
96
|
+
@prefix = value
|
97
|
+
end
|
98
|
+
|
94
99
|
sig { params(attributes: Options).returns(JsRoutes::Configuration) }
|
95
100
|
def merge(attributes)
|
96
101
|
clone.assign(attributes)
|
data/lib/js_routes/instance.rb
CHANGED
@@ -26,7 +26,7 @@ module JsRoutes
|
|
26
26
|
# Ensure routes are loaded. If they're not, load them.
|
27
27
|
|
28
28
|
application = T.unsafe(self.application)
|
29
|
-
if
|
29
|
+
if routes_from(application).empty?
|
30
30
|
if application.is_a?(Rails::Application)
|
31
31
|
if Rails.version >= "8.0.0"
|
32
32
|
T.unsafe(application).reload_routes_unless_loaded
|
@@ -135,9 +135,9 @@ module JsRoutes
|
|
135
135
|
JsRoutes.json(value)
|
136
136
|
end
|
137
137
|
|
138
|
-
sig { returns(T::
|
139
|
-
def
|
140
|
-
T.unsafe(application).routes.named_routes.to_h
|
138
|
+
sig {params(application: Application).returns(T::Array[JourneyRoute])}
|
139
|
+
def routes_from(application)
|
140
|
+
T.unsafe(application).routes.named_routes.to_h.values.sort_by(&:name)
|
141
141
|
end
|
142
142
|
|
143
143
|
sig { returns(String) }
|
@@ -186,7 +186,7 @@ export {};
|
|
186
186
|
|
187
187
|
sig { returns(T::Array[StringArray]) }
|
188
188
|
def routes_list
|
189
|
-
|
189
|
+
routes_from(application).flat_map do |route|
|
190
190
|
route_helpers_if_match(route) + mounted_app_routes(route)
|
191
191
|
end
|
192
192
|
end
|
@@ -196,7 +196,7 @@ export {};
|
|
196
196
|
rails_engine_app = T.unsafe(app_from_route(route))
|
197
197
|
if rails_engine_app.is_a?(Class) &&
|
198
198
|
rails_engine_app < Rails::Engine && !route.path.anchored
|
199
|
-
|
199
|
+
routes_from(rails_engine_app).flat_map do |engine_route|
|
200
200
|
route_helpers_if_match(engine_route, route)
|
201
201
|
end
|
202
202
|
else
|
data/lib/js_routes/utils.rb
CHANGED
data/lib/js_routes/version.rb
CHANGED
data/lib/routes.d.ts
CHANGED
data/lib/routes.js
CHANGED
@@ -110,6 +110,7 @@ RubyVariables.WRAPPER(
|
|
110
110
|
"host",
|
111
111
|
"port",
|
112
112
|
"protocol",
|
113
|
+
"script_name",
|
113
114
|
];
|
114
115
|
class UtilsClass {
|
115
116
|
constructor() {
|
@@ -275,21 +276,29 @@ RubyVariables.WRAPPER(
|
|
275
276
|
}
|
276
277
|
build_route(parts, required_params, default_options, route, absolute, args) {
|
277
278
|
const { keyword_parameters, query_parameters } = this.partition_parameters(parts, required_params, default_options, args);
|
279
|
+
let { trailing_slash, anchor, script_name } = keyword_parameters;
|
278
280
|
const missing_params = required_params.filter((param) => !hasProp(query_parameters, param) ||
|
279
281
|
this.is_nullable(query_parameters[param]));
|
280
282
|
if (missing_params.length) {
|
281
283
|
throw new ParametersMissing(...missing_params);
|
282
284
|
}
|
283
285
|
let result = this.get_prefix() + this.visit(route, query_parameters);
|
284
|
-
if (
|
286
|
+
if (trailing_slash) {
|
285
287
|
result = result.replace(/(.*?)[/]?$/, "$1/");
|
286
288
|
}
|
287
289
|
const url_params = this.serialize(query_parameters);
|
288
290
|
if (url_params.length) {
|
289
291
|
result += "?" + url_params;
|
290
292
|
}
|
291
|
-
if (
|
292
|
-
result += "#" +
|
293
|
+
if (anchor) {
|
294
|
+
result += "#" + anchor;
|
295
|
+
}
|
296
|
+
if (script_name) {
|
297
|
+
const last_index = script_name.length - 1;
|
298
|
+
if (script_name[last_index] == "/" && result[0] == "/") {
|
299
|
+
script_name = script_name.slice(0, last_index);
|
300
|
+
}
|
301
|
+
result = script_name + result;
|
293
302
|
}
|
294
303
|
if (absolute) {
|
295
304
|
result = this.route_url(keyword_parameters) + result;
|
@@ -481,6 +490,9 @@ RubyVariables.WRAPPER(
|
|
481
490
|
return ReservedOptions.includes(key);
|
482
491
|
}
|
483
492
|
configure(new_config) {
|
493
|
+
if (new_config.prefix) {
|
494
|
+
console.warn("JsRoutes configuration prefix option is deprecated in favor of default_url_options.script_name.");
|
495
|
+
}
|
484
496
|
this.configuration = { ...this.configuration, ...new_config };
|
485
497
|
return this.configuration;
|
486
498
|
}
|
data/lib/routes.ts
CHANGED
@@ -66,6 +66,7 @@ type KeywordUrlOptions = Optional<{
|
|
66
66
|
port: string | number;
|
67
67
|
anchor: string;
|
68
68
|
trailing_slash: boolean;
|
69
|
+
script_name: string;
|
69
70
|
params: RouteParameters;
|
70
71
|
}>;
|
71
72
|
|
@@ -230,7 +231,9 @@ RubyVariables.WRAPPER(
|
|
230
231
|
"host",
|
231
232
|
"port",
|
232
233
|
"protocol",
|
234
|
+
"script_name",
|
233
235
|
] as const;
|
236
|
+
|
234
237
|
type ReservedOption = (typeof ReservedOptions)[any];
|
235
238
|
|
236
239
|
class UtilsClass {
|
@@ -433,6 +436,8 @@ RubyVariables.WRAPPER(
|
|
433
436
|
default_options,
|
434
437
|
args
|
435
438
|
);
|
439
|
+
|
440
|
+
let { trailing_slash, anchor, script_name } = keyword_parameters;
|
436
441
|
const missing_params = required_params.filter(
|
437
442
|
(param) =>
|
438
443
|
!hasProp(query_parameters, param) ||
|
@@ -442,15 +447,22 @@ RubyVariables.WRAPPER(
|
|
442
447
|
throw new ParametersMissing(...missing_params);
|
443
448
|
}
|
444
449
|
let result = this.get_prefix() + this.visit(route, query_parameters);
|
445
|
-
if (
|
450
|
+
if (trailing_slash) {
|
446
451
|
result = result.replace(/(.*?)[/]?$/, "$1/");
|
447
452
|
}
|
448
453
|
const url_params = this.serialize(query_parameters);
|
449
454
|
if (url_params.length) {
|
450
455
|
result += "?" + url_params;
|
451
456
|
}
|
452
|
-
if (
|
453
|
-
result += "#" +
|
457
|
+
if (anchor) {
|
458
|
+
result += "#" + anchor;
|
459
|
+
}
|
460
|
+
if (script_name) {
|
461
|
+
const last_index = script_name.length - 1;
|
462
|
+
if (script_name[last_index] == "/" && result[0] == "/") {
|
463
|
+
script_name = script_name.slice(0, last_index);
|
464
|
+
}
|
465
|
+
result = script_name + result;
|
454
466
|
}
|
455
467
|
if (absolute) {
|
456
468
|
result = this.route_url(keyword_parameters) + result;
|
@@ -696,6 +708,11 @@ RubyVariables.WRAPPER(
|
|
696
708
|
}
|
697
709
|
|
698
710
|
configure(new_config: Partial<Configuration>): Configuration {
|
711
|
+
if (new_config.prefix) {
|
712
|
+
console.warn(
|
713
|
+
"JsRoutes configuration prefix option is deprecated in favor of default_url_options.script_name."
|
714
|
+
);
|
715
|
+
}
|
699
716
|
this.configuration = { ...this.configuration, ...new_config };
|
700
717
|
return this.configuration;
|
701
718
|
}
|
data/lib/tasks/js_routes.rake
CHANGED
@@ -8,7 +8,7 @@ namespace :js do
|
|
8
8
|
namespace :routes do
|
9
9
|
desc "Make a js file with all rails route URL helpers and typescript definitions for them"
|
10
10
|
task typescript: "js:routes" do
|
11
|
-
|
11
|
+
JsRoutes::Utils.deprecator.warn(
|
12
12
|
"`js:routes:typescript` task is deprecated. Please use `js:routes` instead."
|
13
13
|
)
|
14
14
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: js-routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
4
|
+
version: 2.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bogdan Gusiev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-12-
|
11
|
+
date: 2024-12-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -144,9 +144,9 @@ licenses:
|
|
144
144
|
- MIT
|
145
145
|
metadata:
|
146
146
|
bug_tracker_uri: https://github.com/railsware/js-routes/issues
|
147
|
-
changelog_uri: https://github.com/railsware/js-routes/blob/v2.3.
|
147
|
+
changelog_uri: https://github.com/railsware/js-routes/blob/v2.3.4/CHANGELOG.md
|
148
148
|
documentation_uri: https://github.com/railsware/js-routes
|
149
|
-
source_code_uri: https://github.com/railsware/js-routes/tree/v2.3.
|
149
|
+
source_code_uri: https://github.com/railsware/js-routes/tree/v2.3.4/activerecord
|
150
150
|
rubygems_mfa_required: 'true'
|
151
151
|
github_repo: ssh://github.com/railsware/js-routes
|
152
152
|
post_install_message:
|
@@ -164,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
164
|
- !ruby/object:Gem::Version
|
165
165
|
version: '0'
|
166
166
|
requirements: []
|
167
|
-
rubygems_version: 3.5.
|
167
|
+
rubygems_version: 3.5.11
|
168
168
|
signing_key:
|
169
169
|
specification_version: 4
|
170
170
|
summary: Brings Rails named routes to javascript
|