Class: ChimeSdk::Generators::JsGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/chime_sdk/js_generator.rb

Overview

Amazon Chime SDK single .js file generator. Bundle Amazon Chime SDK into single amazon-chime-sdk.min.js file and copy it to app/assets/javascripts directory.

Examples:

Run Amazon Chime SDK single .js file generator with the latest version from master branch

rails generate chime_sdk:js

Run Amazon Chime SDK single .js file generator with specified version

rails generate chime_sdk:js 2.24.0

See Also:

Instance Method Summary collapse

Instance Method Details

#build_and_copy_chime_sdk_jsObject

Build amazon-chime-sdk.min.js and copy it to app/assets/javascripts directory



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/generators/chime_sdk/js_generator.rb', line 34

def build_and_copy_chime_sdk_js
  # :nocov:
  begin
    node_version = Gem::Version.new(`node -v`.delete("v"))
    puts "Found Node v#{node_version}"
    if node_version < Gem::Version.new("10")
      puts "Amazon Chime SDK single .js file generator requires Node 10+. Update Node before running."
      return
    end
  rescue StandardError => e
    puts "Amazon Chime SDK single .js file generator requires Node. Install Node before running."
    return
  end
  begin
    npm_version = Gem::Version.new(`npm -v`)
    puts "Found npm v#{npm_version}"
    if npm_version < Gem::Version.new("6.11")
      puts "Amazon Chime SDK single .js file generator requires npm 6.11+. Update npm before running."
      return
    end
  rescue StandardError => e
    puts "Amazon Chime SDK single .js file generator requires npm. Install npm before running."
    return
  end
  # :nocov:

  if version.present?
    begin
      sdk_version = Gem::Version.new(version)
      # https://www.npmjs.com/package/amazon-chime-sdk-js
      if sdk_version < Gem::Version.new("1.0.0")
        puts "[Abort] Specify 1.0.0 or later as amazon-chime-sdk-js version"
        exit
      else
        version_tag = "amazon-chime-sdk-js@#{sdk_version}"
      end
    rescue StandardError => e
      puts "[Abort] Wrong amazon-chime-sdk-js version was specified"
      exit
    end
  end

  system "mkdir -p tmp"
  puts "Cloning into 'amazon-chime-sdk-js' git repository in tmp directory ..."
  system "cd tmp; git clone https://github.com/aws-samples/amazon-chime-sdk.git > /dev/null 2>&1"
  repository_path = "tmp/amazon-chime-sdk"
  singlejs_path = "#{repository_path}/utils/singlejs"
  package_json_path = "#{singlejs_path}/package.json"

  puts "Finding amazon-chime-sdk-js version ..."
  chime_sdk_pattern = /\"amazon-chime-sdk-js\":[\s]*\"([\S]*)\"$/
  buffer = File.open(package_json_path, "r") { |f| f.read() }
  if version_tag.present?
    puts " Specified \"#{sdk_version}\" as an argument"
    if `npm info #{version_tag} version`.present?
      puts " #{version_tag} was found as npm package"
      if buffer =~ chime_sdk_pattern
        buffer.gsub!(chime_sdk_pattern, "\"amazon-chime-sdk-js\": \"#{sdk_version}\"")
        File.open(package_json_path, "w") { |f| f.write(buffer) }
        puts " Replaced amazon-chime-sdk-js version into \"#{sdk_version}\" in package.json"
        puts " amazon-chime-sdk-js \"#{sdk_version}\" will be used"
      else
        # :nocov:
        puts "[Abort] amazon-chime-sdk-js was not found in package.json"
        exit
        # :nocov:
      end
    else
      puts "[Abort] No npm package of #{version_tag} was found. Specify different amazon-chime-sdk-js version."
      exit
    end
  else
    if buffer =~ /\"amazon-chime-sdk-js\":[\s]*\"([\S]*)\"$/
      sdk_version = $1
      puts " amazon-chime-sdk-js \"#{sdk_version}\" was found in package.json"
      puts " amazon-chime-sdk-js \"#{sdk_version}\" will be used"
    else
      # :nocov:
      puts " No amazon-chime-sdk-js was found in package.json"
      # :nocov:
    end
  end

  puts "Running 'npm install @rollup/plugin-commonjs' in the repository ..."
  system "cd #{singlejs_path}; npm install @rollup/plugin-commonjs > /dev/null 2>&1"
  puts "Running 'npm run bundle' in the repository ..."
  system "cd #{singlejs_path}; npm run bundle > /dev/null 2>&1"
  puts "Built Amazon Chime SDK as amazon-chime-sdk.min.js"
  copy_file "#{singlejs_path}/build/amazon-chime-sdk.min.js", "app/assets/javascripts/amazon-chime-sdk.min.js"
  copy_file "#{singlejs_path}/build/amazon-chime-sdk.min.js.map", "app/assets/javascripts/amazon-chime-sdk.min.js.map"
  system "rm -rf #{repository_path}"
  puts "Cleaned up the repository in tmp directory"
  puts "Completed"
end