hyperbuild 0.0.44 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c08a3df4ded7e9f0e90457cbcd2bece9e33ebe8ce47246f0e6a93095a517ea19
4
- data.tar.gz: 0bb130c76c5ed061cf3610ce73a9a2b0ebab72f12df0d16767330c8d7cc61f63
3
+ metadata.gz: e21d3b86b868b267d86aa1dd93fce3ef9b3bfb3e8f7c813cbb679c6917a31078
4
+ data.tar.gz: 7f3c329e7e2a416d37ee2ca60d039d05075395b709dffa97f9bb66447e7d7903
5
5
  SHA512:
6
- metadata.gz: d74715dc36e9201b399401b944eb27348e5a0a88885d6db4f9aa609db048f251496bc0b9acbb5f9dea5978789b15d72504be64febc6905b251af200a1bf037fd
7
- data.tar.gz: db810d4b7e4290c5f07dfd7c2302ad1396d07d614a1c5fbc153d8e5fc9e273f589e59bc36c3023748693d9e4646864198160bf4e7c1e70571ae84db7a0dc874a
6
+ metadata.gz: d1b6c0d39a46b52435c59df3eac0f1979c9e15c316edd1a253929e1f9939e35fdb4828237f6838924ac98ef03a1803d8c272466dee76ae2cd024bd1c38c20b95
7
+ data.tar.gz: a87b707918f82a4d76e48ca5fec21027f0577472ff21537226c5607e6c5fc466679e41b4c76334177a4b312fdc0f12f454861dcb3a25ef5c11f9df606d8a3d5f
data/README.md CHANGED
@@ -15,9 +15,9 @@ Available as:
15
15
 
16
16
  ## Performance
17
17
 
18
- Speed and effectiveness of Node.js version compared to [html-minfier](https://github.com/kangax/html-minifier) and [minimize](https://github.com/Swaagie/minimize). See [bench](./bench) folder for more details.
18
+ Speed and effectiveness of Node.js version compared to [html-minfier](https://github.com/kangax/html-minifier) and [minimize](https://github.com/Swaagie/minimize), run on popular already-minified web pages. See [bench](./bench) folder for more details.
19
19
 
20
- <img width="435" alt="Chart showing speed of HTML minifiers" src="https://wilsonl.in/hyperbuild/bench/0.0.44/average-speeds.png"> <img width="435" alt="Chart showing effectiveness of HTML minifiers" src="https://wilsonl.in/hyperbuild/bench/0.0.44/average-sizes.png">
20
+ <img width="435" alt="Chart showing speed of HTML minifiers" src="https://wilsonl.in/hyperbuild/bench/0.1.5/average-speeds.png"> <img width="435" alt="Chart showing effectiveness of HTML minifiers" src="https://wilsonl.in/hyperbuild/bench/0.1.5/average-sizes.png">
21
21
 
22
22
  ## Usage
23
23
 
@@ -25,13 +25,11 @@ Speed and effectiveness of Node.js version compared to [html-minfier](https://gi
25
25
 
26
26
  Precompiled binaries are available for x86-64 Windows, macOS, and Linux.
27
27
 
28
- To compile and install from source, run `cargo install hyperbuild`, which requires [Rust](https://www.rust-lang.org/tools/install).
29
-
30
28
  ##### Get
31
29
 
32
- [Windows](https://wilsonl.in/hyperbuild/bin/0.0.44-windows-x86_64.exe) |
33
- [macOS](https://wilsonl.in/hyperbuild/bin/0.0.44-macos-x86_64) |
34
- [Linux](https://wilsonl.in/hyperbuild/bin/0.0.44-linux-x86_64)
30
+ [Windows](https://wilsonl.in/hyperbuild/bin/0.1.5-windows-x86_64.exe) |
31
+ [macOS](https://wilsonl.in/hyperbuild/bin/0.1.5-macos-x86_64) |
32
+ [Linux](https://wilsonl.in/hyperbuild/bin/0.1.5-linux-x86_64)
35
33
 
36
34
  ##### Use
37
35
 
@@ -48,19 +46,48 @@ hyperbuild --src /path/to/src.html --out /path/to/output.min.html
48
46
 
49
47
  ```toml
50
48
  [dependencies]
51
- hyperbuild = "0.0.44"
49
+ hyperbuild = "0.1.5"
52
50
  ```
53
51
 
54
52
  ##### Use
55
53
 
56
54
  ```rust
57
- use hyperbuild::hyperbuild;
55
+ use hyperbuild::{FriendlyError, hyperbuild};
58
56
 
59
57
  fn main() {
60
58
  let mut code = b"<p> Hello, world! </p>".to_vec();
59
+
60
+ // Minifies a slice in-place and returns the new minified length,
61
+ // but leaves any original code after the minified code intact.
61
62
  match hyperbuild(&mut code) {
62
63
  Ok(minified_len) => {}
63
- Err((error_type, error_at_char_no)) => {}
64
+ Err((error_type, error_position)) => {}
65
+ };
66
+
67
+ // Creates a vector copy containing only minified code
68
+ // instead of minifying in-place.
69
+ match hyperbuild_copy(&code) {
70
+ Ok(minified) => {}
71
+ Err((error_type, error_position)) => {}
72
+ };
73
+
74
+ // Minifies a vector in-place, and then truncates the
75
+ // vector to the new minified length.
76
+ match hyperbuild_truncate(&mut code) {
77
+ Ok(()) => {}
78
+ Err((error_type, error_position)) => {}
79
+ };
80
+
81
+ // Identical to `hyperbuild` except with FriendlyError instead.
82
+ // `code_context` is a string of a visual representation of the source,
83
+ // with line numbers and position markers to aid in debugging syntax.
84
+ match hyperbuild_friendly_error(&mut code) {
85
+ Ok(minified_len) => {}
86
+ Err(FriendlyError { position, message, code_context }) => {
87
+ eprintln!("Failed at character {}:", position);
88
+ eprintln!("{}", message);
89
+ eprintln!("{}", code_context);
90
+ }
64
91
  };
65
92
  }
66
93
  ```
@@ -92,14 +119,20 @@ yarn add hyperbuild
92
119
  const hyperbuild = require("hyperbuild");
93
120
 
94
121
  const minified = hyperbuild.minify("<p> Hello, world! </p>");
122
+
123
+ // Alternatively, minify in place to avoid copying.
124
+ const source = Buffer.from("<p> Hello, world! </p>");
125
+ hyperbuild.minifyInPlace(source);
95
126
  ```
96
127
 
97
128
  hyperbuild is also available for TypeScript:
98
129
 
99
130
  ```ts
100
131
  import * as hyperbuild from "hyperbuild";
132
+ import * as fs from "fs";
101
133
 
102
134
  const minified = hyperbuild.minify("<p> Hello, world! </p>");
135
+ hyperbuild.minifyInPlace(fs.readFileSync("source.html"));
103
136
  ```
104
137
 
105
138
  </details>
@@ -117,7 +150,7 @@ Add as a Maven dependency:
117
150
  <dependency>
118
151
  <groupId>in.wilsonl.hyperbuild</groupId>
119
152
  <artifactId>hyperbuild</artifactId>
120
- <version>0.0.44</version>
153
+ <version>0.1.5</version>
121
154
  </dependency>
122
155
  ```
123
156
 
@@ -126,11 +159,15 @@ Add as a Maven dependency:
126
159
  ```java
127
160
  import in.wilsonl.hyperbuild.Hyperbuild;
128
161
 
129
- class Main {
130
- public static void main(String[] args) {
131
- String minified = Hyperbuild.minify("<p> Hello, world! </p>");
132
- }
162
+ try {
163
+ String minified = Hyperbuild.minify("<p> Hello, world! </p>");
164
+ } catch (Hyperbuild.SyntaxException e) {
165
+ System.err.println(e.getMessage());
133
166
  }
167
+
168
+ // Alternatively, minify in place:
169
+ assert source instanceof ByteBuffer && source.isDirect();
170
+ Hyperbuild.minifyInPlace(source);
134
171
  ```
135
172
 
136
173
  </details>
@@ -149,7 +186,10 @@ Add the PyPI project as a dependency and install it using `pip` or `pipenv`.
149
186
  ```python
150
187
  import hyperbuild
151
188
 
152
- minified = hyperbuild.minify("<p> Hello, world! </p>")
189
+ try:
190
+ minified = hyperbuild.minify("<p> Hello, world! </p>")
191
+ except SyntaxError as e:
192
+ print(e)
153
193
  ```
154
194
 
155
195
  </details>
@@ -175,6 +215,10 @@ print Hyperbuild.minify "

Hello, world!

"
175
215
 
176
216
  ## Minification
177
217
 
218
+ ### Configurability
219
+
220
+ Configuration of minification is currently WIP across all languages. The behaviour mentioned below is the default.
221
+
178
222
  ### Whitespace
179
223
 
180
224
  hyperbuild has advanced context-aware whitespace minification that does things such as:
@@ -218,7 +262,7 @@ Reduce a sequence of whitespace characters in text nodes to a single space (U+00
218
262
 
219
263
  > **Applies to:** any element except [whitespace sensitive](./src/spec/tag/whitespace.rs), [content](src/spec/tag/whitespace.rs), [content-first](./src/spec/tag/whitespace.rs), and [formatting](./src/spec/tag/whitespace.rs) elements.
220
264
 
221
- Remove any text nodes that only consist of whitespace characters.
265
+ Remove any text nodes between tags that only consist of whitespace characters.
222
266
 
223
267
  <table><thead><tr><th>Before<th>After<tbody><tr><td>
224
268
 
@@ -396,7 +440,7 @@ Numeric entities that do not refer to a valid [Unicode Scalar Value](https://www
396
440
 
397
441
  If an entity is unintentionally formed after decoding, the leading ampersand is encoded, e.g. `&&#97;&#109;&#112;;` becomes `&ampamp;`. This is done as `&amp` is equal to or shorter than all other entity representations of characters part of an entity (`[&#a-zA-Z0-9;]`), and there is no other conflicting entity name that starts with `amp`.
398
442
 
399
- Right chevrons after any decoding in text are encoded to `&GT` if possible or `&GT;` otherwise.
443
+ Left chevrons after any decoding in text are encoded to `&LT` if possible or `&LT;` otherwise.
400
444
 
401
445
  ### Comments
402
446
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyperbuild
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.44
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wilson Lin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-01 00:00:00.000000000 Z
11
+ date: 2020-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fiddle