js_dependency 0.3.5 → 0.3.6

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: aad89bc5047522fc38815da19020c395e7cd92ec262da2dce9dad5f7ddf40526
4
- data.tar.gz: dde5992cb4ecf9c27a2e645b064584296809c5dcd26d8d46625d88dbb393b9cb
3
+ metadata.gz: 201aa2538971ea1e938c32236410e2b31ada21abbcd9f90141b84b08b132e7bb
4
+ data.tar.gz: fd6c9eb934ea1f884f885e0bce39c989ab2536a10faa33f900bcc95418f41fa6
5
5
  SHA512:
6
- metadata.gz: 6fc657950c57fe7e6960fae9f4c1f1754ca42f223c2989e664ab686212978dd5cd8eb2ca19f610dc73c3492b6a2a17d5eabf6cca6a47bd7dc4c2e81850e04cb9
7
- data.tar.gz: 51f72bb8a23cd36ed25bc3aa9640d244b1c1534347d94d36cda812a7167046aba9c6d68bef5fbe544e9b2f2810fdd21af74ea0c8be0abf79272142b4b458a635
6
+ metadata.gz: 0641c8506997b0bf21e4ec9cede06096fbc9b523e8e4e39954bb4a63eb73d551772945efa73c7e1098b0481cf70b0fc87eb291140f57db6b7599901b958a1b78
7
+ data.tar.gz: c0c38b6e23cb29d54a40009aba2290543d9706366eb45a092cbbd4e47817972e161e0830bbc51081e76bbd85899247d02bf851345030126c715e2e4e6e2d6e8e
data/.rubocop_todo.yml CHANGED
@@ -1,13 +1,13 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2022-07-26 23:22:56 UTC using RuboCop version 1.31.2.
3
+ # on 2022-08-11 04:37:50 UTC using RuboCop version 1.34.1.
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
9
  # Offense count: 5
10
- # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
10
+ # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods, CountRepeatedAttributes.
11
11
  Metrics/AbcSize:
12
12
  Max: 42
13
13
 
@@ -17,12 +17,12 @@ Metrics/ClassLength:
17
17
  Max: 129
18
18
 
19
19
  # Offense count: 5
20
- # Configuration parameters: IgnoredMethods.
20
+ # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
21
21
  Metrics/CyclomaticComplexity:
22
22
  Max: 18
23
23
 
24
24
  # Offense count: 9
25
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
25
+ # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods.
26
26
  Metrics/MethodLength:
27
27
  Max: 26
28
28
 
@@ -32,7 +32,7 @@ Metrics/ParameterLists:
32
32
  Max: 9
33
33
 
34
34
  # Offense count: 5
35
- # Configuration parameters: IgnoredMethods.
35
+ # Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
36
36
  Metrics/PerceivedComplexity:
37
37
  Max: 19
38
38
 
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.6] - 2022-08-11
4
+
5
+ - Add src path in script tag for create index.
6
+
3
7
  ## [0.3.5] - 2022-07-27
4
8
 
5
9
  - Export orphan components list.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- js_dependency (0.3.5)
4
+ js_dependency (0.3.6)
5
5
  pathname
6
6
  thor
7
7
  yaml
@@ -18,7 +18,7 @@ GEM
18
18
  docile (1.4.0)
19
19
  json (2.6.2)
20
20
  parallel (1.22.1)
21
- parser (3.1.2.0)
21
+ parser (3.1.2.1)
22
22
  ast (~> 2.4.1)
23
23
  parslet (2.0.0)
24
24
  pathname (0.2.0)
@@ -50,17 +50,17 @@ GEM
50
50
  rspec (>= 2.13, < 4)
51
51
  unparser
52
52
  rspec-support (3.11.0)
53
- rubocop (1.32.0)
53
+ rubocop (1.34.1)
54
54
  json (~> 2.3)
55
55
  parallel (~> 1.10)
56
- parser (>= 3.1.0.0)
56
+ parser (>= 3.1.2.1)
57
57
  rainbow (>= 2.2.2, < 4.0)
58
58
  regexp_parser (>= 1.8, < 3.0)
59
59
  rexml (>= 3.2.5, < 4.0)
60
- rubocop-ast (>= 1.19.1, < 2.0)
60
+ rubocop-ast (>= 1.20.0, < 2.0)
61
61
  ruby-progressbar (~> 1.7)
62
62
  unicode-display_width (>= 1.4.0, < 3.0)
63
- rubocop-ast (1.19.1)
63
+ rubocop-ast (1.21.0)
64
64
  parser (>= 3.1.1.0)
65
65
  rubocop-performance (1.14.3)
66
66
  rubocop (>= 1.7.0, < 2.0)
data/README.md CHANGED
@@ -6,6 +6,8 @@ Welcome to your new gem! In this directory, you'll find the files you need to be
6
6
 
7
7
  Analyze import dependency of JavaScript code and export mermaid format.
8
8
 
9
+ "import dependency" is analyzed from import statement of JavaScript code and src path that is added to script tag.
10
+
9
11
  ## Installation
10
12
 
11
13
  Install the gem and add to the application's Gemfile by executing:
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JsDependency
4
+ module Extractor
5
+ class ExtractImportPath
6
+ # @param [String] str
7
+ def initialize(str)
8
+ @str = str
9
+ end
10
+
11
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
12
+ # @return [Array<String>]
13
+ def call
14
+ str = @str
15
+ # import defaultExport from 'module-name';
16
+ paths = str.gsub(/import\s+\S+\s+from\s+"([^"]+)"/).with_object([]) { |_, list| list << Regexp.last_match(1) }
17
+ paths += str.gsub(/import\s+\S+\s+from\s+'([^']+)'/).with_object([]) { |_, list| list << Regexp.last_match(1) }
18
+
19
+ # import * as name from \"module-name\";
20
+ paths += str.gsub(/import\s+\S+\s+as\s+\S+\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
21
+ list << Regexp.last_match(1)
22
+ end
23
+ paths += str.gsub(/import\s+\S+\s+as\s+\S+\s+from\s+'([^']+)'/).with_object([]) do |_, list|
24
+ list << Regexp.last_match(1)
25
+ end
26
+
27
+ # import { export1 } from \"module-name\";
28
+ # import { export1 as alias1 } from "module-name";
29
+ # import { export1 , export2 } from "module-name";
30
+ # import { foo , bar } from "module-name/path/to/specific/un-exported/file";
31
+ # import { export1 , export2 as alias2 , [...] } from "module-name";
32
+ paths += str.gsub(/import\s+\{\s+.+\s+\}\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
33
+ list << Regexp.last_match(1)
34
+ end
35
+ paths += str.gsub(/import\s+\{\s+.+\s+\}\s+from\s+'([^']+)'/).with_object([]) do |_, list|
36
+ list << Regexp.last_match(1)
37
+ end
38
+
39
+ # import defaultExport, { export1 [ , [...] ] } from "module-name";
40
+ paths += str.gsub(/import\s+\S+,\s+\{\s+.+\s+\}\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
41
+ list << Regexp.last_match(1)
42
+ end
43
+ paths += str.gsub(/import\s+\S+,\s+\{\s+.+\s+\}\s+from\s+'([^']+)'/).with_object([]) do |_, list|
44
+ list << Regexp.last_match(1)
45
+ end
46
+
47
+ # import defaultExport, * as name from "module-name";
48
+ paths += str.gsub(/import\s+\S+,\s+.+\s+as\s+\S+\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
49
+ list << Regexp.last_match(1)
50
+ end
51
+ paths += str.gsub(/import\s+\S+,\s+.+\s+as\s+\S+\s+from\s+'([^']+)'/).with_object([]) do |_, list|
52
+ list << Regexp.last_match(1)
53
+ end
54
+
55
+ # import "module-name";
56
+ paths += str.gsub(/import\s+"([^"]+)"/).with_object([]) do |_, list|
57
+ list << Regexp.last_match(1)
58
+ end
59
+ paths += str.gsub(/import\s+'([^']+)'/).with_object([]) do |_, list|
60
+ list << Regexp.last_match(1)
61
+ end
62
+
63
+ # var promise = import("module-name");
64
+ paths += str.gsub(/import\("([^"]+)"\)/).with_object([]) do |_, list|
65
+ list << Regexp.last_match(1)
66
+ end
67
+ paths += str.gsub(/import\('([^']+)'\)/).with_object([]) do |_, list|
68
+ list << Regexp.last_match(1)
69
+ end
70
+ paths.uniq.sort
71
+ end
72
+
73
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
74
+
75
+ def self.call(str)
76
+ new(str).call
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JsDependency
4
+ module Extractor
5
+ class ExtractScriptTag
6
+ # @param [String] str
7
+ def initialize(str)
8
+ @str = str
9
+ end
10
+
11
+ # @return [Array<String>]
12
+ def call
13
+ str = @str
14
+ scripts = str.gsub(%r{<script>(.+)</script>}m).with_object([]) do |_, list|
15
+ list << Regexp.last_match(1)
16
+ end
17
+
18
+ scripts.uniq.sort.join("\n")
19
+ end
20
+
21
+ # @param [String] str
22
+ # @return [String]
23
+ def self.call(str)
24
+ new(str).call
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JsDependency
4
+ module Extractor
5
+ class ExtractSrcPath
6
+ # @param [String] str
7
+ def initialize(str)
8
+ @str = str
9
+ end
10
+
11
+ # Extract JavaScript file (.js) in src path
12
+ # @return [Array<String>]
13
+ def call
14
+ str = @str
15
+ # <script src="module-name.js">
16
+ paths = str.gsub(/<script\s+src="([^']+)">/).with_object([]) { |_, list| list << Regexp.last_match(1) }
17
+ paths += str.gsub(/<script\s+src='([^']+)'>/).with_object([]) { |_, list| list << Regexp.last_match(1) }
18
+
19
+ filter_javascript_paths(paths).uniq.sort
20
+ end
21
+
22
+ def self.call(str)
23
+ new(str).call
24
+ end
25
+
26
+ private
27
+
28
+ # Filter JavaScript file (.js) from Array of String
29
+ # @param [Array<String>] paths
30
+ # @return [Array<String>]
31
+ def filter_javascript_paths(paths)
32
+ paths.filter do |path|
33
+ path.end_with?(".js")
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "extract_script_tag"
4
- require_relative "extract_import_path"
3
+ require_relative "extractor/extract_script_tag"
4
+ require_relative "extractor/extract_import_path"
5
+ require_relative "extractor/extract_src_path"
5
6
  require_relative "replace_path_alias"
6
7
  require_relative "pathname_utility"
7
8
 
@@ -45,6 +46,7 @@ module JsDependency
45
46
 
46
47
  src_pathname.glob(pattern).each_with_object({}) do |component_pathname, obj|
47
48
  import_pathnames = import_pathnames_from(component_pathname, alias_paths)
49
+ import_pathnames += src_javascript_pathnames_from(component_pathname, alias_paths)
48
50
 
49
51
  obj[component_pathname.to_s] = import_pathnames.map(&:to_s)
50
52
  if component_pathname.basename.to_s == "index.js"
@@ -60,11 +62,22 @@ module JsDependency
60
62
  def import_pathnames_from(component_pathname, alias_paths)
61
63
  component_dirname = component_pathname.dirname
62
64
  script_str = extract_script_string(component_pathname)
63
- JsDependency::ExtractImportPath.call(script_str).map do |import_path|
65
+ JsDependency::Extractor::ExtractImportPath.call(script_str).map do |import_path|
64
66
  standardize_path(import_path, alias_paths, component_dirname)
65
67
  end
66
68
  end
67
69
 
70
+ # @param [Pathname] component_pathname
71
+ # @param [Array<String>] alias_paths
72
+ # @return [Array<Pathname>]
73
+ def src_javascript_pathnames_from(component_pathname, alias_paths)
74
+ component_dirname = component_pathname.dirname
75
+ str = component_pathname.read
76
+ JsDependency::Extractor::ExtractSrcPath.call(str).map do |src_path|
77
+ standardize_path(src_path, alias_paths, component_dirname)
78
+ end
79
+ end
80
+
68
81
  # @param [String] import_path
69
82
  # @param [Array<String>] alias_paths
70
83
  # @param [Pathname] component_dirname
@@ -91,7 +104,7 @@ module JsDependency
91
104
  extname = pathname.extname
92
105
  return str unless extname == ".vue"
93
106
 
94
- JsDependency::ExtractScriptTag.call(str)
107
+ JsDependency::Extractor::ExtractScriptTag.call(str)
95
108
  end
96
109
 
97
110
  # @param [String] path
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JsDependency
4
- VERSION = "0.3.5"
4
+ VERSION = "0.3.6"
5
5
  end
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.3.5
4
+ version: 0.3.6
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-26 00:00:00.000000000 Z
11
+ date: 2022-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pathname
@@ -159,8 +159,9 @@ files:
159
159
  - js_dependency.gemspec
160
160
  - lib/js_dependency.rb
161
161
  - lib/js_dependency/cli.rb
162
- - lib/js_dependency/extract_import_path.rb
163
- - lib/js_dependency/extract_script_tag.rb
162
+ - lib/js_dependency/extractor/extract_import_path.rb
163
+ - lib/js_dependency/extractor/extract_script_tag.rb
164
+ - lib/js_dependency/extractor/extract_src_path.rb
164
165
  - lib/js_dependency/index_creator.rb
165
166
  - lib/js_dependency/mermaid/nodes_link.rb
166
167
  - lib/js_dependency/mermaid/root.rb
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module JsDependency
4
- class ExtractImportPath
5
- # @param [String] str
6
- def initialize(str)
7
- @str = str
8
- end
9
-
10
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
11
- # @return [Array<String>]
12
- def call
13
- str = @str
14
- # import defaultExport from 'module-name';
15
- paths = str.gsub(/import\s+\S+\s+from\s+"([^"]+)"/).with_object([]) { |_, list| list << Regexp.last_match(1) }
16
- paths += str.gsub(/import\s+\S+\s+from\s+'([^']+)'/).with_object([]) { |_, list| list << Regexp.last_match(1) }
17
-
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|
20
- list << Regexp.last_match(1)
21
- end
22
- paths += str.gsub(/import\s+\S+\s+as\s+\S+\s+from\s+'([^']+)'/).with_object([]) do |_, list|
23
- list << Regexp.last_match(1)
24
- end
25
-
26
- # import { export1 } from \"module-name\";
27
- # import { export1 as alias1 } from "module-name";
28
- # import { export1 , export2 } from "module-name";
29
- # import { foo , bar } from "module-name/path/to/specific/un-exported/file";
30
- # import { export1 , export2 as alias2 , [...] } from "module-name";
31
- paths += str.gsub(/import\s+\{\s+.+\s+\}\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
32
- list << Regexp.last_match(1)
33
- end
34
- paths += str.gsub(/import\s+\{\s+.+\s+\}\s+from\s+'([^']+)'/).with_object([]) do |_, list|
35
- list << Regexp.last_match(1)
36
- end
37
-
38
- # import defaultExport, { export1 [ , [...] ] } from "module-name";
39
- paths += str.gsub(/import\s+\S+,\s+\{\s+.+\s+\}\s+from\s+"([^"]+)"/).with_object([]) do |_, list|
40
- list << Regexp.last_match(1)
41
- end
42
- paths += str.gsub(/import\s+\S+,\s+\{\s+.+\s+\}\s+from\s+'([^']+)'/).with_object([]) do |_, list|
43
- list << Regexp.last_match(1)
44
- end
45
-
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|
48
- list << Regexp.last_match(1)
49
- end
50
- paths += str.gsub(/import\s+\S+,\s+.+\s+as\s+\S+\s+from\s+'([^']+)'/).with_object([]) do |_, list|
51
- list << Regexp.last_match(1)
52
- end
53
-
54
- # import "module-name";
55
- paths += str.gsub(/import\s+"([^"]+)"/).with_object([]) do |_, list|
56
- list << Regexp.last_match(1)
57
- end
58
- paths += str.gsub(/import\s+'([^']+)'/).with_object([]) do |_, list|
59
- list << Regexp.last_match(1)
60
- end
61
-
62
- # var promise = import("module-name");
63
- paths += str.gsub(/import\("([^"]+)"\)/).with_object([]) do |_, list|
64
- list << Regexp.last_match(1)
65
- end
66
- paths += str.gsub(/import\('([^']+)'\)/).with_object([]) do |_, list|
67
- list << Regexp.last_match(1)
68
- end
69
- paths.uniq.sort
70
- end
71
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
72
-
73
- def self.call(str)
74
- new(str).call
75
- end
76
- end
77
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module JsDependency
4
- class ExtractScriptTag
5
- # @param [String] str
6
- def initialize(str)
7
- @str = str
8
- end
9
-
10
- # @return [Array<String>]
11
- def call
12
- str = @str
13
- scripts = str.gsub(%r{<script>(.+)</script>}m).with_object([]) do |_, list|
14
- list << Regexp.last_match(1)
15
- end
16
-
17
- scripts.uniq.sort.join("\n")
18
- end
19
-
20
- # @param [String] str
21
- # @return [String]
22
- def self.call(str)
23
- new(str).call
24
- end
25
- end
26
- end