Upgrading to version 6
The latest release of Edge contains a handful of breaking changes, some performance improvements and most importantly works only with ES modules. This guide covers the steps you must follow to upgrade to edge.js@6
.
Upgrading packages
You can install the latest release from the npm packages registry. For now, the version 6 is tagged with @next
tag.
npm i edge.js@next
The functionality of edge-supercharged
plugin is now baked into Edge directly, hence you can uninstall this package and remove its usage.
npm uninstall edge-supercharged
If you were using edge-stacks
, and edge-iconify
, make sure to update these packages as well.
npm i edge-stacks@next
npm i edge-iconify@next
Compatibility plugin
If your projects are not ready for the breaking changes (except ESM migration), you can configure the migrate
plugin at application startup that provides compatibility between version 5 and 6.
import edge from 'edge.js'
import { migrate } from 'edge.js/plugins/migrate'
edge.use(migrate)
Breaking changes
- All of the packages are now ESM only.
- Requires
Node.js >= 18.16.0
. - Layouts and sections have been removed. We recommend using components instead. Configure compatibility plugin to continue using layouts.
- Changes to the Props API.
- Removed
@set
tag in favor of@let
and@assign
tags. Learn more. - Changes to global helpers.
Changes to Props API
The components props have been changed completely, and methods like serialize
and serializeExcept
no longer exist. Instead, you have to use the toAttrs
method.
You can get back the old Props API using the compatibility plugin
/**
* Serialize all attributes
*/
$props.serialize()
$props.toAttrs()
/**
* Serialize all except the mentioned attributes
*/
$props.serializeExcept(['text'])
$props.except(['text']).toAttrs()
/**
* Serialize only the mentioned attributes
*/
$props.serializeOnly(['class'])
$props.only(['class']).toAttrs()
/**
* Merge custom attributes
*/
$props.serializeOnly(['class'], { type: 'text' })
$props.only(['class']).merge({ type: 'text' }).toAttrs()
Removing @set
tag in favor of @let
and @assign
tags
The @set
tag has been removed in the favor of new @let
and the @assign
tags. Their inner workings and syntax are both different from the set tag.
You can add back support for the @set
tag using the compatibility plugin
/**
* Define new variable
*/
@set('username', 'virk')
@let(username = 'virk')
/**
* Update existing variable
*/
@set('username', 'romain')
@assign(username = 'romain')
/**
* Mutate object properties
*/
@set(user, 'username', 'romain')
@assign(user.username = 'romain')
Global helpers changes
- Remove
e
method in favor ofhtml.escape
. - Remove
stringify
method in favor ofjs.stringify
. - Remove
safe
method in favor ofhtml.safe
. - Remove
raise
method. It was never documented.
{{ e(post.content) }}
{{ html.escape(post.content) }}
{{ stringify(someJSONObject) }}
{{ js.stringify(someJSONObject) }}
{{ safe(post.content) }}
{{ html.safe(post.content) }}