https://github.com/jaywcjlove/htmlminifier
A Swift HTML minification library based on JavaScriptCore and html-minifier-next.
https://github.com/jaywcjlove/htmlminifier
html html-minifier htmlminify minifier swift swift-package-manager
Last synced: 2 months ago
JSON representation
A Swift HTML minification library based on JavaScriptCore and html-minifier-next.
- Host: GitHub
- URL: https://github.com/jaywcjlove/htmlminifier
- Owner: jaywcjlove
- License: mit
- Created: 2025-08-20T16:33:08.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2025-09-18T14:44:25.000Z (4 months ago)
- Last Synced: 2025-10-01T06:36:43.126Z (3 months ago)
- Topics: html, html-minifier, htmlminify, minifier, swift, swift-package-manager
- Language: Swift
- Homepage:
- Size: 412 KB
- Stars: 4
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
HTMLMinifier
===
A Swift HTML minification library based on JavaScriptCore and [html-minifier-next](https://www.npmjs.com/html-minifier-next).
## Installation
### Swift Package Manager
Add CodeMirror to your project using Xcode:
1. In Xcode, go to `File` → `Add Package Dependencies...`
2. Enter the repository URL: `https://github.com/jaywcjlove/HTMLMinifier.git`
3. Click `Add Package`
Or add it to your `Package.swift` file:
```swift
dependencies: [
.package(url: "https://github.com/jaywcjlove/HTMLMinifier.git", from: "1.0.0")
]
```
## Usage
### Basic Usage
```swift
import HTMLMinifier
let html = """
Test
Hello World
"""
// Using default options
let minified = try HTMLMinifier.minify(html)
print(minified)
```
### Custom Options
```swift
import HTMLMinifier
let options = HTMLMinifierOptions(
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true,
useShortDoctype: true
)
let minifier = try HTMLMinifier()
let result = try minifier.minify(html, options: options)
```
### Static Methods
```swift
// Using default options
let result1 = try HTMLMinifier.minify(html)
// Using custom options
let result2 = try HTMLMinifier.minify(html, options: options)
```
## Available Options
All options are disabled by default unless specified otherwise.
### Core Options
- `caseSensitive` (default: `false`): Treat attributes in case sensitive manner (useful for custom HTML tags)
- `html5` (default: `true`): Parse input according to HTML5 specifications
- `includeAutoGeneratedTags` (default: `true`): Insert tags generated by HTML parser
- `continueOnParseError` (default: `false`): Handle parse errors instead of aborting
### Whitespace & Formatting
- `collapseWhitespace` (default: `false`): Collapse white space that contributes to text nodes in a document tree
- `collapseInlineTagWhitespace` (default: `false`): Don't leave any spaces between `display:inline;` elements when collapsing (must be used with `collapseWhitespace=true`)
- `conservativeCollapse` (default: `false`): Always collapse to 1 space (never remove it entirely). Must be used with `collapseWhitespace=true`
- `preserveLineBreaks` (default: `false`): Always collapse to 1 line break when whitespace between tags include a line break. Must be used with `collapseWhitespace=true`
- `trimCustomFragments` (default: `false`): Trim white space around `ignoreCustomFragments`
- `noNewlinesBeforeTagClose` (default: `false`): Never add a newline before a tag that closes an element
### Attributes
- `removeAttributeQuotes` (default: `false`): Remove quotes around attributes when possible
- `collapseBooleanAttributes` (default: `false`): Omit attribute values from boolean attributes
- `removeEmptyAttributes` (default: `false`): Remove all attributes with whitespace-only values
- `removeRedundantAttributes` (default: `false`): Remove attributes when value matches default
- `preventAttributesEscaping` (default: `false`): Prevents the escaping of the values of attributes
- `removeTagWhitespace` (default: `false`): Remove space between attributes whenever possible (**Note: this will result in invalid HTML!**)
- `sortAttributes` (default: `false`): Sort attributes by frequency
### Comments & Elements
- `removeComments` (default: `false`): Strip HTML comments
- `processConditionalComments` (default: `false`): Process contents of conditional comments through minifier
- `removeEmptyElements` (default: `false`): Remove all elements with empty contents
- `removeOptionalTags` (default: `false`): Remove optional tags
### Type Attributes
- `removeScriptTypeAttributes` (default: `false`): Remove `type="text/javascript"` from `script` tags. Other `type` attribute values are left intact
- `removeStyleLinkTypeAttributes` (default: `false`): Remove `type="text/css"` from `style` and `link` tags. Other `type` attribute values are left intact
### Content Minification
- `minifyJS` (default: `false`): Minify JavaScript in script elements and event attributes
- `minifyCSS` (default: `false`): Minify CSS in style elements and style attributes
- `minifyURLs` (default: `false`): Minify URLs in various attributes
### Document Structure
- `useShortDoctype` (default: `false`): Replaces the `doctype` with the short (HTML5) doctype
- `keepClosingSlash` (default: `false`): Keep the trailing slash on singleton elements
- `decodeEntities` (default: `false`): Use direct Unicode characters whenever possible
- `sortClassName` (default: `false`): Sort style classes by frequency
### Advanced Options
- `quoteCharacter` (default: `nil`): Type of quote to use for attribute values ("'" or """)
- `maxInputLength` (default: `nil`): Maximum input length to prevent ReDoS attacks
- `maxLineLength` (default: `nil`): Specify a maximum line length. Compressed output will be split by newlines at valid HTML split-points
### Example with Common Options
```swift
let options = HTMLMinifierOptions(
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true,
collapseBooleanAttributes: true,
removeEmptyAttributes: true,
removeRedundantAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
useShortDoctype: true,
minifyJS: true,
minifyCSS: true
)
```
## Error Handling
```swift
do {
let result = try HTMLMinifier.minify(html)
print(result)
} catch HTMLMinifierError.jsContextCreationFailed {
print("Failed to create JavaScript context")
} catch HTMLMinifierError.jsScriptLoadFailed(let message) {
print("JavaScript script loading failed: \(message)")
} catch HTMLMinifierError.minificationFailed(let message) {
print("Minification failed: \(message)")
} catch HTMLMinifierError.invalidInput {
print("Invalid input")
}
```
## License
Licensed under the MIT License.