Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.8.0 - 2022-05-06
Added
- New plugin
metas
to add automatically<meta>
tags for SEO and social networks #188. - New plugin
prism
to use this library as code highligher #187. - New function
search.values()
to return an array of all unique values of a key #191. - New option
cache
toimagick
plugin to cache the transformed images in the_cache
folder #184. - Middewares have a third argument with the connection info.
- Support for nested components in Nunjucks using body helpers #189.
site.ignore()
now supports functions #53.site.ignore()
affects to static files copied withsite.copy()
. This allows to copy a entire directory withsite.copy("statics")
but ignoring some subdirectories withsite.ignore("statics/ignored-folder")
.- The
afterBuild
andafterUpdate
events have thestaticFiles
property with info about the static files that have been copied. - New property
site.files
containing all static files to be copied. It’s likesite.pages
but for static files.
Changed
- Use posix path style everywhere is possible on Windows.
Fixed
- Inline plugin generates invalid javascript #192.
- Updated
parcel_css
,cliffy
,react
,markdown_it
,liquid
,std
,esbuild
,postcss
,postcss_autoprefixer
andpug
. - Improved testing using Deno snapshots #190.
- Live reload files with search or hash strings.
- Live reload files with cache busting path prefixes.
- Improved the
printError
function to print SASS errors properly #194. - Added an empty last line when generating
import_map.json
anddeno.json
files. - Changed the
serve
task generation indeno.json
to meet the changes introduced in Deno 1.21.2 denoland/deno/issues/14459 - Support relative path value in “lume” key in import map #196.
1.7.4 - 2022-04-18
Changed
- If the
date
variable of the pages is astring
ornumber
, it’s converted toDate
automatically #181.
Fixed
- _data files exporting an array with one element was incorrectly detected as a object.
- _data files in Windows were incorrectly merged.
- Updated
std
,denosass
,cliffy
,imagick
andesbuild
. afterRender
event must stop the build if any listener returnsfalse
.- After running a
lume upgrade
, thedeno.json
andimport_map.json
files are updated accordingly #182.
1.7.3 - 2022-04-11
Added
- New option
--version
tolume upgrade
, to upgrade to a specific version. - The
bundler
plugin detects automatically the import map file fromdeno.json
.
Changed
- Simplified
lume init
command:- Doesn’t ask for the import style. Always use
import lume from "lume/mod.ts"
. - Doesn’t ask whether create a import map file. It’s created always.
- Doesn’t ask for the import style. Always use
- Simplified
import_map.json
file generation: Onlylume/
import is added.lume
andhttps://deno.land/x/lume/
are removed.
Fixed
- Updated
std
,esbuild
,deno_dom
,deno_graph
,parcel-css
,highlight.js
,terser
andreact
. - Improved Lume warnings.
1.7.2 - 2022-03-28
Added
- The
date
plugin accepts an array of locales (ex:["en", "gl", "pt", "es"]
), that are loaded automatically.
Removed
lume/plugins/date/locale
import from the import_map.
Fixed
- Throw an exception on missing configuration for Netlify CMS in the
netlify_cms
plugin. - Fixed the
expires
middleware for0
values. - Live reload works offline.
- Updated
deno_graph
andstd
.
1.7.1 - 2022-03-20
Fixed
- Task creation in the
deno.json
file.
1.7.0 - 2022-03-20
Added
- New plugin
imagick
. - New plugin
netlify_cms
. - New
expires
middleware to add theExpires
header to responses. - New
cache_busting
middleware to include the assets version identifier in the path. - New
redirects
middleware to configure custom redirects. - New
mergedKeys
data key to configure how some keys will be merged. lume/plugins/date/locale
bare import to the import_map.- The
lume import-map
command creates adeno.json
file (in addition toimport_map.json
) to automatically link the import map to Deno, meaning that you no longer need to specify the import map file in the command line (lume -- --import-map=import_map.json
) because it’s automatically detected. - The
deno.json
file not only includes theimportMap
key with the “import_map.json” value but also a couple of tasks (build and serve) to run Lume using Deno tasks (deno task build
anddeno task serve
).
Changed
- Updated minimum Deno version supported to
1.20.1
. - The
inline
plugin adds theid
andclass
attributes from the removed<img>
to the inlined<svg>
.
Removed
- The VS Code configuration in
lume init
. You can use adeno.json
file with theimportMap
key. - The
--file
option tolume import-map
.
Fixed
- Updated
std
,esbuild
,postcss
,parcel_css
andliquid
. lume import-map
doesn’t update the lume version.- Improved
_data
reloading in watching mode. - Refactor of components due Deno’s bug with
console.log()
. deno.json
file detection.
1.6.4 - 2022-03-02
Fixed
- Updated urls from
https://lumeland.github.io
tohttps://lume.land
#175. - Fixed url in the VS Code configuration generation #175.
- Updated
std
,postcss
,liquid
andparcel_css
to the latest version.
1.6.3 - 2022-03-01
Changed
- The loader argument of
site.loadData()
is optional and usetextLoader
by default.
Fixed
- Default targets to
parcel_css
plugin.
1.6.2 - 2022-02-23
Fixed
- CSS live reload error with
<style>
. - Updated
deno_graph
,liquidjs
andparcel_css
. - The file watcher ignores the
.DS_Store
files (macOS).
1.6.1 - 2022-02-23
Changed
- Added default targets to
parcel_css
plugin (the most recent version of every browser).
Fixed
- CSS Live reload error checking cross-origin
@import
.
1.6.0 - 2022-02-21
Added
- New plugin
sass
. - New option
languages
tocodeHighlight
plugin #169.
Changed
- Use
std/http
modules to create the local server. - The page data is passed to Markdown engine as an env variable. This allows to create markdown-it plugins that read/edit the page data, for example to get the content title and save it.
- Throw an error when two pages have the same url and ouputs to the same file (case insensitive) #170.
Fixed
- Pretty print the urls of the generated pages on build.
Example:
/about/
instead of/about/index.html
. - Updated dependecies:
std
,esbuild
,deno_graph
,markdown_it
,liquidjs
,parcel_css
andpostcss
. - Prevent the mixture of the content for two pages that outputs to the same file #170.
- Consistency of
page.data.url
after change anypage.dest
value. - Bug detecting static files changes on update.
- Improved the live-reload script for images and stylesheets.
1.5.1 - 2022-02-01
Added
- The
search
helper convertsundefined
andnull
values. Previously, onlytrue
andfalse
values were converted.
Fixed
- Revert a change in
1.5.0
that makes that some pages doesn’t have theurl
value.
1.5.0 - 2022-01-31
Added
- New plugin
esbuild
. - New plugin
parcel_css
. - New notification when an old version of Lume is detected.
- New architecture for the local server, with support for middlewares and events.
- Moved the watcher code to a new class
Watcher
in the core, with support for events. - New command
lume import-map
to create/update import maps files #164.
Changed
- Upgrade the minimum Deno version supported to
1.18.1
. - Moved some functions to
core/utils.ts
. - Ignored the files
deno.json
andimport_map.json
by default. - Renamed
Event
interface toSiteEvent
.
Removed
- Experimental watcher.
searchByExtension
function incore/utils.ts
because it’s not needed anymore.- Argument
--only
forlume init
.
Fixed
page.document
must returnundefined
if the page is not a HTML page #163.- Updated
liquidjs
,deno_graph
andstd
.
1.4.3 - 2022-01-12
Fixed
- Updated
liquid
,std
,deno_dom
anddeno_graph
. - Import maps with local files #159, #162.
- Ignored files in experimental watcher.
- Error on rename files.
1.4.2 - 2021-12-31
Fixed
- Removed unstable Deno API functions on copy files.
- Remove always the date in the filenames of the pages, including pages that contain other date in the front matter.
- Prevent duplicated extensions configuration #157, #158.
1.4.1 - 2021-12-27
Fixed
- Upgrade errors due unstable features.
1.4.0 - 2021-12-27
This version of Lume has a big internal code refactor but maintaining the public API,
so your sites should work without changes (unless you depend on internal undocumented features).
The only important change is the removal of metrics
feature but probably you are not using it.
Added
- New Components feature.
It allows to create reusable components under the folder
_components
that you can use in your template engines. It’s compatible with any engine (nunjucks, js/ts modules, jsx, liquid, pug, etc).- New function
site.loadComponents()
to set up more components loaders. For example:site.loadComponents([".jsx"], moduleLoader, jsxEngine)
.
- New function
- Improved errors logs.
- Options for the
date
plugin to change the helpers’ name #150. - The
pug
plugin registers thepug
filter. - Template engine filters (
njk
,pug
,liquid
…) can access to shared data (likesearch
,paginate
etc) - You can add processors and preprocessors to run in all pages with
site.process("*", processFunction)
. - You can use relative paths for
layout
values and when include templates using the template engine syntax (ex:{% include "./template.njk" %}
). - New function
site.includes()
to define different directories for specific extensions. For example:site.includes([".css"], "_styles")
; - The
extensions
option of some plugins allows to define different extensions for different purposes. For example:{ pages: [".tmpl.js"], data: [".js"], components: [".comp.js"]}
. - New search method
search.page()
to return the first page found instead an array with all pages.
Changed
- Big internal code refactoring.
- Many core classes have been splitted into different small classes with single responsabilities (SOLID principles).
- In the version
1.x
there are many interface (like:Site
) independent of the implementation (like:LumeSite implements Site
). This was not easy to maintain and it makes hard to explore the Lume code in VSCode because everything is linked to the interfaces instead of the code. So I decided to remove these generic interfaces.
- The dates extracted from the filename (like
2022-12-05_pagename.md
) use UTC timezone for consistency with the dates defined in the front matter.
Removed
- The
metrics
feature was removed. It was not very useful and I think maybe it can be implemented in better ways in the future.
Fixed
- Updated
std
,deno_dom
,deno_graph
,liquid
,pug
,liquid
andpostcss
to the latest version. - Improved extensions detection: In
1.x
you have to load.windi.css
before.css
to prevent conflict. This was fixed in2.x
. - Lot of bugfixes in Windows, specially related with the different path formats.
- Socket error in Safari #155.
- Added a bunch of new tests.
- Changes in the
.git
directory are no longer detected by the watcher.
1.3.1 - 2021-12-07
Added
- The interface of
Renderer
exposes theextraData
property. - The
Engine
interface has a new methodrenderSync
. - Options for the
url
plugin to change the helpers’ name #149.
Changed
- The option
sourceMap
ofpostcss
plugin accepts the same options aspostcss
library #147. Note: Previously,sourceMap: true
created a.map
file. Now it inlines the source map in the css file (because it’s the default behavior ofpostcss
). Set the value tosourceMap: { inline: false }
to keep the old behavior. jsx
elements have thetoString()
function to render to html automatically.- Removed the deprecated
std/hash
dependency and use Web Crypto API.
Fixed
- Updated
std
,postcss
,postcss-nesting
,deno_dom
anddeno_graph
.
1.3.0 - 2021-11-15
Added
- Initial (experimental) support for on demand server side rendering, used to generate pages dynamically, like Jamstack’s DPR. This is compatible with Deno Deploy, but with some limitations due Deno Deploy lack of support for some features (import maps or code generation from strings).
- New plugin
on_demand
to implement page rendering on demand. - New event
beforeRenderOnDemand
. - New option
watcher
to configure the watcher of the live reload (the debounce interval and a list of ignored paths). - Improved default 404 page of the local server.
- Added more mime types to the local server.
- Improved the live reloading of the local server:
- It works with multiple browsers simultaneously.
- It reloads the current page after starting a server, to update with the latest changes.
- It connects faster.
- The command
lume init
has the option--only
to initialize only the config file (lume init --only=config
) or VSCode (lume init --only=vscode
). - Now you can pass arguments to Deno from the Lume cli. For example, to add a custom import_map,
passing arguments after
--
. For example:lume --serve -- --import-map="import_map.json"
. Note: This supersedes flags feature that is no longer available (use env variables for that). - New option
scopedUpdates
to define independent scopes and avoid to rebuild the entire site on update. - New
options
argument toaddEventListener
:once
To remove the listener after the first execution.signal
To provide anAbortSignal
to remove the listener at any time.
Changed
- BREAKING: Upgraded the minimum version of Deno supported to
1.16.1
. - BREAKING: Some internal parts have been refactored for more flexibility. This change affects to Lume types in
core.ts
.- New interface
Renderer
to render the site pages. This allows to create your own renderer to replace the default one. - New interface
Emitter
to emit the site pages and static files (save them in _site folder). This allows to create your own emitter to replace the default one.
- New interface
- If a “before” event listener like
beforeBuild
,beforeSave
,beforeUpdate
returnsfalse
the build/update process is stopped.
Removed
deno.land/std/io/util.ts
dependency because it’s not needed anymore.- BREAKING: Removed
flags
options. Use env variables to pass arbitrary data. For example, usedomain=example.com lume
instead oflume -- example.com
.
Fixed
- Updated
deno_dom
,cliffy
,deno_graph
,liquid
andsvgo
dependencies. - Catch a possible thrown error that stops the local server.
- Use
any
instead ofunknown
for theHelper
type for more flexibility.
1.2.1 - 2021-10-28
Fixed
- Upgraded
postcss-nesting
,liquid
,std
,deno_graph
andcliffy
to their latest version. - Default
url
option forpaginate
helper.
1.2.0 - 2021-10-26
Added
- New plugin
liquid
to use the Liquid template engine. - Options to
search
andpaginate
plugins. Now you can configure the helpers names. - New module
lume/plugins.ts
that exports all available plugins.
Changed
- Some internal restructuring to improve the code comprehension:
- Moved the template engines inside the plugins that use them.
- Split the
search
plugin topaginate
andsearch
plugins for coherence (both are enabled by default). - Moved the types of the dependencies to their deps/ files.
--quiet
is more quiet onci.ts
#139.
Fixed
- Updated
postcss
,deno_graph
andstd
. - Ignore the
dest
folder if it’s insidesrc
and doesn’t start with_
or.
. - Removed unnecesary file system checkings.
- Default 404 page in local server.
1.1.1 - 2021-10-08
Added
- A new experimental watcher (enabled with
lume --serve --experimental
orlume --watch --experimental
).- It use Workers to build the site, in order to refresh the imported modules.
- For now, import maps are not supported yet. See the Deno issue
Changed
- Uncoupled
cli/watch.ts
andcli/server.ts
fromSite
. These modules no longer require aSite
instance to work, only the necessary options. - Reduced the debounce timing from 500ms to 100ms #136
Fixed
- Upgrade
svgo
,std
,cliffy
,postcss
andterser
. - File paths with UTF-8 characters are correctly handled.
- Inserted live-reload script in the default 404 html response.
base_path
plugin may not be executed if thelocation
option is changed later.
1.1.0 - 2021-09-21
Added
- Created a bunch of tests
- New plugin
resolve_urls
that transform links with source files to final urls. For example:/posts/post-1.md -> /post/post-1/
. This allows to write markdown files that are navigable in GitHub. - New plugin
modify_urls
that allows to edit the urls of HTML pages. It’s used internally by other plugins likerelative_urls
,base_path
orresolve_urls
. .jsx
pages can export a JSX element as default (previously only a function was accepted).- The lume import map includes
https://deno.land/x/lume/
in addition tolume/
. This allows to use the_config.js
file with or without import maps. - New option
keepDefaultPlugins
topostcss
andmarkdown
. Set totrue
append your plugins instead override the defaults. - Minimal configuration options for
json
andmodule
plugins. lume init
can configure VS Code.- The
server.page404
option works also with pretty urls (ex:/404/
)
Changed
- Removed all options of
lume init
and convert it to an interactive command. - The data of different
_data
files and folders in the same directory is now merged. Previously it was overriden, causing inconsistencies. - The local server returns a
301
response for folders without trailing slash. For example:/about-us -> /about-us/
.
Removed
- BREAKING: Markdown no longer modify the links automatically.
Use
resolve_links
plugin. - BREAKING: Removed the
entries
argument ofbundler
plugin. (sorry, it was a bad idea)
Fixed
- Processors take into account the extension of the source file, in addition to the output extension to match with preprocessors behavior.
- Some types like arrays returned by
_data
files no more are converted to plain object. - Some bugs in the
inline
plugin. - Urls starting with
//
are not normalized because they are absolute urls For example://domain.com
- Updated dependencies
std
,deno_dom
. - The property
data
of the pages is now enumerable. This makes pages compatible with some filters of Nunjucks.
1.0.5 - 2021-09-07
Fixed
- Some bugs in the
bundler
plugin:- The
entries
array items dont’t need to start with/
. - Show an error if some entry was not found.
- Wrong content saved when
options.bundler
isundefined
.
- The
1.0.4 - 2021-09-06
Changed
- Removed
includes
option forbundler
plugin. They are detected and included automatically now!
1.0.3 - 2021-08-30
Added
- Improved
bundler
plugin with the following additions:- New option
entries
to only emit some files. - New option
includes
to download and include external dependencies. - Support for
Deno.EmitOptions.bundle
to emit a single file with all dependencies.
- New option
Fixed
- Updated
std
,terser
andsvgo
. - Updated
react
to include typings. - Internal changes to how the processors and preprocessors are handled to ensure that they are executed in the same order they were registered.
- Use Error cause property to chain errors.
1.0.2 - 2021-08-20
Added
- Property
_data
to save arbitrary values in the pages internally. Used by (pre)processors. - Improved docs.
Changed
- The minimum Deno version supported to
1.13.1
(from1.12.2
). - Switched to Deno’s native HTTP for the local server and live-reload socket.
This improves the performance
and removes the dependencies
std/http/server
andstd/ws
.
Fixed
- Fixed some bugs in the
bundler
plugin:- Error processing files while watching due to wrong file extensions.
- The processor now searches and replaces
all
.ts
,.tsx
and.jsx
extensions with.js
. This fixes the import errors.
- Updated
std
,cliffy
anddeno_dom
.
1.0.1 - 2021-08-04
No changes.
1.0.0 - 2021-08-04
Changed
- The minimum version of Deno supported is
1.12.2
.
Removed
- BREAKING: Removed the import map aliases to
.js
files. Use the.ts
extension to import Lume modules. - BREAKING:
install.js
,ci.js
andcli.js
(with the.js
extension) no longer exists. Use the.ts
extension (install.ts
,ci.ts
andcli.ts
).
Fixed
- The
--plugins
option oflume init
. - Search pages using values with one character.
For example:
search.pages("url!=/")
. - Custom includes path resolution.
- Export plugins types for Deno doc.
- Updated
std
,cliffy
,postcss
,highlight.js
andmarkdown-it
.
0.25.5 - 2021-07-21
Fixed
- Installation on Windows. #131.
0.25.4 - 2021-07-21
Changed
- Internal: make
Source.getOrCreateDirectory()
a private method. - Ensure that new directories created dynamically during watching
load
_data
files and folders. This opens the door to implement DPR in Lume.
Fixed
- The
PluginOption
argument typing of thelume()
function. - The
yaml
loader should return an empty object instead ofundefined
on empty files. - Relaxed the return type of helpers.
- Updated
std
andcliffy
.
0.25.3 - 2021-07-12
Changed
- Improved the metrics generation. #125.
- Internal code improvements:
- The abstract class
Engine
is converted to a TypeScript interface. - Created interfaces
for
Site
,Page
,Directory
,Source
,Metrics
, etc. - Moved the core files to a
core/
directory. - Renamed
types.ts
tocore.ts
.
- The abstract class
Fixed
- Updated
highlight.js
andeta
.
0.25.2 - 2021-07-09
Added
- The plugin
date
acceptsnow
as a value to format the current time.
Changed
- Moved metrics save/print logic from the CLI to the
Metrics
class, so it’s decoupled from the CLI.
Fixed
- The filename to save the metrics should be relative to
site.options.cwd
. - Allow to save the metrics files in a subdirectory (and create it if doesn’t exist).
- The
--quiet
mode is now even quieter.
0.25.1 - 2021-07-07
Added
- Detect the
_config.ts
file automatically if_config.js
does not exist. - Allow to set options to markdown-it plugins.
Removed
- The
site.includes()
method since it’s not consistent with custom includes.
Fixed
- The JavaScript deprecation message.
- The
lume init
command provided completions for the plugins enabled by default. - Custom
includes
configuration for plugins is not correctly resolved if theroot
is different toDeno.cwd()
. - The plugin
bundler
on Windows. - The plugin
postcss
with multiple includes.
0.25.0 - 2021-07-04
Added
- Optionally, you can do
import lume from "lume";
in your config file (instead ofimport lume from "lume/mod.ts";
). - The
options
configuration key to theeta
plugin to configure Eta.
Changed
- Lume has been ported to TypeScript.
This means that all files have the
.ts
extension. You should edit your config file to import.ts
files instead of.js
. - Renamed plugin
svg
tosvgo
.
Fixed
- Sync Nunjucks tags doesn’t return safe strings.
- Updated
std
,terser
andmarkdown-it
.
0.24.0 - 2021-06-28
Added
- New
-w
/--watch
option to watch changes without starting a web server. #109. - Made the
_includes
directory configurable: #115.- new
includes
option for site and theeta
,nunjucks
andpug
plugins - new
site.includes()
method, similar tosite.src()
.
- new
options
configuration value to thepug
plugin to set options to thepug
compiler.- Command
lume completions
to generate shell completions for Lume.
Changed
- Render pages in parallel, reducing the build time for large sites.
- Added a
--no-check
option tolume upgrade
,install.js
andci.js
to reduce the execution time. - Ported the CLI to TypeScript
and made use of the external library Cliffy for better code structure.
This brings the following changes: #120.
- Removed the duplicated
build
command. Uselume
instead oflume build
. - To see the Lume version, use
lume -V
orlume --version
instead oflume -v
(in lowercase).
- Removed the duplicated
- Replaced the
--verbose
option with--quiet
. - Errors always include the stack. #116, #117.
- Removed the
import_map.json
file because it’s not used. It was kept only for backward compatibility oflume upgrade
from old versions. - Some internal code has been ported to TypeScript:
- the CLI
- the dependency files
- the template engines.
Removed
- The
--verbose
option. Use--quiet
for the same behavior as--verbose=1
.
Fixed
- The async cache for the
inline
plugin. - Some preprocessors were executed several times. #110.
- The
slugify_urls
plugin produced empty path segments (for example,x/@/y
now becomesx/-/y
and notx//y
as before). - JavaScript source maps. #114.
0.23.3 - 2021-06-21
Added
- New metrics feature that allows measuring the performance of large sites:
Use
lume --metrics
to show the metrics in the CLI orlume --metrics=filename.json
to save the data in a file. You can also configure it in the config file. - New
--verbose
option to configure the level of details logged:0
: only important things1
: normal details (the default option)2
: high details (for debugging purposes)
- Allow extensions on Nunjucks. #108.
Fixed
- Improved the way CLI arguments are applied to the site instance.
- Ensure duplicated pages have an unique
src.path
value. - The
relative_urls
plugin should ignore data URLs. #107.
0.23.2 - 2021-06-19
Fixed
- Relative URL resolution. #105.
0.23.1 - 2021-06-17
Fixed
- Error when using
search.pages()
without arguments.
0.23.0 - 2021-06-17
Added
- New
slugify_urls
plugin. - Support for quotes to
page.search()
. This allows to insert spaces in the values. For example:page.search("'tag with spaces' title='Title with spaces'")
.
Changed
- BREAKING: The URLs of the pages will no longer be slugified by default.
Use the
slugify_urls
plugin. - The plugin
attributes
is disabled by default.
Removed
- The
slugifyUrls
option. Use theslugify_urls
plugin for that. - Support for objects in the
url
variable.
Fixed
- Replaced the
terser
dependency with a Deno version. - Updated
std
andpostcss
.
0.22.6 - 2021-06-15
Added
- Events
afterRender
andbeforeSave
. - New method
site.addHelper()
to register different types of helpers.
Changed
- The class signature of template engines:
replaced the
addFilter()
method with more genericaddHelper()
that allows to register not only filters but also custom tags and other features supported by some engines, like Nunjucks.
Removed
- The experimental plugin
image
. Moved to another repository.
Fixed
- Bug in the function to merge default and user options.
- Ensure the
Page
andDirectory
classes always have thesrc
object. - Updated
postcss
andeta
.
0.22.5 - 2021-06-10
Added
- Argument
limit
tosearch.pages()
.
Fixed
- Bug on overriding the URL with
--location
.
0.22.4 - 2021-06-09
Added
- Display a warning when installing Lume with an old Deno version.
Fixed
- Updated
std
. - Updated
postcss
to support Deno 1.11.0.
0.22.3 - 2021-06-07
Fixed
- Bug in the import map after upgrading to 0.22.2.
0.22.2 - 2021-06-07
Added
deno run <script>
accepts several scripts at the same time.- Display the name of a script executed by
deno run <script>
.
Changed
The CLI options are applied before
lume()
returns the site instance. This allows to access these options in_config.js
. For example, after runninglume --dev
, you can include conditions in the_config.js
file like this:const site = lume(); if (site.options.dev) { // Development stuff }
Previously, these overrides were applied after
_config.js
exports the site instance.
Fixed
- Improved the performance of loading page layouts by using the
Source
cache. - Improved error reporting.
search.pages()
with no arguments returns pages with other extensions than.html
.- Clear the cache before building. This allows to run several builds in the same script.
- Updated
nunjucks
(a new fork) andhighlight.js
.
0.22.1 - 2021-06-05
Fixed
- The file
ci.js
and the commandlume init
on Windows.
0.22.0 - 2021-06-04
Added
- New plugin
base_path
to automatically search and fix all URLs in the HTML by adding the path prefix of thelocation
option. This reduces the need to use theurl
filter everywhere. - The
search.pages()
helper allows multiple values to sort by.
Changed
- BREAKING: The
url
variable of the pages must start with/
,./
or../
. - Decoupled the loaders. Now they only need the path argument.
- Preprocessors check the extension of the input and output file. (Previously, only the output extension was used.)
Fixed
- The
url
filter shouldn’t add the path prefix if it’s already added. search.pages()
must return only HTML pages. (Previously, it also returned assets.)- Windows installation. #98.
0.21.1 - 2021-06-03
Fixed
- Restored
import_map.json
to not break upgrades from older versions.
0.21.0 - 2021-06-01
Added
- The
postcss
andterser
filters. #97. - The
--plugins
argument tolume init
, so you can load and use plugins. Example:lume init --plugins=postcss,terser,pug
. - The property
document
toPage
that returns the parsed HTML. - New plugin
code_highlight
to automatically highlight all code insidepre code
. Previously, it was part of the Markdown plugin. Now it’s decoupled, so it can be used by any template engine. - The
extensions
andattribute
options to theinline
plugin. - New argument
--dev
(or-d
) forlume upgrade
to upgrade to the latest development version.
Changed
- Nunjucks no longer loads
.html
files by default. - The loader argument in
loadPages
andloadAssets
is now optional, and the text loader is used by default. - The loaders and template engines are now fully decoupled.
This allows to use the variable
templateEngine
in a layout. - BREAKING: Removed automatic code highlighting from the Markdown plugin.
Use the new
code_highlight
plugin. - Moved the client code of live reload to a external file
ws.js
. - Live server reloads the entire HTML page after JavaScript changes.
Removed
- The
.markdown
extension. Use.md
or configure the Markdown plugin to enable it. - The method
site.engine()
. Use the third argument ofsite.loadPages()
. For example:site.loadPages([".html"], textLoader, nunjucksEngine)
. - The plugin
dom
. It’s no longer needed because pages can easily return the parsed HTML. For example:site.process([".html"], (page) => modify(page.document))
.
Fixed
- Updated
std
,postcss
,deno_dom
,date_fns
andhighlight.js
(to11.x
).
0.20.2 - 2021-05-18
Added
- More default character replacements to slugifier.
Changed
- Simplified the script runner
by using the
/bin/bash
orPowerShell.exe
executable. This adds support for more features, like pipes, etc.
Fixed
- Updated
pug
. - Resolve the imported files from template engines, like
nunjucks
, when thesrc
is in a subdirectory.
0.20.1 - 2021-05-15
Added
- File
install.js
for easy installation.
Removed
- The command
install
from the CLI.
Fixed
- The Lume version.
0.20.0 - 2021-05-14
Added
- New properties
pretty
andslugify
for theurl
page variable to override the correspondingprettyUrls
andslugifyUrls
site options in particular pages. #95. import_map.json
to the installation process. This allows to import Lume in the_config.js
file withimport lume from "lume/mod.js";
.- New command
lume install
to install Lume easily using the import map. - New script
ci.js
to execute the CLI in a CI environment (without installing it or defining the import map). - New argument
--import-map
for thelume init
command to enable or disable the import map in the_config.js
file. By default, it’s enabled.
Changed
- The minimum Deno version supported to
1.10.0
. - BREAKING:
prettyUrls
to not apply to theurl
page variable if it’s a string. To generate a custom pretty URL: #95.- use an object (e.g.,
{ path: /about-me }
) - add a trailing slash (e.g.,
/about-me/
) - use a full URL (e.g.,
/about-me/index.html
).
- use an object (e.g.,
- BREAKING:
url
values to not assume that the page is HTML. This means the.html
extension won’t be added by default. #95. lume init
to generate a_config.js
file using the import map. Uselume init --import-map=false
to use the old URLs.
Removed
- The property
ext
from theurl
page variable, becausepath
now includes it. #95. - The command
lume update
. It’s not needed thanks to import maps.
Fixed
- Updated the
std
dependency.
0.19.0 - 2021-05-10
Added
- The
url
page variable supports an object withpath
andext
properties to fully customize the output filename. #83. - New plugin
relative_urls
to convert all URLs to relative. #85. - Preprocessors (like processors, but are executed before rendering). #91.
- Allowed setting options for the Nunjucks plugin. #90.
- Options to customize the
slugifyUrls
setting: #94.lowercase
: to enable/disable lowercase conversion (true
by default)alphanumeric
: to convert all characters to ASCII (true
by default)separator
: to customize the separator (-
by default)replace
: an object to replace some special characters.
- Option
includes
to customize the path (or paths) used to resolve the@import
ed files in thepostcss
plugin. Useincludes: false
to disable it. autoprefixer
is included by default in thepostcss
plugin.
Changed
- The default URL of the
paginate
helper to relative:./page-${page}
. - Improved the slugifier to handle the separator better, for example:
200,000*7
becomes200-000-7
and not2000007
!2 / 3%
becomes2/3
and not-2-/-3-
Who is?.txt
becomeswho-is.txt
and notwho-is-.txt
.
Removed
- The deprecated
permalink
variable in pages. Useurl
instead.
Fixed
- Ignored files on server update weren’t detected properly. #88.
- Throw an error when a proper template engine can’t be found. #87.
- Missing doctype after DOM manipulation.
- The
njk
filter didn’t work with async filters. #93. - Fixed support for subextensions (like
page.html.md
). #83. - Improved the errors of the
inline
plugin. - Made sure that all characters are lowercased when slugifying
(so “№” becomes
no
and notNo
). - Relative URL syntax to require the prefix
./
or../
, so URLs like.foo
,..foo
or.../foo
are interpreted correctly. - Changes in
_data/*/*
files weren’t updated correctly on--serve
. - Updated the
postcss
andpostcss_import
dependencies.
0.18.1 - 2021-04-26
Fixed
0.18.0 - 2021-04-24
Added
- A second argument for the
lume()
function to configure the default plugins. #45. - Support for more file formats on local server. #67.
Changed
- API for the
search
helper: #69.- Replaced the operator
~=
with*=
. - Added the
<
,<=
,>
and>=
operators. - Allowed using the
OR
operator with pipes, liketag1|tag2
ortitle=value1|value2
. - Added support for numeric values.
- Added support for date and datetime values.
- Replaced the operator
- The
date("ATOM")
filter usesZ
instead of+00:00
. #64. - Removed the
hljs
class from the blocks of unhighlighted code. #71. - Datetime values in filenames can omit the seconds,
like in
2021-04-24-18-00_post.md
.
Fixed
- User options are overridden by default options in the Markdown plugin.
- Changed some filenames to align with the Deno style guide. #73.
- Updated dependencies. #63, #70, #72, #76, #79.
- Improved the CLI help output. #77.
0.17.1 - 2021-04-14
Added
- New option
-o
/--open
to open the browser automatically when runninglume --serve
. #62.
Removed
- The extensions
.html.js
and.html.ts
introduced in 0.17.0. They can be confusing because not all templates must generate HTML pages, so.tmpl.js
/.tmpl.ts
are more agnostic and fit all cases.
Fixed
- Updated the
postcss
version to fix source maps. - Updated the
postcss_import
version to fix the@charset
at-rule.
0.17.0 - 2021-04-11
Added
- The local IP address is shown on
lume --serve
. #55. - Allowed an empty front matter. #54.
- The extensions
.html.js
and.html.ts
are processed as pages (in order to replace to.tmpl.js
and.tmpl.ts
that will be removed in the future). - Added ability to change the sort direction in
search
. #57.
Changed
- Deprecated the
permalink
page variable. Useurl
instead. #46. - Removed the
permalink
variable in thepaginate
helper that usessprintf
. Now it accepts only theurl
option that must be a function.
Fixed
- Improved the slugifier, including a better support for Unicode. #50, #56.
- Update the MIME types used by the server. #51.
- Updated some dependencies. #59.
0.16.6 - 2021-04-04
Added
- New option
slugifyUrls
to disable the slugifier introduced in 0.16.0. #44.
0.16.5 - 2021-03-29
Fixed
- Undo the change
only rebuild the site if it's needed
due to regression issues.
0.16.4 - 2021-03-28
Added
- Allow to define a function as a
permalink
to generate it dynamically. - The
permalink
value can have a relative path (must start with./
or../
) that will be resolved to the directory name. - The
url
filter allows URLs starting with~
to reference to source files that will be automatically resolved to the final URL.
Fixed
- When reloading files on
lume --serve
, some ignored files weren’t correctly filtered. - Improved
lume --serve
to only rebuild the site if it’s needed. - Several changes for Windows compatibility.
0.16.3 - 2021-03-21
Fixed
- The SVG plugin was failed by the SVGO dependency. #43.
0.16.2 - 2021-03-20
Added
- New, experimental plugin
image
to resize images automatically.
Fixed
- On merge options, arrays were converted to objects.
0.16.1 - 2021-03-14
Fixed
- The version number.
0.16.0 - 2021-03-14
Added
- New page variable
renderOrder
to control the rendering order of the pages. - New CLI alias
-s
for--serve
.
Changed
- Slugify the paths of all generated pages to replace tildes and other conflictive characters and to convert them to lowercase.
- Changed the way to generate multiple pages for more flexibility.
Fixed
- Ensure autogenerated pages aren’t saved if they don’t change (on
--serve
).
0.15.4 - 2021-03-08
Added
- The
date
plugin accepts strings or integer arguments (they will be converted to aDate
with thenew Date(value)
constructor).
Fixed
- Updated dependencies.
0.15.3 - 2021-03-06
Fixed
- Some issues with paths on Windows. #41.
0.15.2 - 2021-02-22
Fixed
- The version number.
0.15.1 - 2021-02-21
Added
- Added a second argument for the default exported function of
cli.js
to set a site directly.
Fixed
- Pug templates loaded with
extends
were cached indefinitely. #39. - Allow relative paths in the
--root
CLI argument.
0.15.0 - 2021-02-05
Added
- New advanced search features:
- You can filter by any field at any level, for example
search.pages("header.categories=my-category")
. - You can sort by any field at any level, for example
search.pages("header.categories=my-category", "my.custom.order.field")
. - New method
search.data()
to return the data assigned to any page or directory.
- You can filter by any field at any level, for example
Changed
- Restore the ability to return the proper exit code on
lume --run
. - Show more info on error.
- Removed the parameter to ignore tags in
search.tags()
. Replaced with a filter like the one insearch.pages()
.
Removed
- The method
search.directory()
to return a directory instance. Usesearch.data()
. - The option
file
to sort the results ofsearch.pages()
. Useurl
instead.
Fixed
- Cache wasn’t correctly refreshed when using different versions of plugins. #35.
- Updated dependencies.
- Ensure the processors are executed in the same order they where defined.
- The
inline
plugin when the site is located in a subdirectory.
0.14.0 - 2021-02-02
Changed
- API for the
Page
class:- Tags are stored as an array in
page.data.tags
(they were previously contained by aSet
inpage.tags
). - Removed the
page.fullData
property.page.data
contains the merged data.
- Tags are stored as an array in
- CLI: #33, #34.
- Switched some options (arguments starting with
--
) to commands:lume --upgrade
tolume upgrade
lume --update
tolume update
lume --init
tolume init
lume --run=<script>
tolume run <script>
.
- Added command-specific help output. For example,
lume run --help
. - Changed the way to specify a different
cwd
: instead oflume path/to/site
, uselume --root=path/to/site
.
- Switched some options (arguments starting with
Fixed
- Link to the docs in
--help
. #32.
0.13.2 - 2021-01-23
Fixed
- The incorrect default configuration for YAML plugin.
0.13.1 - 2021-01-23
Fixed
- PostCSS plugins didn’t process CSS files.
0.13.0 - 2021-01-20
Added
- Normalize options across some plugins.
Changed
- The minimum required Deno version to
1.7.0
. - Temporarily,
lume --run
doesn’t return the proper exit code until a bug in Deno is resolved.
0.12.1 - 2021-01-16
Added
- New command
lume --update
to update the Lume version used by any_config.js
file to the same installed globally in CLI.
Fixed
- The cache in the
search
helper to return the original array instead a clone, so it can be modified outside. - The uncaught exception in the built-in server due to a broken pipe.
0.12.0 - 2021-01-15
Added
- New filter
njk
registered by thenunjucks
plugin. - Moved the
url
filter to a plugin that also creates an additional filterhtmlUrl
to search and fix URLs in HTML code. - New plugin
date
to format date and time values using the library date-fns. - The sorting parameter of
search.pages()
accepts any key (in addition todate
andfile
).
Changed
- Moved
attributes
andclassname
to the newattributes
plugin that’s enabled by default.
Fixed
- The
url
filter withnull
values. - Improved performance of
search.pages()
by implementing a cache system. - Improved performance of merging data and tags by implementing a cache system.
0.11.0 - 2021-01-12
Added
Changed
- Renamed the plugin
css
topostcss
and renamed some of its options:map
tosourceMap
postcssPlugins
toplugins
.
Fixed
- Some files (like layouts) were loaded multiple times. Implemented a cache system to ensure that every file is read only once.
0.10.8 - 2021-01-03
Fixed
- Sometimes, the live reload didn’t reload the page, even if the changes were sent to the browser. #20.
0.10.7 - 2021-01-02
Added
- Support for async filters. #22.
- The events
beforeUpdate
andafterUpdate
got a propertyfiles
with the names of all changed files. - Allow configuring the CSS plugin with the following options:
postcssPlugins
: an array of the PostCSS plugins #26.map
: settrue
to generate source maps.
- Ability to dynamically add or remove pages from processors.
Fixed
- WebSocket sent update messages twice.
- The
paginate
helper didn’t always return the latest page. - Dispatching events that contain scripts
should return
false
if the script fails.
0.10.6 - 2020-12-27
Fixed
- The multipage generation workflow.
- The random WebSocket errors on reloading changes.
0.10.5 - 2020-12-25
Fixed
- The
--location
option being unknown.
0.10.4 - 2020-12-24
Fixed
- Ensure that page tags are always converted to strings.
- The template cache wasn’t always updated.
0.10.3 - 2020-12-21
Fixed
- The
TypeError
on reloading the server. - Removed extra whitespace when parsing the front matter.
- Improved the Pug plugin.
- The TypeScript errors due to conflicts with Eta. #18.
- Added cache for the compiled templates.
- Improved filters.
- Added hot reloading for modules (
.ts
,.js
) and fixed some issues. - The undocumented
data
filter is disabled by default.
0.10.2 - 2020-12-17
Fixed
- Don’t add the
.html
extension to files with a subextension. For examplescripts.js.njk
should be saved asscripts.js
instead ofscripts.js.html
. #13. - Refresh the Deno cache with
lume --upgrade
.
0.10.1 - 2020-12-16
Fixed
- The error on handling
<pre>
elements in Markdown.
0.10.0 - 2020-12-16
Added
- New plugin to use Pug as a template engine. #10.
- New methods
search.previousPage()
andsearch.nextPage()
. - Support for definition lists (
<dl>
) in Markdown. - Improved the default
404
error page. Now it displays a list of files and subdirectories. - New option
templateEngine
to configure the template engine used for every page. #11
Fixed
- Live reload didn’t always work with HTML.
- HTTP server timeout on missing
/index.html
. - Nunjucks cache didn’t detect the changes to included templates.
- Showing the version on upgrade. #9.
url
filter in Markdown.url
filter to handle hashes and queries (such as#hashid
and?query=value
)
0.9.12 - 2020-12-07
Fixed
- The
css
plugin uses only thepostcss-import
andpostcss-nesting
plugins because the others fail on Deno.
0.9.11 - 2020-12-06
Fixed
- The
lume --upgrade
error.
0.9.10 - 2020-12-06
Fixed
- Updated dependencies.
0.9.9 - 2020-12-01
Fixed
- Async script runner no longer exits before all promises are resolved. #7.
- Improved the
--upgrade
command.
0.9.8 - 2020-12-01
Fixed
- Removed a failing dependency.
0.9.7 - 2020-12-01
Added
- Support for executing JavaScript functions with
lume.script()
along with CLI commands. - New CLI arguments
--src
and--dest
to override the corresponding options. - New property
site.flags
that saves all arguments after double dash, like the ones inlume --serve -- flag1 flag2
.
Fixed
- Fixed multi-command scripts in Linux. #7.
- Replaced
dev.jspm.io
withjspm.dev
for dependencies. - Replaced
denopkg.com
withcdn.jsdelivr.net
for dependencies. #8. - Updated
highlight.js
to10.x
.
0.9.6 - 2020-11-28
Fixed
- Creating multiple pages with generators.
- Updated dependencies.
- Simplify the code generated by
lume --init
. - Multiple commands joined with
&&
and&
. #7.
0.9.5 - 2020-11-25
Added
- Support for async generators to create pages.
- Predefined values for
attr
filter. - New option
server
to configure the local server, having propertiesport
andpage404
.
Changed
- Removed the documentation from the main repository.
Fixed
- The version number returned by
lume -v
.
0.9.4 - 2020-11-20
Fixed
- Broken pipe errors on the server.
0.9.3 - 2020-11-13
Fixed
- The version number returned by
lume -v
.
0.9.2 - 2020-11-13
Added
- CLI command
--upgrade
.
Changed
- Renamed the
--version
shortcut-V
to-v
.
Fixed
- The
denjucks
installation. #6.
0.9.1 - 2020-11-06
Fixed
@import
CSS of thecss()
plugin, using_includes
as fallback.
0.9.0 - 2020-11-04
Added
- New method
script()
to execute scripts like a task runner. - Allow running scripts in events.
- Autodiscover
404.html
in the built-in server to handle the 404 responses.
Fixed
- Ignore the
node_modules
directory by default. - Show an error if the
cwd
is not a directory. - Enable the
attr
filter by default.
0.8.1 - 2020-10-28
Added
- New method
ignore()
to ignore files and directories.
Fixed
- The version number on
lume --version
.
0.8.0 - 2020-10-27
Added
- New method
loadAssets()
to register asset loaders. - New CLI argument to build the site in a different directory
and even to choose a different
_config.js
file.
Changed
- Renamed
load()
toloadPages()
and removed theasset
parameter. - Renamed
data()
toloadData()
. - Renamed
helper()
todata()
. - Updating files, when watching, dispatches the events
beforeUpdate
andafterUpdate
(instead ofbeforeBuild
andafterBuild
).
0.7.3 - 2020-10-17
Changed
- Removed the version from the
import
URL in the_config.js
file generated with--init
.
Fixed
- Support special characters in the URL on the local server.
- Rebuild inside a
try
…catch
to prevent death on error.
0.7.2 - 2020-10-10
Fixed
- Updated the version in the CLI.
0.7.1 - 2020-10-10
Fixed
- Permalinks not respecting the
prettyUrls
option. #1. - Improved the docs about updating the Lume version.
0.7.0 - 2020-10-09
Added
- Events
beforeBuild
andafterBuild
. - Helper
paginate()
. - Method
site.process()
. - Option
prettyUrls
, which istrue
by default.
Removed
- The transformers
site.beforeRender()
andsite.afterRender()
. Usesite.process()
instead, which is an equivalent toafterRender
.
Fixed
- Improved performance by executing some operations in parallel.
- Page duplications.
- The
url
filter with non-string values.
0.6.0 - 2020-09-28
Added
- New parameter for
search.pages()
to sort pages alphabetically. - New argument
--help
and aliases-h
and-V
for CLI. - New plugin
eta
to support theEta
template engine. - New method
helper()
to register global helpers that can be used in templates.
Removed
- The parameters
path
andrecursive
insearch.pages()
.
Fixed
- The
url
filter with relative paths. - PostCSS incompatibility with Deno.
0.5.1 - 2020-09-25
Fixed
- The
version
variable.
0.5.0 - 2020-09-24
Added
- Ability to generate multiple pages using generators.
Changed
- Replaced
pathPrefix
andurl
withlocation
.
Fixed
url
filter bugs.
0.4.0 - 2020-09-22
Added
- Ability to include the date in the filename.
- New method
search.folder()
. - New option
--dev
to build in development mode.
Fixed
- Front matter detection.
- Site rebuild after creating or removing directories and files.
- Improved the
url
filter. - Use a content hash to detect real file changes.
- Tags propagation.
- Ensure the
beforeRender
transformers are executed only once.
0.3.1 - 2020-09-19
Fixed
- Use a temporary fork of Denjucks to avoid loading bugs.
0.3.0 - 2020-09-19
Added
- New plugin
svg
to optimize SVG files. - New plugin
dom
to manipulate HTML using the DOM API. - New filter
classname
to manipulate CSS classes. - New filter
attributes
to manipulate HTML attributes. - First tests.
Changed
- Renamed
explorer
tosearch
.
Fixed
- Refactored source load and reload.
- Explorer returning wrong results.
- Live reload.
0.2.3 - 2020-09-14
Fixed
- Moved the WebSocket script to
server.js
to avoid reading problems.
0.2.2 - 2020-09-13
Added
- New command
lume --version
.
Fixed
- CLI installation.
0.2.1 - 2020-09-13
Fixed
- Execute the module loader from remote (https://deno.land/x/lume).
- Use fixed versions for dependencies.
0.2.0 - 2020-09-13
Added
- New command
lume --init
to create a_config.js
file.
Changed
- Merged the
postcss
andstylecow
plugins in the newcss
plugin.
Fixed
- The JSX engine.
0.1.0 - 2020-09-13
The first version.