>웹 프론트엔드 >JS 튜토리얼 >.f `@xmldom/xmldom` 릴리스

.f `@xmldom/xmldom` 릴리스

WBOY
WBOY원래의
2024-08-30 18:39:35664검색

문맥

xmldom은 최신 브라우저에 있는 다음 API를 다른 런타임에 제공하는 javascript ponyfill입니다.

  • XML 문자열을 DOM 트리로 변환
  new DOMParser().parseFromString(xml, mimeType) =>  Document
  • DOM 트리 생성, 액세스 및 수정
  new DOMImplementation().createDocument(...) => Document
  • DOM 트리를 다시 XML 문자열로 직렬화
  new XMLSerializer().serializeToString(node) => string

출처: xmldom 읽어보기

역사

2020년 6월에 포크된 xmldom 라이브러리에 기여하기 시작한 이후 지금까지 40번의 릴리스가 있었습니다.

매우 흥미롭고 도전적인 프로젝트이며 꽤 오랫동안 그 상태로 유지될 것 같습니다.

GitHub에 따르면 포크된 이후 50명 이상이 기여했습니다.

기여해주신 모든 분들께 다시 한 번 감사드립니다.

여기에는 범위가 지정되지 않은 원래 xmldom 패키지에서 범위가 지정된 @xmldom/xmldom 패키지 버전 0.7.0으로 이동하여 모든 보안 수정 사항을 얻은 모든 사람은 포함되지 않습니다.
lts 태그로 출시된 최신 버전은 0.7.13입니다.

브레이킹 체인지가 적용된 마지막 버전은 거의 3년 전인 2021년 12월 22일에 출시된 0.8.0이었습니다.
최신으로 출시된 최신 버전은 0.8.10 입니다.

0.9.0 (2024-08-29)

그런데 오늘 이야기하고 싶은 것은 2022년 10월 이후 다음 태그로 공개된 것들입니다.

이러한 변화는 잠재적인 미래 변화를 위한 명확한 기반을 제공하기 때문에 정말 기대됩니다.

TLDR: 사양을 더욱 일치시키고 차이점을 최대한 명시적으로 표현합니다.

1. 제어권을 돌려주기 위해 mimeType을 적용

구현을 복잡하게 만드는 한 가지 측면은 XML과 HTML을 구문 분석하는 데 서로 다른 규칙이 있다는 것입니다.
xmldom은 (어느 정도) 처음부터 두 가지 맛을 모두 "지원"했습니다. mimeType을 전혀 전달할 필요도 없었습니다. 적용할 규칙은 현재 구문 분석 중인 XML 문자열/노드의 현재 기본 네임스페이스에 따라 결정되었습니다.

0.9.0으로 종료됩니다. 이제부터 DOMParser.parseFromString(xml, mimeType)의 mimeType은 필수이며 XML 또는 HTML 규칙을 적용할지 결정하기 위해 확인되는 유일한 항목입니다. 바스타.

그리고 해당 정보는 결과 문서(새 유형 속성)에 보존되므로 직렬화할 때 적절한 규칙이 다시 적용됩니다.

이것은 대규모(그리고 잠재적으로 파괴될 수 있는) 변경이었지만, 수많은 관련 버그 수정이 가능/훨씬 더 간단해졌고 API 및 구현의 복잡성도 줄어들었기 때문에 준비가 되어 정말 기쁩니다.

또한 이제 지정된 MIME 유형만 허용하고 다른 경우에는 TypeError가 발생합니다.

엄격함과 오류 처리

네이티브 브라우저 API의 오류 처리에 대해 개인적으로 혼란스러운 점은 항상 문서를 반환하고 문제가 발생한 경우 파서 오류 노드가 본문의 첫 번째 하위 노드가 된다는 것입니다.

Release .f `@xmldom/xmldom`

오류 처리는 xmldom에서 이런 방식으로 작동한 적이 없지만 기존 오류 처리는 매우 복잡하고 혼란스럽고 잘못 문서화되어 있으므로 0.9.0에서는 이를 단순화하고 이제 구문 분석 중에 발생하는 모든 잠재적 오류에 대해 (훨씬 더) 일관된 동작을 갖습니다.
ParseError ?가 발생합니다. 다음 중 하나의 경우:

  • 이전 버전에서는 형식이 올바르지 않은 일부 XML 문자열의 경우 반환된 문서에 documentElement가 없어 나중에 코드에서 TypeError가 발생할 가능성이 높았습니다.
  • 이제 형식이 올바르지 않은 여러 XML 문자열이 fatalError로 올바르게 보고되어 항상 추가 처리를 방해합니다.
  • 이전에 오류로 보고되지 않았거나 경고로만 보고되었던 여러 가지 항목도 이제 fatalError로 보고됩니다.

경고(특히 HTML을 구문 분석할 때) 또는 데이터 처리를 중단하지 않는 오류로 보고되는 사례가 여전히 남아 있지만, 새로운 오류 처리 기능을 사용하면 해당 코드가 얼마나 엄격한지 쉽게 결정할 수 있습니다. xmldom을 사용해야 합니다.

DOMParser 생성자에 전달할 수 있는 (사양과 호환되지 않는) 옵션을 onError라고 합니다.
다음 서명이 있는 함수를 사용합니다:

function onError(level:ErrorLevel, message:string, context: DOMHandler):void;
  • ErrorLevel은 경고, 오류 또는 fatalError입니다.
  • xmldom은 이미 가장 일반적인 두 가지 사용 사례에 대한 구현을 제공합니다.
    • 모든 오류 수준 문제에 대해서도 ParseError를 발생시키는 onErrorStopParsing
    • 모든 오류 수준 문제에 대해서도 ParseError를 발생시키는 onWarningStopParsing

예상치 못한 일이 발생하는 첫 번째 신호가 있을 때 XML 처리를 중지하려면 다음 중 하나를 적용하는 것이 좋습니다.

// prevent parsing of XML that has `error`s
new DOMParser({onError: onErrorStopParsing}).parseFromString(...)
// prevent parsing of XML that has `warning`s
new DOMParser({onError: onWarningStopParsing}).parseFromString(...)

compareDocumentPosition, extended HTML entities , null instead of undefined, ...

Another fork of the original xmldom repository made it's way back into our repo by extending the HTML entities to the complete set (also available in 0.8.x) and porting over the implementation of the compareDocumentPosition API. Thank you, and welcome @zorkow

Along the way several places where xmldom so far returned undefined instead of null, have been fixed to adhere to the spec.

And I discovered that the former author seems to have preferred iterating from the end of a list in so many places, that attributes were processed in the reverse order in multiple places, which is now fixed.

The implementation of the removeChild API changed quite a bit, to comply to the spec and throws a DOMException when it should.

And 3 related bugs were fixed in a way that clearly states what the future direction of xmldom is:
Support for lax HTML parsing rules will only be provided if proper strict XML parsing doesn't suffer from it.
The former (broken) "support" for automatic self closing tags in HTML is gone.

coctype internalSubset

More recently @shunkica invested a huge amount of time end effort to fix tons of issues in the former handling of the internalSubset part of the !DOCTYPE.

It is now preserved as part of the internalSubset property of the doctype of a Document and many wrong doctype declarations are now correctly detected as such and reported as a fatalError.

Also thanks to @kboshold for the latest bug fix in this area.

Along the way we created a new module containing regular expressions for the relevant grammar, and correctness checks are based on those and they are properly covered by tests.

It is not the goal of xmldom to become a validating parser, but this a great step to support those documents that come with more complex DTDs.

And there is even more

Up to now development was done using Node v10, since this is also the lowest version xmldom currently supports. As part of the work on the upcoming version, I decided to switch to v18 for development, since more and more devDependencies also made this a minimum requirement. This will be the new minimum runtime version for the time being starting with this release.

I initiated a public poll / dicussion to ask people which version of Node or other runtimes they need support for.
The next breaking release will most likely drop support for some older Node versions, if there is no feedback indicating something different.

Along the way plenty of APIs have received jsdoc comments with proper types.

Thank you

for taking the time to read through all of this.

Those are quite some changes, and I'm very excited to be able to ship those.

I hope you are as excited as I am :)

If you need more details you can go through the very detailed changelog, or head over to the repository and join or start a discussion or file an issue.

위 내용은 .f `@xmldom/xmldom` 릴리스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.