js_dependency 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 68994e61c025f75290a28d6d14e1004c54c09ad32d54f3c93fc5626d9621fcd2
4
- data.tar.gz: f8dcb17dc254e873d217ecce20ec2e739d1c53c9935cbc6e163941d53a033f2a
3
+ metadata.gz: 5bf7cfb1d29636defe8ab5e05990af5d95e80f5dc383ff1e3bb56233f6458cd6
4
+ data.tar.gz: 426a15952e30fe085bfa93c3ab5fbdb1a1f8e19323c01cddc83d3744a41a9269
5
5
  SHA512:
6
- metadata.gz: 46891feebfed8de0c5fe551b3e176e48d38f17359c6322fd68893c6a0b101394981b5e97385079069c20b93df198c5e8abbb211a3d482609101ad5db06a81197
7
- data.tar.gz: ab70ef7054409bc108c68ed0b376feaa110c59543769c91f232940b75cfe81917ca2ca4a7c2c3881b89dd3247fa49d8f03c27bf4b70f7bc14b14e14a8f31b7d1
6
+ metadata.gz: ea9dd1783d4c7d6ea1c7a205c49fbb55fd73ba947d474c87e700b4e8ad52e93a2ce0816ddfc0f3df78c9bc689c7b7f3037196e7ddd1d73d701616ff5f4234364
7
+ data.tar.gz: c2020ea6afcef60232a53b2846f7ba972b15c6600659bc18197f68708187f2d75bd0349011297b3e98201428cbc31f8d617f5999d29010d0293a433fc96a2b47
@@ -0,0 +1,8 @@
1
+ src_path: ./src
2
+ target_path: ./src/App.vue
3
+ child_analyze_level: 2
4
+ parent_analyze_level: 2
5
+ name_level: 1
6
+ output_path: ./mermaid.txt
7
+ alias_paths:
8
+ "@": ./pages
data/.rubocop_todo.yml CHANGED
@@ -1,26 +1,41 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2022-07-18 12:42:10 UTC using RuboCop version 1.31.2.
3
+ # on 2022-07-19 16:03:39 UTC using RuboCop version 1.31.2.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 3
9
+ # Offense count: 6
10
10
  # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
11
11
  Metrics/AbcSize:
12
- Max: 20
12
+ Max: 30
13
13
 
14
14
  # Offense count: 3
15
+ # Configuration parameters: IgnoredMethods.
16
+ Metrics/CyclomaticComplexity:
17
+ Max: 13
18
+
19
+ # Offense count: 8
15
20
  # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
16
21
  Metrics/MethodLength:
17
- Max: 17
22
+ Max: 20
23
+
24
+ # Offense count: 1
25
+ # Configuration parameters: CountComments, CountAsOne.
26
+ Metrics/ModuleLength:
27
+ Max: 112
18
28
 
19
29
  # Offense count: 1
20
30
  # Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
21
31
  Metrics/ParameterLists:
22
32
  Max: 8
23
33
 
34
+ # Offense count: 3
35
+ # Configuration parameters: IgnoredMethods.
36
+ Metrics/PerceivedComplexity:
37
+ Max: 13
38
+
24
39
  # Offense count: 1
25
40
  # This cop supports safe autocorrection (--autocorrect).
26
41
  Style/IfUnlessModifier:
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.2.1] - 2022-07-20
4
+
5
+ - Output parents and children cli with line brake and sort.
6
+ - Output mermaid with parent and child string sorting.
7
+
8
+ ## [0.2.0] - 2022-07-19
9
+
10
+ - Add CLI interface.
11
+
12
+ ## [0.1.1] - 2022-07-19
13
+
14
+ - Bug fix of double quotation mark.
15
+
3
16
  ## [0.1.0] - 2022-07-16
4
17
 
5
18
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,8 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- js_dependency (0.1.0)
4
+ js_dependency (0.2.1)
5
5
  pathname
6
+ thor
7
+ yaml
6
8
 
7
9
  GEM
8
10
  remote: https://rubygems.org/
@@ -74,11 +76,13 @@ GEM
74
76
  simplecov_json_formatter (~> 0.1)
75
77
  simplecov-html (0.12.3)
76
78
  simplecov_json_formatter (0.1.4)
79
+ thor (1.2.1)
77
80
  trollop (2.9.10)
78
81
  unicode-display_width (2.2.0)
79
82
  unparser (0.6.5)
80
83
  diff-lcs (~> 1.3)
81
84
  parser (>= 3.1.0)
85
+ yaml (0.2.0)
82
86
  yarn (0.1.1)
83
87
  parslet (>= 1.2)
84
88
  rack (>= 1.3)
data/README.md CHANGED
@@ -1,8 +1,10 @@
1
+ [![codecov](https://codecov.io/gh/junara/js_dependency/branch/main/graph/badge.svg?token=GRdbS1xqUa)](https://codecov.io/gh/junara/js_dependency)
2
+
1
3
  # JsDependency
2
4
 
3
5
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/js_dependency`. To experiment with that code, run `bin/console` for an interactive prompt.
4
6
 
5
- TODO: Delete this and the text above, and describe your gem
7
+ Analyze import dependency of JavaScript code and export mermaid format.
6
8
 
7
9
  ## Installation
8
10
 
@@ -15,8 +17,76 @@ If bundler is not being used to manage dependencies, install the gem by executin
15
17
  $ gem install js_dependency
16
18
 
17
19
  ## Usage
20
+ ### By Command Line
21
+
22
+ Configuration file is `./.js_dependency.yml`. This file includes parameters for the analysis.
23
+
24
+ ```yaml
25
+ src_path: ./src # Root folder
26
+ target_path: ./src/App.vue # Target file tha you want to analyze
27
+ child_analyze_level: 2 # Output level of child analyze
28
+ parent_analyze_level: 2 # Output level of parent analyze
29
+ name_level: 1 # Output name level
30
+ output_path: ./mermaid.txt # Output file path
31
+ alias_paths: # Alias path
32
+ "@": ./pages # absolute path or relative path of src_path
33
+ ```
34
+
35
+ Each parameter is overridden by the command line.
36
+
37
+ ```
38
+ src_path -> -s
39
+ target_path -> -t
40
+ child_analyze_level -> -c
41
+ parent_analyze_level -> -p
42
+ name_level -> -n
43
+ output_path -> -o
44
+ ```
45
+
46
+ #### Export Mermaid Format
47
+
48
+ ```shell
49
+ js_dependency -s ./src -t ./src/App.vue -o ./mermaid.txt -c 2 -p 2 -n 1
50
+ ```
51
+
52
+ #### Export parents components list
53
+
54
+ ```shell
55
+ js_dependency parents -s ./src -t ./src/App.vue -o ./parents.txt -p 2
56
+ ```
57
+
58
+ #### Export children components list
59
+
60
+ ```shell
61
+ js_dependency childrent -s ./src -t ./src/App.vue -o ./children.txt -c 2
62
+ ```
63
+
64
+
65
+ ### By ruby code
66
+ If your javascript code is in `./src` and `./src/App.vue` is in the directory, you can analyze `./src/App.vue` dependency like this:
67
+
68
+ ```ruby
69
+ require 'js_dependency'
70
+
71
+
72
+ src_path = './src' # Root folder.
73
+ target_path = './src/App.vue' # Target file that you want to analyze.
74
+ child_analyze_level = 2 # Output level of child dependency.
75
+ parent_analyze_level = 2 # Output level of parent dependency.
76
+ output_path = './mermaid.txt' # Optional. Output file path
77
+ alias_paths = {'@' => '/src' } # Optional. Alias path.
78
+
79
+ # mermaid出力実行
80
+ JsDependency.export_mermaid(
81
+ src_path,
82
+ target_path,
83
+ child_analyze_level: child_analyze_level,
84
+ parent_analyze_level: parent_analyze_level,
85
+ output_path: output_path,
86
+ alias_paths: alias_paths)
87
+ ```
18
88
 
19
- TODO: Write usage instructions here
89
+ See `./mermaid.txt` of `output_path` for the result.
20
90
 
21
91
  ## Development
22
92
 
@@ -26,7 +96,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
26
96
 
27
97
  ## Contributing
28
98
 
29
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/js_dependency. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/js_dependency/blob/main/CODE_OF_CONDUCT.md).
99
+ Bug reports and pull requests are welcome on GitHub at https://github.com/junara/js_dependency. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/js_dependency/blob/main/CODE_OF_CONDUCT.md).
30
100
 
31
101
  ## License
32
102
 
data/exe/js_dependency ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "js_dependency"
5
+
6
+ JsDependency::Cli.start(ARGV)
@@ -31,7 +31,8 @@ Gem::Specification.new do |spec|
31
31
  spec.require_paths = ["lib"]
32
32
 
33
33
  spec.add_dependency "pathname"
34
-
34
+ spec.add_dependency "thor"
35
+ spec.add_dependency "yaml"
35
36
  spec.add_development_dependency "rspec"
36
37
  spec.add_development_dependency "rspec-parameterized"
37
38
  spec.add_development_dependency "rubocop"
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "thor"
4
+ require "yaml"
5
+
6
+ module JsDependency
7
+ class Cli < Thor
8
+ default_command :export_mermaid
9
+
10
+ desc "export_mermaid", "Output mermaid flowchart string."
11
+ option :src_path, type: :string, aliases: "-s", desc: "Root folder."
12
+ option :target_path, type: :string, aliases: "-t", desc: "Target file that you want to analyze."
13
+ option :output_path, type: :string, aliases: "-o", desc: "Output file path"
14
+ option :child_analyze_level, type: :numeric, aliases: "-c", desc: "Output level of child dependency"
15
+ option :parent_analyze_level, type: :numeric, aliases: "-p", desc: "Output level of parent dependency"
16
+ option :name_level, type: :numeric, aliases: "-n", desc: "Output name level"
17
+ def export_mermaid
18
+ pathname = Pathname.new(".js_dependency.yml")
19
+ args = {}
20
+ args = YAML.safe_load(pathname.read) if pathname.exist?
21
+
22
+ src_path = options[:src_path] || args["src_path"]
23
+ target_path = options[:target_path] || args["target_path"]
24
+ child_analyze_level = options[:child_analyze_level] || args["child_analyze_level"] || 2
25
+ parent_analyze_level = options[:parent_analyze_level] || args["parent_analyze_level"] || 2
26
+ output_path = options[:output_path] || args["output_path"] || nil
27
+ alias_paths = args["alias_paths"] || nil
28
+ name_level = options[:name_level] || args["name_level"] || 1
29
+
30
+ str = JsDependency.export_mermaid(
31
+ src_path,
32
+ target_path,
33
+ child_analyze_level: child_analyze_level,
34
+ parent_analyze_level: parent_analyze_level,
35
+ output_path: output_path,
36
+ alias_paths: alias_paths,
37
+ name_level: name_level
38
+ )
39
+
40
+ puts str
41
+ end
42
+
43
+ desc "parents", "export parents list"
44
+ option :src_path, type: :string, aliases: "-s", desc: "Root folder."
45
+ option :target_path, type: :string, aliases: "-t", desc: "Target file that you want to analyze."
46
+ option :output_path, type: :string, aliases: "-o", desc: "Output file path"
47
+ option :parent_analyze_level, type: :numeric, aliases: "-p", desc: "Output level of parent dependency"
48
+ def parents
49
+ pathname = Pathname.new(".js_dependency.yml")
50
+ args = {}
51
+ args = YAML.safe_load(pathname.read) if pathname.exist?
52
+
53
+ src_path = options[:src_path] || args["src_path"]
54
+ target_path = options[:target_path] || args["target_path"]
55
+ parent_analyze_level = options[:parent_analyze_level] || args["parent_analyze_level"] || 1
56
+ output_path = options[:output_path] || args["output_path"] || nil
57
+ alias_paths = args["alias_paths"] || nil
58
+
59
+ str = JsDependency.parents(
60
+ src_path,
61
+ target_path,
62
+ parent_analyze_level: parent_analyze_level,
63
+ output_path: output_path,
64
+ alias_paths: alias_paths
65
+ ).sort.uniq.join("\n")
66
+
67
+ puts str
68
+ end
69
+
70
+ desc "children", "export children list"
71
+ option :src_path, type: :string, aliases: "-s", desc: "Root folder."
72
+ option :target_path, type: :string, aliases: "-t", desc: "Target file that you want to analyze."
73
+ option :output_path, type: :string, aliases: "-o", desc: "Output file path"
74
+ option :child_analyze_level, type: :numeric, aliases: "-c", desc: "Output level of child dependency"
75
+ def children
76
+ pathname = Pathname.new(".js_dependency.yml")
77
+ args = {}
78
+ args = YAML.safe_load(pathname.read) if pathname.exist?
79
+
80
+ src_path = options[:src_path] || args["src_path"]
81
+ target_path = options[:target_path] || args["target_path"]
82
+ child_analyze_level = options[:child_analyze_level] || args["child_analyze_level"] || 1
83
+ output_path = options[:output_path] || args["output_path"] || nil
84
+ alias_paths = args["alias_paths"] || nil
85
+
86
+ str = JsDependency.children(
87
+ src_path,
88
+ target_path,
89
+ child_analyze_level: child_analyze_level,
90
+ output_path: output_path,
91
+ alias_paths: alias_paths
92
+ ).sort.uniq.join("\n")
93
+
94
+ puts str
95
+ end
96
+ end
97
+ end
@@ -12,11 +12,11 @@ module JsDependency
12
12
  def call
13
13
  str = @str
14
14
  # import defaultExport from 'module-name';
15
- paths = str.gsub(/import\s+\S+\s+from\s+"([^']+)"/).with_object([]) { |_, list| list << Regexp.last_match(1) }
15
+ paths = str.gsub(/import\s+\S+\s+from\s+"([^"]+)"/).with_object([]) { |_, list| list << Regexp.last_match(1) }
16
16
  paths += str.gsub(/import\s+\S+\s+from\s+'([^']+)'/).with_object([]) { |_, list| list << Regexp.last_match(1) }
17
17
 
18
18
  # import * as name from \"module-name\";
19
- paths += str.gsub(/import\s+\S+\s+as\s+\S+\s+from\s+"([^']+)"/).with_object([]) do |_, list|
19
+ paths += str.gsub(/import\s+\S+\s+as\s+\S+\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
20
20
  list << Regexp.last_match(1)
21
21
  end
22
22
  paths += str.gsub(/import\s+\S+\s+as\s+\S+\s+from\s+'([^']+)'/).with_object([]) do |_, list|
@@ -28,7 +28,7 @@ module JsDependency
28
28
  # import { export1 , export2 } from "module-name";
29
29
  # import { foo , bar } from "module-name/path/to/specific/un-exported/file";
30
30
  # import { export1 , export2 as alias2 , [...] } from "module-name";
31
- paths += str.gsub(/import\s+\{\s+.+\s+\}\s+from\s+"([^']+)"/).with_object([]) do |_, list|
31
+ paths += str.gsub(/import\s+\{\s+.+\s+\}\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
32
32
  list << Regexp.last_match(1)
33
33
  end
34
34
  paths += str.gsub(/import\s+\{\s+.+\s+\}\s+from\s+'([^']+)'/).with_object([]) do |_, list|
@@ -36,7 +36,7 @@ module JsDependency
36
36
  end
37
37
 
38
38
  # import defaultExport, { export1 [ , [...] ] } from "module-name";
39
- paths += str.gsub(/import\s+\S+,\s+\{\s+.+\s+\}\s+from\s+"([^']+)"/).with_object([]) do |_, list|
39
+ paths += str.gsub(/import\s+\S+,\s+\{\s+.+\s+\}\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
40
40
  list << Regexp.last_match(1)
41
41
  end
42
42
  paths += str.gsub(/import\s+\S+,\s+\{\s+.+\s+\}\s+from\s+'([^']+)'/).with_object([]) do |_, list|
@@ -44,7 +44,7 @@ module JsDependency
44
44
  end
45
45
 
46
46
  # import defaultExport, * as name from "module-name";
47
- paths += str.gsub(/import\s+\S+,\s+.+\s+as\s+\S+\s+from\s+"([^']+)"/).with_object([]) do |_, list|
47
+ paths += str.gsub(/import\s+\S+,\s+.+\s+as\s+\S+\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
48
48
  list << Regexp.last_match(1)
49
49
  end
50
50
  paths += str.gsub(/import\s+\S+,\s+.+\s+as\s+\S+\s+from\s+'([^']+)'/).with_object([]) do |_, list|
@@ -52,7 +52,7 @@ module JsDependency
52
52
  end
53
53
 
54
54
  # import "module-name";
55
- paths += str.gsub(/import\s+"([^']+)"/).with_object([]) do |_, list|
55
+ paths += str.gsub(/import\s+"([^"]+)"/).with_object([]) do |_, list|
56
56
  list << Regexp.last_match(1)
57
57
  end
58
58
  paths += str.gsub(/import\s+'([^']+)'/).with_object([]) do |_, list|
@@ -60,7 +60,7 @@ module JsDependency
60
60
  end
61
61
 
62
62
  # var promise = import("module-name");
63
- paths += str.gsub(/import\("([^']+)"\)/).with_object([]) do |_, list|
63
+ paths += str.gsub(/import\("([^"]+)"\)/).with_object([]) do |_, list|
64
64
  list << Regexp.last_match(1)
65
65
  end
66
66
  paths += str.gsub(/import\('([^']+)'\)/).with_object([]) do |_, list|
@@ -17,7 +17,7 @@ module JsDependency
17
17
 
18
18
  def export(name_level: 1)
19
19
  str = "flowchart #{orientation}\n"
20
- str + @list.sort_by(&:parent).uniq { |link| "#{link.parent}__#{link.child}" }.map do |link|
20
+ str + @list.uniq { |link| "#{link.parent}__#{link.child}" }.sort_by { |link| "#{link.parent}__#{link.child}" }.map do |link|
21
21
  "#{link.parent_module_name(name_level)} --> #{link.child_module_name(name_level)}"
22
22
  end.join("\n")
23
23
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JsDependency
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.1"
5
5
  end
data/lib/js_dependency.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require_relative "js_dependency/version"
4
4
  require_relative "js_dependency/index_creator"
5
5
  require_relative "js_dependency/mermaid/root"
6
+ require_relative "js_dependency/cli"
6
7
  require "pathname"
7
8
 
8
9
  module JsDependency
@@ -42,6 +43,42 @@ module JsDependency
42
43
  output
43
44
  end
44
45
 
46
+ def self.parents(src_path, target_path, alias_paths: nil, parent_analyze_level: 1, output_path: nil)
47
+ output_pathname = Pathname.new(output_path) if output_path
48
+ index = JsDependency::IndexCreator.call(src_path, alias_paths: alias_paths)
49
+
50
+ target_pathname = if Pathname.new(target_path).relative? && Pathname.new(target_path).exist?
51
+ Pathname.new(target_path).realpath
52
+ else
53
+ Pathname.new(target_path)
54
+ end
55
+ list = []
56
+ parents_paths(target_pathname, parent_analyze_level, index) do |parent_path, _child_path|
57
+ list << parent_path
58
+ end
59
+ output = list.uniq
60
+ output_pathname&.write(output.sort.join("\n"))
61
+ output
62
+ end
63
+
64
+ def self.children(src_path, target_path, alias_paths: nil, child_analyze_level: 1, output_path: nil)
65
+ output_pathname = Pathname.new(output_path) if output_path
66
+ index = JsDependency::IndexCreator.call(src_path, alias_paths: alias_paths)
67
+
68
+ target_pathname = if Pathname.new(target_path).relative? && Pathname.new(target_path).exist?
69
+ Pathname.new(target_path).realpath
70
+ else
71
+ Pathname.new(target_path)
72
+ end
73
+ list = []
74
+ children_paths(target_pathname, child_analyze_level, index) do |_parent_path, child_path|
75
+ list << child_path
76
+ end
77
+ output = list.uniq
78
+ output_pathname&.write(output.sort.join("\n"))
79
+ output
80
+ end
81
+
45
82
  # @param [String] target_path
46
83
  # @param [Hash] index
47
84
  # @return [Array]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: js_dependency
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - junara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-18 00:00:00.000000000 Z
11
+ date: 2022-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pathname
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: yaml
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rspec
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -111,10 +139,12 @@ dependencies:
111
139
  description: Analyze dependency using import for JavaScript.
112
140
  email:
113
141
  - jun5araki@gmail.com
114
- executables: []
142
+ executables:
143
+ - js_dependency
115
144
  extensions: []
116
145
  extra_rdoc_files: []
117
146
  files:
147
+ - ".js_dependency.yml.sample"
118
148
  - ".rspec"
119
149
  - ".rubocop.yml"
120
150
  - ".rubocop_todo.yml"
@@ -125,8 +155,10 @@ files:
125
155
  - LICENSE.txt
126
156
  - README.md
127
157
  - Rakefile
158
+ - exe/js_dependency
128
159
  - js_dependency.gemspec
129
160
  - lib/js_dependency.rb
161
+ - lib/js_dependency/cli.rb
130
162
  - lib/js_dependency/extract_import_path.rb
131
163
  - lib/js_dependency/extract_script_tag.rb
132
164
  - lib/js_dependency/index_creator.rb