v3.0.0
3.0.0
Added
- Support for the @container at-rule
- Support for the @starting-style at-rule
- Support for the @scope at-rule
- Support for the @position-try at-rule
- Support for the @layer at-rule
- Support for layer, layer() and supports() in the @media at-rule
- Layer and LayerList node types
- TokenStream#lookupTypeNonSC() method
- <dashed-ident> to generic types
- Feature, FeatureRange, FeatureFunction, Condition, and GeneralEnclosure node types for query-related at-rules
- Support for functions in features and features in range context
- SupportsDeclaration node type to encapsulate a declaration in a @supports query
- Support for the selector() feature in @supports at-rule via FeatureFunction node
Changed
- Aligned <'font'> to CSS Fonts 4
- Aligned <color> to CSS Color 5
- Block to not include { and }
- Atrule and Rule to include { and } for a block
- Ratio parsing to use nodes instead of strings for left and right parts, allow any number for both parts, support functions in both parts, and permit omitting the right part
- MediaFeature node type transitioned to Feature node type with kind: "media" in @media at-rule
- MediaQuery node structure to include modifier, mediaType, and condition properties
- parseWithFallback() to rollback tokenIndex before calling a fallback
Fixed
- Initialization when Object.prototype is extended or polluted
- fork() method to consider the generic option when creating a Lexer instance
- Crash on parse error when custom line or offset is specified via options
- speak syntax patch
- :lang() to accept a list of <ident> or <string> per spec
- Lexer matching for syntaxes referred to as <'property'> when the syntax has a top-level #-multiplier
- Parsing of syntax definition to allow whitespaces in range multiplier
- Added support for the
@containerat-rule - Added support for the
@starting-styleat-rule - Added support for the
@scopeat-rule - Added support for the
@position-tryat-rule - Added support for the
@layerat-rule - Added support for
layer,layer()andsupports()in the@mediaat-rule (according to the @import rule in Cascading and Inheritance 5) - Added
LayerandLayerListnode types - Added
TokenStream#lookupTypeNonSC()method - Added
<dashed-ident>to generic types - Bumped
mdn/datato2.10.0 - Aligned
<'font'>to CSS Fonts 4 - Aligned
<color>to CSS Color 5 - Fixed initialization when
Object.prototypeis extended or polluted (#262) - Fixed
fork()method to consider thegenericoption when creating a Lexer instance (#266) - Fixed crash on parse error when custom
lineoroffsetis specified via options (#251) - Fixed
speaksyntax patch (#241) - Fixed
:lang()to accept a list of<ident>or<string>per spec (#265) - Fixed lexer matching for syntaxes referred to as
<'property'>, when the syntax has a top-level#-multiplier (#102) - Relaxed parsing of syntax definition to allow whitespaces in range multiplier (#270)
- Changed
parseWithFallback()to rollbacktokenIndexbefore calling a fallback - Changed
Blockto not include{and} - Changed
AtruleandRuleto include{and}for a block - Changed
Ratioparsing:- Left and right parts contain nodes instead of strings
- Both left and right parts of a ratio can now be any number; validation of number range is no longer within the parser's scope.
- Both parts can now be functions. Although not explicitly mentioned in the specification, mathematical functions can replace numbers, addressing potential use cases (#162).
- As per the CSS Values and Units Level 4 specification, the right part of
Ratiocan be omitted. While this can't be a parser output (which would produce aNumbernode), it's feasible duringRationode construction or transformation.
- Changes to query-related at-rules:
- Added new node types:
Feature: represents features like(feature)and(feature: value), fundamental for both@mediaand@containerat-rulesFeatureRange: represents features in a range contextFeatureFunction: represents functional features such as@supports'sselector()or@container'sstyle()Condition: used across all query-like at-rules, encapsulating queries with features and thenot,and, andoroperatorsGeneralEnclosure: represents the<general-enclosed>production, which caters to unparsed parentheses or functional expressions
Note: All new nodes include a
kindproperty to define the at-rule type. Supported kinds aremedia,supports, andcontainer - Added support for functions for features and features in a range context, e.g.
(width: calc(100cm / 6)) - Added a
conditionvalue for the parser's context option to parse queries. Use thekindoption to specify the condition type, e.g.,parse('...', { context: 'condition', kind: 'media' }) - Introduced a
featuressection in the syntax configuration for defining functional features of at-rules. Expand definitions using thefork()method. The current definition is as follows:features: { supports: { selector() { /* ... */ } }, container: { style() { /* ... */ } } } - Changes for
@mediaat-rule:- Enhanced prelude parsing for complex queries. Parentheses with errors will be parsed as
GeneralEnclosed - Added support for features in a range context, e.g.
(width > 100px)or(100px < height < 400px) - Transitioned from
MediaFeaturenode type to theFeaturenode type withkind: "media" - Changed
MediaQuerynode structure into the following form:type MediaQuery = { type: "MediaQuery"; modifier: string | null; // e.g. "not", "only", etc. mediaType: string | null; // e.g. "all", "screen", etc. condition: Condition | null; }
- Enhanced prelude parsing for complex queries. Parentheses with errors will be parsed as
- Changes for
@supportsat-rule:- Enhanced prelude parsing for complex queries. Parentheses with errors will be parsed as
GeneralEnclosed - Added support for features in a range context, e.g.
(width > 100px)or(100px < height < 400px) - Added
SupportsDeclarationnode type to encapsulate a declaration in a query, replacingParentheses - Parsing now employs
ConditionorSupportsDeclarationnodes of kindsupportsinstead ofParentheses - Added support for the
selector()feature via theFeatureFunctionnode (configured infeatures.supports.selector)
- Enhanced prelude parsing for complex queries. Parentheses with errors will be parsed as
- Added new node types: