lux_assets 0.2.4 → 0.2.9

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: 4ba2b3c00e281b88fce7778d3625bfb78039d023ad288945a5835b0878721e40
4
- data.tar.gz: ca4bf2c15022da0ed16e3662aeb0a6509ff9d76e6d64941a9788f3c51e9e7297
3
+ metadata.gz: c75902022d21e66908e7e48471de558834e110f4626f9354bc273bd803eddbf0
4
+ data.tar.gz: ff67b5d01baa0da7d1483aa7d1c03d0257f6e76ec1c99c21fed7c622f3a375ea
5
5
  SHA512:
6
- metadata.gz: 8bddce098f693c140b676bfaf4d276758ee2d1d90819be1f3ef64d61596336b56390ade0def18cd4c68a5ac465fe84516de66e5d5f8738dc8f343f632c04e0ed
7
- data.tar.gz: 628c3d656ac78aae471a951d9ea338bedf7c5b48a697280e1a56929375ab44d9c8221f1eb8d2242365f1774deee63bdec9326af8e4e85c2af538d06aae83ee6b
6
+ metadata.gz: 89954e9a9b594a6a11ae234b163a01222be0d7f9344d1cbe3ec1d87c801be5b17539ba618d15dcf6f1c2918047a22f4d51ef7f6285ed5164b7bb978e50451ad4
7
+ data.tar.gz: da9b2a0ca0c94bc94131a24f9075698507ca766fa3cd6f4b4663faec33b20a74d27857c7e9e3ae90859779215bb5e212384fe08abddb886e03b37307f1c1c7ef
data/README.md CHANGED
@@ -128,15 +128,16 @@ LuxAssets.files(:js, :main)
128
128
  LuxAssets.files('js/main')
129
129
  LuxAssets.js(:main).files
130
130
 
131
- # compile single asset
131
+ # compile single asset with debug info for dev
132
132
  LuxAssets.compile('js/main/index.coffee')
133
133
  LuxAssets.compile('css/main/index.scss')
134
134
 
135
- # compile file group
135
+ # compile file group for production
136
136
  LuxAssets.js(:main).compile
137
137
  LuxAssets.css(:main).compile
138
+ LuxAssets.css(:main).compile
138
139
 
139
- # compile all assets
140
+ # compile all assets for production
140
141
  LuxAssets.compile_all do |name, path|
141
142
  puts "Compile #{name.green} -> #{path}"
142
143
  end
@@ -3,9 +3,10 @@
3
3
  class LuxAssets::Asset
4
4
 
5
5
  def initialize ext, name
6
- @ext = ext == :js ? :js : :css
6
+ raise ArgumentError.new('name not deinfed') if name.empty?
7
+ @ext = ext.to_sym == :js ? :js : :css
7
8
  @name = name.to_s
8
- @files = LuxAssets.to_h[ext][@name]
9
+ @files = LuxAssets.to_h[@ext][@name]
9
10
  @target = "#{@ext}/#{@name}"
10
11
  end
11
12
 
@@ -26,7 +27,7 @@ class LuxAssets::Asset
26
27
  if file.is_a?(Proc)
27
28
  @data.push file.call
28
29
  else
29
- @data.push LuxAssets::Element.new(file).compile
30
+ @data.push LuxAssets.compile file, production: true
30
31
  end
31
32
  end
32
33
 
@@ -78,7 +79,8 @@ class LuxAssets::Asset
78
79
  def compile_js
79
80
  save_data @data.join(";\n") do
80
81
  # babel fix and minify
81
- LuxAssets::Cli.run 'node_modules/babel-cli/.bin/babel --minified --no-comments --compact true -o "%{file}" "%{file}"' % { file: @asset_path }
82
+ command = 'node_modules/babel-cli/.bin/babel --minified --no-comments --compact true -o "%{file}" "%{file}"' % { file: @asset_path }
83
+ LuxAssets::Cli.run command, message: "Babel filter and minify: #{@asset_path}"
82
84
  end
83
85
  end
84
86
 
@@ -87,7 +89,7 @@ class LuxAssets::Asset
87
89
  tag_public_assets
88
90
 
89
91
  #autoprefixer
90
- LuxAssets::Cli.run './node_modules/.bin/autoprefixer-cli %s' % @asset_path
92
+ LuxAssets::Cli.run './node_modules/.bin/autoprefixer-cli %s' % @asset_path, message: "Autoprefixer: #{@asset_path}"
91
93
  end
92
94
  end
93
95
  end
@@ -3,7 +3,7 @@
3
3
  module LuxAssets
4
4
  extend self
5
5
 
6
- CONFIG_PATH = Pathname.new ENV.fetch('ASSETS_CONFIG') { './config/assets.rb' }
6
+ CONFIG_PATH ||= Pathname.new ENV.fetch('ASSETS_CONFIG') { './config/assets.rb' }
7
7
 
8
8
  ASSET_TYPES ||= {
9
9
  js: ['js', 'coffee', 'ts'],
@@ -76,16 +76,13 @@ module LuxAssets
76
76
  # get list of files in the resource
77
77
  def files ext, name=nil
78
78
  ext, name = ext.split('/', 2) unless name
79
- ext = ext.to_sym
80
-
81
- raise ArgumentError.new('name not deinfed') if name.empty?
82
-
83
- to_h[ext][name.to_s]
79
+ Asset.new(ext, name).files
84
80
  end
85
81
 
86
82
  # compile single asset
87
- def compile path
88
- LuxAssets::Element.new(path).compile
83
+ def compile path, opts={}
84
+ opts[:production] = false if opts[:production].nil?
85
+ LuxAssets::Element.new(path).send :compile, opts
89
86
  end
90
87
 
91
88
  # compile all assets
@@ -101,7 +98,7 @@ module LuxAssets
101
98
  # gzip if needed
102
99
  files = Dir['./public/assets/*.css'] + Dir['./public/assets/*.js']
103
100
  files.each do |file|
104
- LuxAssets::Cli.run 'gzip -k %s' % file unless File.exist?('%s.gz' % file)
101
+ LuxAssets::Cli.run('gzip -k %s' % file, message: "Gzip: #{file}") unless File.exist?('%s.gz' % file)
105
102
  end
106
103
 
107
104
  # touch all files and reset the timestamp
@@ -15,8 +15,8 @@ module LuxAssets::Cli
15
15
  puts text
16
16
  end
17
17
 
18
- def run what, cache_file=nil
19
- puts what.yellow
18
+ def run what, opts={}
19
+ puts (opts[:message] || what).yellow
20
20
 
21
21
  stdin, stdout, stderr, wait_thread = Open3.popen3(what)
22
22
 
@@ -29,8 +29,15 @@ module LuxAssets::Cli
29
29
  error = nil if error && error.include?('Rendering Complete, saving .css file...')
30
30
 
31
31
  if error
32
- cache_file.unlink if cache_file && cache_file.exist?
32
+ puts '--- command '
33
+ puts what.yellow
34
+ puts '--- error response'
35
+ opts[:cache_file].unlink if opts[:cache_file] && opts[:cache_file].exist?
33
36
  warn error
37
+ puts '--- end'
38
+ false
39
+ else
40
+ true
34
41
  end
35
42
  end
36
43
 
@@ -38,17 +45,44 @@ module LuxAssets::Cli
38
45
  def monitor
39
46
  puts 'Lux assets - looking for file changes'
40
47
 
41
- files = LuxAssets.to_h.values.map(&:values).flatten.map { |it| Pathname.new it }
48
+ list = LuxAssets
49
+ .to_h
50
+ .values
51
+ .map(&:values)
52
+ .flatten
53
+ .map { |it| Pathname.new it }
54
+
55
+ files = list.inject({}) do |h, file|
56
+ if file.to_s.end_with?('.scss')
57
+ # if target file is scss, monitor all child css and scss files
58
+ h[file.to_s] = Dir['%s/**/*' % file.dirname]
59
+ .select { |file| file.end_with?('.scss') || file.end_with?('.css') }
60
+ .map { |it| Pathname.new it }
61
+
62
+ else
63
+ # othervise monitor only target file
64
+ h[file.to_s] = [file]
65
+ end
66
+
67
+ h
68
+ end
69
+
42
70
  last_change = Time.now
43
71
 
44
72
  while true
45
- for file in files
46
- if file.mtime > last_change
47
- last_change = Time.now
48
- LuxAssets.compile file.to_s
73
+ changed = false
74
+
75
+ for key, values in files
76
+ for file in values
77
+ if file.mtime > last_change
78
+ changed = true
79
+ LuxAssets.compile key, force: true
80
+ end
49
81
  end
50
82
  end
51
83
 
84
+ last_change = Time.now if changed
85
+
52
86
  sleep 2
53
87
  end
54
88
  end
@@ -1,24 +1,17 @@
1
1
  # One file that can be scss, js, coffee, ts, etc...
2
2
 
3
3
  class LuxAssets::Element
4
+
4
5
  def initialize source
5
6
  @source = Pathname.new source
6
- @cache = Pathname.new './tmp/assets/%s' % source.gsub('/','-')
7
- end
8
7
 
9
- def compile
10
- method_name = 'compile_%s' % @source.to_s.split('.').last.downcase
11
-
12
- if respond_to?(method_name, true)
13
- cached || send(method_name)
14
- else
15
- @source.read
16
- end
8
+ source = source.sub(/^\.\//, '').sub(/^\//, '').gsub('/', '-')
9
+ source = '%s-%s' % [@production ? :p : :d, source] if content_type == 'text/css'
10
+ @cache = Pathname.new './tmp/assets/%s' % source
17
11
  end
18
12
 
19
13
  def content_type
20
14
  @ext ||= @source.to_s.split('.').last.to_sym
21
-
22
15
  [:css, :scss].include?(@ext) ? 'text/css' : 'text/javascript'
23
16
  end
24
17
 
@@ -26,9 +19,16 @@ class LuxAssets::Element
26
19
 
27
20
  private
28
21
 
29
- def production?
30
- # if building from Rake then we are compiling for production
31
- defined?(Rake) || $0.include?('/lux_assets')
22
+ # use LuxAsset.compile
23
+ def compile force:nil, production:nil
24
+ @production = production || false
25
+ method_name = 'compile_%s' % @source.to_s.split('.').last.downcase
26
+
27
+ if respond_to?(method_name, true)
28
+ (!force && cached) || send(method_name)
29
+ else
30
+ @source.read
31
+ end
32
32
  end
33
33
 
34
34
  def cached
@@ -37,22 +37,24 @@ class LuxAssets::Element
37
37
 
38
38
  def compile_coffee
39
39
  coffee_path = './node_modules/coffee-script/bin/coffee'
40
- coffee_opts = production? ? '-cp' : '-Mcp --no-header'
41
-
42
- LuxAssets::Cli.run "#{coffee_path} #{coffee_opts} '#{@source}' > '#{@cache}'", @cache
40
+ coffee_opts = @production ? '-cp' : '-Mcp --no-header'
43
41
 
44
- data = @cache.read
45
- data = data.gsub(%r{//#\ssourceURL=[\w\-\.\/]+/app/assets/}, '//# sourceURL=/raw_asset/')
42
+ if LuxAssets::Cli.run("#{coffee_path} #{coffee_opts} '#{@source}' > '#{@cache}'", cache_file: @cache, message: "Compile Coffee: #{@source}")
43
+ data = @cache.read
44
+ data = data.gsub(%r{//#\ssourceURL=[\w\-\.\/]+/app/assets/}, '//# sourceURL=/raw_asset/')
46
45
 
47
- @cache.write data
46
+ @cache.write data
48
47
 
49
- data
48
+ data
49
+ else
50
+ nil
51
+ end
50
52
  end
51
53
 
52
54
  def compile_scss
53
55
  node_sass = './node_modules/node-sass/bin/node-sass'
54
- node_opts = production? ? '--output-style compressed' : '--source-comments'
55
- LuxAssets::Cli.run "#{node_sass} #{node_opts} '#{@source}' '#{@cache}'", @cache
56
+ node_opts = @production ? '--output-style compressed' : '--source-comments'
57
+ LuxAssets::Cli.run "#{node_sass} #{node_opts} '#{@source}' '#{@cache}'", cache_file: @cache, message: "Compile SCSS: #{@source}"
56
58
  @cache.read
57
59
  end
58
60
  alias :compile_sass :compile_scss
@@ -63,7 +65,7 @@ class LuxAssets::Element
63
65
  end
64
66
 
65
67
  def compile_ts
66
- LuxAssets::Cli.run "node_modules/typescript/.bin/tsc --outFile '#{@cache}' '#{@source}'"
68
+ LuxAssets::Cli.run "node_modules/typescript/.bin/tsc --outFile '#{@cache}' '#{@source}'", cache_file: @cache, message: "Compile TypeScript: #{@source}"
67
69
  end
68
70
 
69
71
  end
data/lib/lux_assets.rb CHANGED
@@ -13,9 +13,8 @@ require_relative './lux_assets/manifest'
13
13
 
14
14
  # lux framework bindings
15
15
  if defined?(Lux)
16
+ require_relative './vendor/lux/misc'
16
17
  require_relative './vendor/lux/assets_helper'
17
- require_relative './vendor/lux/assets_plugin'
18
- require_relative './vendor/lux/assets_routes'
19
18
  end
20
19
 
21
20
  # rake bindings
@@ -31,3 +31,28 @@ Lux.app.before do
31
31
  body file.exist? ? file.read : "error: File not found"
32
32
  end
33
33
  end
34
+
35
+ # additional info for "lux config" cli
36
+ Lux::Config.info do
37
+ puts
38
+ puts 'assets:'
39
+ for ext in LuxAssets.to_h.keys
40
+ for key, value in LuxAssets.to_h[ext]
41
+ name = ' LuxAsset.%s(:%s)' % [ext, key]
42
+ print name.ljust(35)
43
+ puts ' - %s' % value.length.pluralize(:file)
44
+ end
45
+ end
46
+ end
47
+
48
+ # include files from a plugin
49
+ module LuxAssets
50
+ def plugin name
51
+ # load pluigin if needed
52
+ Lux.plugin name
53
+
54
+ plugin = Lux.plugin.get name
55
+ add '%s/**' % plugin[:folder]
56
+ end
57
+ end
58
+
@@ -0,0 +1 @@
1
+ body p{color:blue}
@@ -0,0 +1,10 @@
1
+ /* line 2, spec/assets/css/test.scss */
2
+ body p {
3
+ color: red; }
4
+
5
+ /* line 3, spec/assets/css/test.scss */
6
+ body div {
7
+ display: grid;
8
+ transition: all .5s;
9
+ user-select: none;
10
+ background: linear-gradient(to bottom, white, black); }
@@ -0,0 +1,7 @@
1
+ (function() {
2
+ alert(123);
3
+
4
+ }).call(this);
5
+
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsic3BlYy9hc3NldHMvanMvdGVzdC5jb2ZmZWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFBQSxLQUFBLENBQU0sR0FBTjtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiYWxlcnQgMTIzXG5cbiJdfQ==
7
+ //# sourceURL=/Users/dux/dev/apps/my/gems/lux_assets/spec/assets/js/test.coffee
@@ -0,0 +1,5 @@
1
+ function greeter(person) {
2
+ return "Hello, " + person.firstName + " " + person.lastName;
3
+ }
4
+ var user = { firstName: "Jane", lastName: "User" };
5
+ document.body.innerHTML = greeter(user);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lux_assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-03 00:00:00.000000000 Z
11
+ date: 2018-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -70,8 +70,7 @@ files:
70
70
  - "./lib/lux_assets/element.rb"
71
71
  - "./lib/lux_assets/manifest.rb"
72
72
  - "./lib/vendor/lux/assets_helper.rb"
73
- - "./lib/vendor/lux/assets_plugin.rb"
74
- - "./lib/vendor/lux/assets_routes.rb"
73
+ - "./lib/vendor/lux/misc.rb"
75
74
  - "./lib/vendor/tasks.rb"
76
75
  - "./misc/assets.rb"
77
76
  - "./node_modules/abbrev/LICENSE"
@@ -7356,7 +7355,6 @@ files:
7356
7355
  - "./node_modules/yargs/package.json"
7357
7356
  - "./node_modules/yargs/yargs.js"
7358
7357
  - "./package.json"
7359
- - "./public/manifest.json"
7360
7358
  - "./spec/assets/assets.rb"
7361
7359
  - "./spec/assets/css/test.css"
7362
7360
  - "./spec/assets/css/test.scss"
@@ -7365,6 +7363,10 @@ files:
7365
7363
  - "./spec/assets/js/test.ts"
7366
7364
  - "./spec/spec_helper.rb"
7367
7365
  - "./spec/tests/common_spec.rb"
7366
+ - "./tmp/assets/d-spec-assets-css-test.css"
7367
+ - "./tmp/assets/d-spec-assets-css-test.scss"
7368
+ - "./tmp/assets/spec-assets-js-test.coffee"
7369
+ - "./tmp/assets/spec-assets-js-test.ts"
7368
7370
  - "./yarn.lock"
7369
7371
  - bin/lux_assets
7370
7372
  homepage: https://github.com/dux/lux_assets
@@ -1,13 +0,0 @@
1
- module LuxAssets
2
-
3
- # include files from a plugin
4
- def plugin name
5
- # load pluigin if needed
6
- Lux.plugin name
7
-
8
- plugin = Lux.plugin.get name
9
- add '%s/**' % plugin[:folder]
10
- end
11
-
12
- end
13
-
data/public/manifest.json DELETED
@@ -1 +0,0 @@
1
- {"files":{}}