Skip to content

Commit

Permalink
Add 'brotli' plugin lumeland#681
Browse files Browse the repository at this point in the history
  • Loading branch information
into-the-v0id committed Oct 24, 2024
1 parent a8f4ce5 commit 4e30440
Show file tree
Hide file tree
Showing 8 changed files with 1,341 additions and 1 deletion.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Go to the `v1` branch to see the changelog of Lume 1.
- New plugin: `check_urls` to detect broken links [#675].
- New plugin: `icons` to load automatically icons from popular icon catalogs.
- New plugin: `google_fonts` to download and self-host automatically fonts from Google Fonts.
- New plugin: `brotli` to compress files.

### Fixed
- Nav plugin: Breadcrumb with urls with CJK characters.
Expand Down Expand Up @@ -564,6 +565,7 @@ Go to the `v1` branch to see the changelog of Lume 1.
[#677]: https://github.com/lumeland/lume/issues/677
[#678]: https://github.com/lumeland/lume/issues/678
[#679]: https://github.com/lumeland/lume/issues/679
[#681]: https://github.com/lumeland/lume/issues/681

[Unreleased]: https://github.com/lumeland/lume/compare/v2.3.3...HEAD
[2.3.3]: https://github.com/lumeland/lume/compare/v2.3.2...v2.3.3
Expand Down
2 changes: 1 addition & 1 deletion core/processors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export type Processor = (
allPages: Page[],
) => void | false | Promise<void | false>;

function pageMatches(exts: Extensions, page: Page): boolean {
export function pageMatches(exts: Extensions, page: Page): boolean {
if (exts === "*") {
return true;
}
Expand Down
1 change: 1 addition & 0 deletions core/utils/lume_config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
export const pluginNames = [
"attributes",
"base_path",
"brotli",
"check_urls",
"code_highlight",
"date",
Expand Down
1 change: 1 addition & 0 deletions deps/brotli.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "https://deno.land/x/[email protected]/mod.ts";
58 changes: 58 additions & 0 deletions plugins/brotli.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { merge } from "../core/utils/object.ts";
import { Page } from "../core/file.ts";
import { pageMatches } from "../core/processors.ts";
import { compress } from "../deps/brotli.ts";

import type { Extensions } from "../core/utils/path.ts";
import type Site from "../core/site.ts";

export interface Options {
/** The list of extensions this plugin applies to */
extensions?: Extensions;

/**
* Quality param between 0 and 11 (11 is the smallest but takes the longest to encode)
*/
quality?: number;
}

// Default options
export const defaults: Options = {
extensions: [".html", ".css", ".js", ".mjs", ".svg", ".json", ".xml", ".txt"],
quality: 6,
};

/**
* A plugin to compress files with brotli
*/
export function brotli(userOptions?: Options) {
const options = merge(defaults, userOptions);

return (site: Site) => {
site.addEventListener("beforeSave", () => {
const textEncoder = new TextEncoder();

for (const page of site.pages) {
if (!pageMatches(options.extensions, page)) {
continue;
}

const content = page.content as string;
const compressedContent = compress(
textEncoder.encode(content),
undefined,
options.quality,
);

const compressedPage = Page.create({
url: page.outputPath + ".br",
content: compressedContent,
});

site.pages.push(compressedPage);
}
});
};
}

export default brotli;
Loading

0 comments on commit 4e30440

Please sign in to comment.