Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

## v1.1.1

- [x] fix validation issues
- [x] fix bug when css nesting is disabled #89
- [x] validation rules update #87

## v1.1.0

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ Javascript module from cdn

<script type="module">

import {transform} from 'https://esm.sh/@tbela99/css-parser@1.1.0/web';
import {transform} from 'https://esm.sh/@tbela99/css-parser@1.1.1/web';


const css = `
Expand Down
18 changes: 3 additions & 15 deletions dist/index-umd-web.js
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@
const k = Math.pow(29, 3) / Math.pow(3, 3);
const e = Math.pow(6, 3) / Math.pow(29, 3);
// color module v4
const systemColors = new Set(['ActiveText', 'ButtonBorder', 'ButtonFace', 'ButtonText', 'Canvas', 'CanvasText', 'Field', 'FieldText', 'GrayText', 'Highlight', 'HighlightText', 'LinkText', 'Mark', 'MarkText', 'VisitedText'].map(m => m.toLowerCase()));
const systemColors = new Set(['ActiveText', 'ButtonBorder', 'ButtonFace', 'ButtonText', 'Canvas', 'CanvasText', 'Field', 'FieldText', 'GrayText', 'Highlight', 'HighlightText', 'LinkText', 'Mark', 'MarkText', 'VisitedText', '-webkit-focus-ring-color'].map(m => m.toLowerCase()));
// deprecated
const deprecatedSystemColors = new Set(['ActiveBorder', 'ActiveCaption', 'AppWorkspace', 'Background', 'ButtonFace', 'ButtonHighlight', 'ButtonShadow', 'ButtonText', 'CaptionText', 'GrayText', 'Highlight', 'HighlightText', 'InactiveBorder', 'InactiveCaption', 'InactiveCaptionText', 'InfoBackground', 'InfoText', 'Menu', 'MenuText', 'Scrollbar', 'ThreeDDarkShadow', 'ThreeDFace', 'ThreeDHighlight', 'ThreeDLightShadow', 'ThreeDShadow', 'Window', 'WindowFrame', 'WindowText'].map(t => t.toLowerCase()));
// name to color
Expand Down Expand Up @@ -13429,7 +13429,6 @@
break;
}
ast = getParsedSyntax("declarations" /* ValidationSyntaxGroupEnum.Declarations */, node.nam);
// console.error({ast: ast.reduce((acc, curr) => acc + renderSyntax(curr), '')});
if (ast != null) {
let token = null;
const values = node.val.slice();
Expand All @@ -13449,7 +13448,6 @@
}
}
result = doEvaluateSyntax(ast, createContext(values), { ...options, visited: new WeakMap() });
// console.error(JSON.stringify({ast, values, result}, null, 1));
if (result.valid == SyntaxValidationResult.Valid && !result.context.done()) {
let token = null;
while ((token = result.context.next()) != null) {
Expand Down Expand Up @@ -13508,7 +13506,6 @@
let i = 0;
let result;
let token = null;
// console.error(`>> doEvaluateSyntax: ${syntaxes.reduce((acc, curr) => acc + renderSyntax(curr), '')}\n>> ${JSON.stringify({syntaxes}, null, 1)}>> context: ${context.slice<Token>().reduce((acc, curr) => acc + renderToken(curr), '')}`);
for (; i < syntaxes.length; i++) {
syntax = syntaxes[i];
if (context.done()) {
Expand Down Expand Up @@ -13538,7 +13535,6 @@
}
else {
if (isVisited(token, syntax, 'doEvaluateSyntax', options)) {
// console.error(`cyclic dependency: ${renderSyntax(syntax)}`);
return {
valid: SyntaxValidationResult.Drop,
node: token,
Expand Down Expand Up @@ -13686,7 +13682,6 @@
};
}
function match(syntax, context, options) {
// console.error(`>> match(): ${renderSyntax(syntax)}\n>> ${JSON.stringify({syntax}, null, 1)}>> context: ${context.slice<Token>().reduce((acc, curr) => acc + renderToken(curr), '')}`);
let success = false;
let result;
let token = context.peek();
Expand Down Expand Up @@ -13768,17 +13763,12 @@
context
};
}
// {
// console.error(JSON.stringify({funcDef: (getParsedSyntax(ValidationSyntaxGroupEnum.Syntaxes, (syntax as ValidationFunctionDefinitionToken).val + '()')?.[0] as ValidationFunctionToken).chi}, null, 1))
//
// const child = getParsedSyntax(ValidationSyntaxGroupEnum.Syntaxes, (syntax as ValidationFunctionDefinitionToken).val + '()')?.[0] as ValidationFunctionToken;
result = match(getParsedSyntax("syntaxes" /* ValidationSyntaxGroupEnum.Syntaxes */, syntax.val + '()')?.[0], context, options);
if (result.valid == SyntaxValidationResult.Valid) {
context.next();
result.context = context;
return result;
}
// }
break;
case ValidationTokenEnum.DeclarationType:
return doEvaluateSyntax(getParsedSyntax("declarations" /* ValidationSyntaxGroupEnum.Declarations */, syntax.val), context, {
Expand Down Expand Up @@ -13938,7 +13928,7 @@
valid: SyntaxValidationResult.Drop,
node: token,
syntax,
error: `expected <length>`,
error: `expected <length-percentage>`,
context
};
}
Expand Down Expand Up @@ -14121,7 +14111,6 @@
['length-percentage', 'length', 'number', 'number-token', 'angle', 'percentage', 'dimension'].includes(syntax.val)) {
if (!success) {
success = mathFuncs.includes(token.val.toLowerCase()) &&
// (token as FunctionToken).val + '()' in config[ValidationSyntaxGroupEnum.Syntaxes] &&
doEvaluateSyntax(getParsedSyntax("syntaxes" /* ValidationSyntaxGroupEnum.Syntaxes */, token.val + '()')?.[0]?.chi ?? [], createContext(token.chi), {
...options,
isRepeatable: null,
Expand Down Expand Up @@ -21050,8 +21039,7 @@
}
let rule = selector.map(s => {
if (s[0] == '&') {
// @ts-ignore
s[0] = node.optimized.optimized[0];
s.splice(0, 1, ...node.optimized.optimized);
}
return s.join('');
}).join(',');
Expand Down
18 changes: 3 additions & 15 deletions dist/index.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ const D50 = [0.3457 / 0.3585, 1.00000, (1.0 - 0.3457 - 0.3585) / 0.3585];
const k = Math.pow(29, 3) / Math.pow(3, 3);
const e = Math.pow(6, 3) / Math.pow(29, 3);
// color module v4
const systemColors = new Set(['ActiveText', 'ButtonBorder', 'ButtonFace', 'ButtonText', 'Canvas', 'CanvasText', 'Field', 'FieldText', 'GrayText', 'Highlight', 'HighlightText', 'LinkText', 'Mark', 'MarkText', 'VisitedText'].map(m => m.toLowerCase()));
const systemColors = new Set(['ActiveText', 'ButtonBorder', 'ButtonFace', 'ButtonText', 'Canvas', 'CanvasText', 'Field', 'FieldText', 'GrayText', 'Highlight', 'HighlightText', 'LinkText', 'Mark', 'MarkText', 'VisitedText', '-webkit-focus-ring-color'].map(m => m.toLowerCase()));
// deprecated
const deprecatedSystemColors = new Set(['ActiveBorder', 'ActiveCaption', 'AppWorkspace', 'Background', 'ButtonFace', 'ButtonHighlight', 'ButtonShadow', 'ButtonText', 'CaptionText', 'GrayText', 'Highlight', 'HighlightText', 'InactiveBorder', 'InactiveCaption', 'InactiveCaptionText', 'InfoBackground', 'InfoText', 'Menu', 'MenuText', 'Scrollbar', 'ThreeDDarkShadow', 'ThreeDFace', 'ThreeDHighlight', 'ThreeDLightShadow', 'ThreeDShadow', 'Window', 'WindowFrame', 'WindowText'].map(t => t.toLowerCase()));
// name to color
Expand Down Expand Up @@ -13538,7 +13538,6 @@ function evaluateSyntax(node, options) {
break;
}
ast = getParsedSyntax("declarations" /* ValidationSyntaxGroupEnum.Declarations */, node.nam);
// console.error({ast: ast.reduce((acc, curr) => acc + renderSyntax(curr), '')});
if (ast != null) {
let token = null;
const values = node.val.slice();
Expand All @@ -13558,7 +13557,6 @@ function evaluateSyntax(node, options) {
}
}
result = doEvaluateSyntax(ast, createContext(values), { ...options, visited: new WeakMap() });
// console.error(JSON.stringify({ast, values, result}, null, 1));
if (result.valid == SyntaxValidationResult.Valid && !result.context.done()) {
let token = null;
while ((token = result.context.next()) != null) {
Expand Down Expand Up @@ -13617,7 +13615,6 @@ function doEvaluateSyntax(syntaxes, context, options) {
let i = 0;
let result;
let token = null;
// console.error(`>> doEvaluateSyntax: ${syntaxes.reduce((acc, curr) => acc + renderSyntax(curr), '')}\n>> ${JSON.stringify({syntaxes}, null, 1)}>> context: ${context.slice<Token>().reduce((acc, curr) => acc + renderToken(curr), '')}`);
for (; i < syntaxes.length; i++) {
syntax = syntaxes[i];
if (context.done()) {
Expand Down Expand Up @@ -13647,7 +13644,6 @@ function doEvaluateSyntax(syntaxes, context, options) {
}
else {
if (isVisited(token, syntax, 'doEvaluateSyntax', options)) {
// console.error(`cyclic dependency: ${renderSyntax(syntax)}`);
return {
valid: SyntaxValidationResult.Drop,
node: token,
Expand Down Expand Up @@ -13795,7 +13791,6 @@ function matchOccurence(syntax, context, options) {
};
}
function match(syntax, context, options) {
// console.error(`>> match(): ${renderSyntax(syntax)}\n>> ${JSON.stringify({syntax}, null, 1)}>> context: ${context.slice<Token>().reduce((acc, curr) => acc + renderToken(curr), '')}`);
let success = false;
let result;
let token = context.peek();
Expand Down Expand Up @@ -13877,17 +13872,12 @@ function match(syntax, context, options) {
context
};
}
// {
// console.error(JSON.stringify({funcDef: (getParsedSyntax(ValidationSyntaxGroupEnum.Syntaxes, (syntax as ValidationFunctionDefinitionToken).val + '()')?.[0] as ValidationFunctionToken).chi}, null, 1))
//
// const child = getParsedSyntax(ValidationSyntaxGroupEnum.Syntaxes, (syntax as ValidationFunctionDefinitionToken).val + '()')?.[0] as ValidationFunctionToken;
result = match(getParsedSyntax("syntaxes" /* ValidationSyntaxGroupEnum.Syntaxes */, syntax.val + '()')?.[0], context, options);
if (result.valid == SyntaxValidationResult.Valid) {
context.next();
result.context = context;
return result;
}
// }
break;
case ValidationTokenEnum.DeclarationType:
return doEvaluateSyntax(getParsedSyntax("declarations" /* ValidationSyntaxGroupEnum.Declarations */, syntax.val), context, {
Expand Down Expand Up @@ -14047,7 +14037,7 @@ function matchPropertyType(syntax, context, options) {
valid: SyntaxValidationResult.Drop,
node: token,
syntax,
error: `expected <length>`,
error: `expected <length-percentage>`,
context
};
}
Expand Down Expand Up @@ -14230,7 +14220,6 @@ function matchPropertyType(syntax, context, options) {
['length-percentage', 'length', 'number', 'number-token', 'angle', 'percentage', 'dimension'].includes(syntax.val)) {
if (!success) {
success = mathFuncs.includes(token.val.toLowerCase()) &&
// (token as FunctionToken).val + '()' in config[ValidationSyntaxGroupEnum.Syntaxes] &&
doEvaluateSyntax(getParsedSyntax("syntaxes" /* ValidationSyntaxGroupEnum.Syntaxes */, token.val + '()')?.[0]?.chi ?? [], createContext(token.chi), {
...options,
isRepeatable: null,
Expand Down Expand Up @@ -21159,8 +21148,7 @@ function doMinify(ast, options = {}, recursive = false, errors, nestingContent,
}
let rule = selector.map(s => {
if (s[0] == '&') {
// @ts-ignore
s[0] = node.optimized.optimized[0];
s.splice(0, 1, ...node.optimized.optimized);
}
return s.join('');
}).join(',');
Expand Down
3 changes: 1 addition & 2 deletions dist/lib/ast/minify.js
Original file line number Diff line number Diff line change
Expand Up @@ -347,8 +347,7 @@ function doMinify(ast, options = {}, recursive = false, errors, nestingContent,
}
let rule = selector.map(s => {
if (s[0] == '&') {
// @ts-ignore
s[0] = node.optimized.optimized[0];
s.splice(0, 1, ...node.optimized.optimized);
}
return s.join('');
}).join(',');
Expand Down
2 changes: 1 addition & 1 deletion dist/lib/renderer/color/utils/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ const D50 = [0.3457 / 0.3585, 1.00000, (1.0 - 0.3457 - 0.3585) / 0.3585];
const k = Math.pow(29, 3) / Math.pow(3, 3);
const e = Math.pow(6, 3) / Math.pow(29, 3);
// color module v4
const systemColors = new Set(['ActiveText', 'ButtonBorder', 'ButtonFace', 'ButtonText', 'Canvas', 'CanvasText', 'Field', 'FieldText', 'GrayText', 'Highlight', 'HighlightText', 'LinkText', 'Mark', 'MarkText', 'VisitedText'].map(m => m.toLowerCase()));
const systemColors = new Set(['ActiveText', 'ButtonBorder', 'ButtonFace', 'ButtonText', 'Canvas', 'CanvasText', 'Field', 'FieldText', 'GrayText', 'Highlight', 'HighlightText', 'LinkText', 'Mark', 'MarkText', 'VisitedText', '-webkit-focus-ring-color'].map(m => m.toLowerCase()));
// deprecated
const deprecatedSystemColors = new Set(['ActiveBorder', 'ActiveCaption', 'AppWorkspace', 'Background', 'ButtonFace', 'ButtonHighlight', 'ButtonShadow', 'ButtonText', 'CaptionText', 'GrayText', 'Highlight', 'HighlightText', 'InactiveBorder', 'InactiveCaption', 'InactiveCaptionText', 'InfoBackground', 'InfoText', 'Menu', 'MenuText', 'Scrollbar', 'ThreeDDarkShadow', 'ThreeDFace', 'ThreeDHighlight', 'ThreeDLightShadow', 'ThreeDShadow', 'Window', 'WindowFrame', 'WindowText'].map(t => t.toLowerCase()));
// name to color
Expand Down
13 changes: 1 addition & 12 deletions dist/lib/validation/syntax.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ function evaluateSyntax(node, options) {
break;
}
ast = getParsedSyntax("declarations" /* ValidationSyntaxGroupEnum.Declarations */, node.nam);
// console.error({ast: ast.reduce((acc, curr) => acc + renderSyntax(curr), '')});
if (ast != null) {
let token = null;
const values = node.val.slice();
Expand All @@ -122,7 +121,6 @@ function evaluateSyntax(node, options) {
}
}
result = doEvaluateSyntax(ast, createContext(values), { ...options, visited: new WeakMap() });
// console.error(JSON.stringify({ast, values, result}, null, 1));
if (result.valid == SyntaxValidationResult.Valid && !result.context.done()) {
let token = null;
while ((token = result.context.next()) != null) {
Expand Down Expand Up @@ -181,7 +179,6 @@ function doEvaluateSyntax(syntaxes, context, options) {
let i = 0;
let result;
let token = null;
// console.error(`>> doEvaluateSyntax: ${syntaxes.reduce((acc, curr) => acc + renderSyntax(curr), '')}\n>> ${JSON.stringify({syntaxes}, null, 1)}>> context: ${context.slice<Token>().reduce((acc, curr) => acc + renderToken(curr), '')}`);
for (; i < syntaxes.length; i++) {
syntax = syntaxes[i];
if (context.done()) {
Expand Down Expand Up @@ -211,7 +208,6 @@ function doEvaluateSyntax(syntaxes, context, options) {
}
else {
if (isVisited(token, syntax, 'doEvaluateSyntax', options)) {
// console.error(`cyclic dependency: ${renderSyntax(syntax)}`);
return {
valid: SyntaxValidationResult.Drop,
node: token,
Expand Down Expand Up @@ -359,7 +355,6 @@ function matchOccurence(syntax, context, options) {
};
}
function match(syntax, context, options) {
// console.error(`>> match(): ${renderSyntax(syntax)}\n>> ${JSON.stringify({syntax}, null, 1)}>> context: ${context.slice<Token>().reduce((acc, curr) => acc + renderToken(curr), '')}`);
let success = false;
let result;
let token = context.peek();
Expand Down Expand Up @@ -441,17 +436,12 @@ function match(syntax, context, options) {
context
};
}
// {
// console.error(JSON.stringify({funcDef: (getParsedSyntax(ValidationSyntaxGroupEnum.Syntaxes, (syntax as ValidationFunctionDefinitionToken).val + '()')?.[0] as ValidationFunctionToken).chi}, null, 1))
//
// const child = getParsedSyntax(ValidationSyntaxGroupEnum.Syntaxes, (syntax as ValidationFunctionDefinitionToken).val + '()')?.[0] as ValidationFunctionToken;
result = match(getParsedSyntax("syntaxes" /* ValidationSyntaxGroupEnum.Syntaxes */, syntax.val + '()')?.[0], context, options);
if (result.valid == SyntaxValidationResult.Valid) {
context.next();
result.context = context;
return result;
}
// }
break;
case ValidationTokenEnum.DeclarationType:
return doEvaluateSyntax(getParsedSyntax("declarations" /* ValidationSyntaxGroupEnum.Declarations */, syntax.val), context, {
Expand Down Expand Up @@ -611,7 +601,7 @@ function matchPropertyType(syntax, context, options) {
valid: SyntaxValidationResult.Drop,
node: token,
syntax,
error: `expected <length>`,
error: `expected <length-percentage>`,
context
};
}
Expand Down Expand Up @@ -794,7 +784,6 @@ function matchPropertyType(syntax, context, options) {
['length-percentage', 'length', 'number', 'number-token', 'angle', 'percentage', 'dimension'].includes(syntax.val)) {
if (!success) {
success = mathFuncs.includes(token.val.toLowerCase()) &&
// (token as FunctionToken).val + '()' in config[ValidationSyntaxGroupEnum.Syntaxes] &&
doEvaluateSyntax(getParsedSyntax("syntaxes" /* ValidationSyntaxGroupEnum.Syntaxes */, token.val + '()')?.[0]?.chi ?? [], createContext(token.chi), {
...options,
isRepeatable: null,
Expand Down
2 changes: 1 addition & 1 deletion jsr.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@tbela99/css-parser",
"version": "1.1.1-alpha4",
"version": "1.1.1",
"publish": {
"include": [
"src",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@tbela99/css-parser",
"description": "CSS parser for node and the browser",
"version": "v1.1.1-alpha4",
"version": "v1.1.1",
"exports": {
".": "./dist/node/index.js",
"./node": "./dist/node/index.js",
Expand Down
5 changes: 2 additions & 3 deletions src/lib/ast/minify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ function doMinify(ast: AstNode, options: ParserOptions = {}, recursive: boolean
return acc;

}, []);

``
if (!wrap) {

wrap = selector.some((s: string[]) => s[0] != '&');
Expand All @@ -497,8 +497,7 @@ function doMinify(ast: AstNode, options: ParserOptions = {}, recursive: boolean

if (s[0] == '&') {

// @ts-ignore
s[0] = node.optimized.optimized[0];
s.splice(0, 1, ...(node as AstRule)!.optimized!.optimized);
}

return s.join('');
Expand Down
Loading