i18n-js 4.2.1 → 4.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0545bfe4fee26d8a5aed4aec6262e8a3db733ac951dbb0111f05e8fb2488e516
4
- data.tar.gz: 50dd6e5e4e019f01e7b72fcfacb71faf2faa73ed7157082c647432b4ef96f263
3
+ metadata.gz: f4299c989d73925fef9ee5651623b38c8b89f334dba54781e91e093860dc4ebf
4
+ data.tar.gz: 07d036910ef839e283030f481e6845fab011f77311fe48def9a564885009ecbd
5
5
  SHA512:
6
- metadata.gz: b5366522c08e868ce0b555a4d0c0d10029bbee9270cb9602600f1ca4f2e89473f02baa577644dd5ae9a38046c3c03abf6c66029d79bac7d4ca41f50ed6ea4b86
7
- data.tar.gz: c3a0670b398c51c9bd1e01b163c46b2e69fe8f4ee06a099d8d46dc78ee57da1e78bff51e35db98ddb15b91fe2f422c8a8584fadb0b4066dc191a01eab65adac4
6
+ metadata.gz: c45b7571d0854ce7eb5b225b382628ee3d4c682a640864f050e357d299fc9416f9885ed94518abf192e4a99956c10ab1ccfa6f7a61f954f89ce3efd60a6c78b6
7
+ data.tar.gz: '0087a9c072c0f84fac37fff95bddcc541e0a247ad6c924f4754c062ed066da77ed2d5c96d6511ffcb607ff4c0459296f9e1af42b6c6036d3365080c47a6dae4f'
data/CHANGELOG.md CHANGED
@@ -11,6 +11,12 @@ Prefix your message with one of the following:
11
11
  - [Security] in case of vulnerabilities.
12
12
  -->
13
13
 
14
+ ## v4.2.2 - Dec 30, 2022
15
+
16
+ - [Changed] Do not re-export files whose contents haven't changed.
17
+ - [Changed] Translations will always be deep sorted.
18
+ - [Fixed] Remove procs from translations before exporting files.
19
+
14
20
  ## v4.2.1 - Dec 25, 2022
15
21
 
16
22
  - [Changed] Change plugin api to be based on instance methods. This avoids
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module I18nJS
4
+ def self.clean_hash(hash)
5
+ hash.keys.each_with_object({}) do |key, buffer|
6
+ value = hash[key]
7
+
8
+ next if value.is_a?(Proc)
9
+
10
+ buffer[key] = value.is_a?(Hash) ? clean_hash(value) : value
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module I18nJS
4
+ def self.sort_hash(hash)
5
+ return hash unless hash.is_a?(Hash)
6
+
7
+ hash.keys.sort_by(&:to_s).each_with_object({}) do |key, seed|
8
+ value = hash[key]
9
+ seed[key] = value.is_a?(Hash) ? sort_hash(value) : value
10
+ end
11
+ end
12
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module I18nJS
4
- VERSION = "4.2.1"
4
+ VERSION = "4.2.2"
5
5
  end
data/lib/i18n-js.rb CHANGED
@@ -13,6 +13,8 @@ require "digest/md5"
13
13
  require_relative "i18n-js/schema"
14
14
  require_relative "i18n-js/version"
15
15
  require_relative "i18n-js/plugin"
16
+ require_relative "i18n-js/sort_hash"
17
+ require_relative "i18n-js/clean_hash"
16
18
 
17
19
  module I18nJS
18
20
  MissingConfigError = Class.new(StandardError)
@@ -51,6 +53,7 @@ module I18nJS
51
53
  end
52
54
  end
53
55
 
56
+ filtered_translations = sort_hash(clean_hash(filtered_translations))
54
57
  output_file_path = File.expand_path(group[:file])
55
58
  exported_files = []
56
59
 
@@ -74,6 +77,13 @@ module I18nJS
74
77
  digest = Digest::MD5.hexdigest(contents)
75
78
  file_path = file_path.gsub(/:digest/, digest)
76
79
 
80
+ # Don't rewrite the file if it already exists and has the same content.
81
+ # It helps the asset pipeline or webpack understand that file wasn't
82
+ # changed.
83
+ if File.exist?(file_path) && File.read(file_path) == contents
84
+ return file_path
85
+ end
86
+
77
87
  File.open(file_path, "w") do |file|
78
88
  file << contents
79
89
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-js
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.1
4
+ version: 4.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-12-26 00:00:00.000000000 Z
11
+ date: 2022-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glob
@@ -197,6 +197,7 @@ files:
197
197
  - lib/guard/i18n-js/templates/Guardfile
198
198
  - lib/guard/i18n-js/version.rb
199
199
  - lib/i18n-js.rb
200
+ - lib/i18n-js/clean_hash.rb
200
201
  - lib/i18n-js/cli.rb
201
202
  - lib/i18n-js/cli/check_command.rb
202
203
  - lib/i18n-js/cli/command.rb
@@ -214,6 +215,7 @@ files:
214
215
  - lib/i18n-js/listen.rb
215
216
  - lib/i18n-js/plugin.rb
216
217
  - lib/i18n-js/schema.rb
218
+ - lib/i18n-js/sort_hash.rb
217
219
  - lib/i18n-js/version.rb
218
220
  - package.json
219
221
  homepage: https://github.com/fnando/i18n-js
@@ -223,10 +225,10 @@ metadata:
223
225
  rubygems_mfa_required: 'true'
224
226
  homepage_uri: https://github.com/fnando/i18n-js
225
227
  bug_tracker_uri: https://github.com/fnando/i18n-js/issues
226
- source_code_uri: https://github.com/fnando/i18n-js/tree/v4.2.1
227
- changelog_uri: https://github.com/fnando/i18n-js/tree/v4.2.1/CHANGELOG.md
228
- documentation_uri: https://github.com/fnando/i18n-js/tree/v4.2.1/README.md
229
- license_uri: https://github.com/fnando/i18n-js/tree/v4.2.1/LICENSE.md
228
+ source_code_uri: https://github.com/fnando/i18n-js/tree/v4.2.2
229
+ changelog_uri: https://github.com/fnando/i18n-js/tree/v4.2.2/CHANGELOG.md
230
+ documentation_uri: https://github.com/fnando/i18n-js/tree/v4.2.2/README.md
231
+ license_uri: https://github.com/fnando/i18n-js/tree/v4.2.2/LICENSE.md
230
232
  post_install_message:
231
233
  rdoc_options: []
232
234
  require_paths:
@@ -242,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
244
  - !ruby/object:Gem::Version
243
245
  version: '0'
244
246
  requirements: []
245
- rubygems_version: 3.3.7
247
+ rubygems_version: 3.4.1
246
248
  signing_key:
247
249
  specification_version: 4
248
250
  summary: Export i18n translations and use them on JavaScript.