js-routes 2.3.3 → 2.3.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|