jekyll-postcss 0.2.2 → 0.3.0

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: f1cfaea0a05a10e083038206f5834b33df1b64c845c444aba901a7966e3a505d
4
- data.tar.gz: 7a0a5f58661e27b29bf050056a186d599249e08e509c6610bbf441ab23454d68
3
+ metadata.gz: 40a31b02e606d19f4ad21d91e81bd795664bc41d7bfff60e7b4c7c85e17689ad
4
+ data.tar.gz: e4a7b58085f0068b69b8e9e669570de8ccc59c488a3ccd9bb5c6cf91109ee11a
5
5
  SHA512:
6
- metadata.gz: 5a589cb99ed995104b7b277e043ca0b98532790536585015f3910e69444e8d87bd3b2c4009c0187be1a03674ccffa65735c4b1977fdbc4b82088237839acae30
7
- data.tar.gz: 67f350a07a6aeb95f456e96ca738f2c19d777812ce6304d14fbc1b0943c398b41d980f41f5db02e0c78220a12088577cc73f734c114ab37e7dc330621a4bd87b
6
+ metadata.gz: d5457966cfe09b1a8a96ae0185a91f587fc6316b5753d714e87c9dea4a8a9f5744674b0215b7d788df51abbaad29562e986a804fd623ade77f186f76364891f9
7
+ data.tar.gz: 24e2c81a3efb38fab5190745fce7b31af5083311d12db6e226383fe562655ded4a4b326e1cc8db271449194315dd70fcdf9f1ebce61c0b5410baefab8c83a3cc
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.0
4
+
5
+ - Update rake
6
+ - Performance improvement
7
+
3
8
  ## 0.2.2
4
9
 
5
10
  - Use `Array.unshift` instead of `Array.prepend` to support older Ruby versions
data/README.md CHANGED
@@ -24,27 +24,41 @@ plugins:
24
24
 
25
25
  ## Usage
26
26
 
27
- Make sure you have [postcss-cli](https://github.com/postcss/postcss-cli) installed and has its binary located at `./node_modules/.bin/postcss`.
27
+ Make sure you have [postcss](https://github.com/postcss/postcss) installed.
28
28
 
29
29
  Add your PostCSS plugins to a `postcss.config.js` file in the root of your repository.
30
30
 
31
31
  ```javascript
32
32
  // postcss.config.js
33
33
 
34
- module.exports {
34
+ module.exports = {
35
35
  plugins: [
36
36
  require("autoprefixer") // example of plugin you might use
37
+ ...(process.env.JEKYLL_ENV == "production" // example of only using a plugin in production
38
+ ? [require("cssnano")({ preset: "default" })]
39
+ : [])
37
40
  ]
38
41
  };
39
42
  ```
40
43
 
41
44
  All files with the `.css` extension will now be processed by PostCSS.
42
45
 
43
-
44
46
  ### Note
45
47
 
46
48
  `jekyll-postcss` will cache your styles to avoid rebuilding when nothing has changed.
47
49
 
50
+ Also note that your `.css` files still need to have a [front matter](https://jekyllrb.com/docs/step-by-step/03-front-matter/) for them to be processed by Jekyll.
51
+
52
+ ```
53
+ ---
54
+ ---
55
+
56
+ /* Example using Tailwind */
57
+ @tailwind base;
58
+ @tailwind components;
59
+ @tailwind utilities;
60
+ ```
61
+
48
62
  ## Development
49
63
 
50
64
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env bash
2
+
3
+ script_status="running"
4
+
5
+ # Start the program in the background
6
+ exec "$@" &
7
+ pid1=$!
8
+
9
+ shutdown(){
10
+ local pid1=$1
11
+ local pid2=$2
12
+
13
+ if [ $script_status = "running" ]; then
14
+ script_status="shutting down"
15
+ wait "$pid1"
16
+ ret=$?
17
+ kill -KILL "$pid2"
18
+ exit $ret
19
+ fi
20
+ }
21
+
22
+ # Silence warnings from here on
23
+ exec >/dev/null 2>&1
24
+
25
+ # Read from stdin in the background and
26
+ # kill running program when stdin closes
27
+ exec 0<&0 "$(
28
+ while read -r; do :; done
29
+ kill -KILL "$pid1"
30
+ )" &
31
+ pid2=$!
32
+
33
+ # Clean up
34
+ trap 'shutdown $pid1 $pid2' INT HUP TERM
35
+ shutdown "$pid1" "$pid2"
36
+
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+
3
+ const postcss = require(require.resolve("postcss", {paths: [process.cwd()]}));
4
+ const config = require(`${process.cwd()}/postcss.config.js`);
5
+ const net = require("net");
6
+
7
+ const server = net.createServer((c) => {
8
+ c.on('data', (data) => {
9
+ postcss(config.plugins)
10
+ .process(JSON.parse(data).raw_content, {from: "stdin"})
11
+ .then(result => {
12
+ const packet = { compiled_css: result.toString() };
13
+ c.write(`${JSON.stringify(packet)}\n`);
14
+
15
+ return;
16
+ })
17
+ .catch(error => {
18
+ console.log("PostCSS Error!\n");
19
+ console.log(error.toString());
20
+ });
21
+ });
22
+ });
23
+
24
+ server.on('error', (err) => {
25
+ console.log("PostCSS Server Error!\n");
26
+ throw err;
27
+ });
28
+
29
+ server.listen(8124, () => {
30
+ console.log("PostCSS Server listening on port 8124...");
31
+ });
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
32
32
  spec.add_development_dependency "bundler", "~> 1.17"
33
33
  spec.add_development_dependency "jekyll",
34
34
  ENV["JEKYLL_VERSION"] ? "~> #{ENV["JEKYLL_VERSION"]}" : ">= 2.0"
35
- spec.add_development_dependency "rake", "~> 10.0"
35
+ spec.add_development_dependency "rake", ">= 12.3.3"
36
36
  spec.add_development_dependency "rspec", "~> 3.0"
37
37
  spec.add_development_dependency "rubocop-jekyll", "~> 0.5.1"
38
38
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "socket"
4
+ require "json"
5
+
6
+ module PostCss
7
+ class Socket
8
+ START_SCRIPT = File.expand_path("../../bin/command", __dir__)
9
+ POSTCSS_SCRIPT = File.expand_path("../../bin/postcss", __dir__)
10
+
11
+ def initialize
12
+ Thread.new do
13
+ system "#{START_SCRIPT} #{POSTCSS_SCRIPT}"
14
+ end
15
+
16
+ @postcss = nil
17
+ while @postcss.nil?
18
+ begin
19
+ @postcss = TCPSocket.open("localhost", 8124)
20
+ rescue StandardError
21
+ nil # Suppressing exceptions
22
+ end
23
+ end
24
+ end
25
+
26
+ def write(data)
27
+ @postcss.puts JSON.dump(:raw_content => data)
28
+ end
29
+
30
+ def read
31
+ JSON.parse(@postcss.gets.chomp)["compiled_css"]
32
+ end
33
+ end
34
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module PostCss
5
- VERSION = "0.2.2"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "open3"
4
3
  require "digest"
4
+ require_relative "../../jekyll-postcss/socket"
5
5
 
6
6
  module Jekyll
7
7
  module Converters
@@ -12,6 +12,7 @@ module Jekyll
12
12
  def initialize(config = {})
13
13
  super
14
14
 
15
+ @socket = config.fetch("socket") { ::PostCss::Socket.new }
15
16
  @raw_cache = nil
16
17
  @import_raw_cache = {}
17
18
  @converted_cache = nil
@@ -26,7 +27,7 @@ module Jekyll
26
27
  end
27
28
 
28
29
  def convert(content)
29
- raise PostCssNotFoundError unless File.file?("./node_modules/.bin/postcss")
30
+ raise PostCssNotFoundError unless Dir.exist?("./node_modules/postcss")
30
31
 
31
32
  @raw_digest = Digest::MD5.hexdigest content
32
33
  @raw_import_digests = import_digests(content)
@@ -35,12 +36,9 @@ module Jekyll
35
36
  @raw_cache = @raw_digest.dup
36
37
  @import_raw_cache = @raw_import_digests.dup
37
38
 
38
- compiled_css, status =
39
- Open3.capture2("./node_modules/.bin/postcss", :stdin_data => content)
39
+ @socket.write content
40
40
 
41
- raise PostCssRuntimeError unless status.success?
42
-
43
- @converted_cache = compiled_css
41
+ @converted_cache = @socket.read
44
42
  end
45
43
 
46
44
  reset
@@ -75,4 +73,3 @@ module Jekyll
75
73
  end
76
74
 
77
75
  class PostCssNotFoundError < RuntimeError; end
78
- class PostCssRuntimeError < RuntimeError; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-postcss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mitchell Hanberg
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-06-06 00:00:00.000000000 Z
11
+ date: 2020-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: 12.3.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: 12.3.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -98,10 +98,13 @@ files:
98
98
  - LICENSE.txt
99
99
  - README.md
100
100
  - Rakefile
101
+ - bin/command
101
102
  - bin/console
103
+ - bin/postcss
102
104
  - bin/setup
103
105
  - jekyll-postcss.gemspec
104
106
  - lib/jekyll-postcss.rb
107
+ - lib/jekyll-postcss/socket.rb
105
108
  - lib/jekyll-postcss/version.rb
106
109
  - lib/jekyll/converters/postcss.rb
107
110
  homepage: https://github.com/mhanberg/jekyll-postcss