|
2 | 2 | # frozen_string_literal: true |
3 | 3 |
|
4 | 4 | require "json" |
5 | | -require "base64" |
6 | 5 | require "execjs" |
7 | 6 | require "terser/railtie" if defined?(Rails::Railtie) |
8 | 7 | require "terser/version" |
@@ -163,7 +162,7 @@ def initialize(options = {}) |
163 | 162 | def compile(source, source_map_options = @options) |
164 | 163 | if source_map_options[:source_map] |
165 | 164 | compiled, source_map = run_terserjs(source, true, source_map_options) |
166 | | - source_map_uri = Base64.strict_encode64(source_map) |
| 165 | + source_map_uri = [source_map].pack("m0") |
167 | 166 | source_map_mime = "application/json;charset=utf-8;base64" |
168 | 167 | compiled + "\n//# sourceMappingURL=data:#{source_map_mime},#{source_map_uri}" |
169 | 168 | else |
@@ -506,9 +505,19 @@ def input_source_map(source, generate_map, options) |
506 | 505 | source_map_options = options[:source_map].is_a?(Hash) ? options[:source_map] : {} |
507 | 506 | sanitize_map_root(source_map_options.fetch(:input_source_map) do |
508 | 507 | url = extract_source_mapping_url(source) |
509 | | - Base64.strict_decode64(url.split(",", 2)[-1]) if url && url.start_with?("data:") |
| 508 | + base64_strict_decode64(url.split(",", 2)[-1]) if url && url.start_with?("data:") |
510 | 509 | end) |
511 | 510 | rescue ArgumentError, JSON::ParserError |
512 | 511 | nil |
513 | 512 | end |
| 513 | + |
| 514 | + if "".respond_to?(:unpack1) |
| 515 | + def base64_strict_decode64(str) |
| 516 | + str.unpack1("m0") |
| 517 | + end |
| 518 | + else |
| 519 | + def base64_strict_decode64(str) |
| 520 | + str.unpack("m0")[0] |
| 521 | + end |
| 522 | + end |
514 | 523 | end |
0 commit comments