Re: [csswg-drafts] [cssom] Overlapping step 5 and 6 in insert a CSS rule (#8654)

Actually I do not see how it makes it less complex for engines. An author could write this style sheet:

```css
@layer base;
@namespace ns "https://ns.org";
```

But it could not construct the corresponding style sheet?

```js
const sheet = new CSSStyleSheet()
sheet.insertRule('@layer base;')
sheet.insertRule('@namespace ns "https://ns.org";', 1) // InvalidStateError
```

It seems to boil down to sharing the same validation function...

```js
function isInvalidStateForNamespaceRule(rule, rules) {
  return rules.some(isNotImportOrNamespaceOrLayerStatementRule)
}
function parseStyleSheet(rules) {
  const valid = []
  for (const rule of rules) {
    if (isNamespace(Rule) && isInvalidStateForNamespaceRule(rule, valid)) {
      continue
    }
    // ...
    valid.push(rule)
  }
  return rules.filter(rule => )
}
function insertCSSRule(rule, context) {
  // ...
  // Nope, CSSOM requires a different validation here!
  if (isNamespace(Rule) && isInvalidStateForNamespaceRule(rule, context)) {
    throw InvalidStateError
  }
  // ...
}
```

-- 
GitHub Notification of comment by cdoublev
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/8654#issuecomment-1512966145 using your GitHub account


-- 
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config

Received on Tuesday, 18 April 2023 12:03:04 UTC