@mermaid-js/examples@1.4.0
- #7832
c637c35Thanks @sidharthv96! - feat: add relatable, real-world examples for every diagram type, showcasing each diagram's strengths
mermaid@11.17.0
-
#7842
3670b4eThanks @filipsajdak! - feat(c4): render C4 elements through the unified shape system, using the new person shape -
#7812
cdfc0eaThanks @knsv-bot! - feat(class): routeclassDiagramto the unified (v2) renderer by defaultSet
class: { defaultRenderer: 'dagre-d3' }in the config to restore the legacy renderer. -
#7785
c45cde9Thanks @knsv-bot! - feat(flowchart): add collapsible flowchart subgraphs viasubgraphId@{ view: collapsed } -
#7828
8eb3afcThanks @knsv-bot! - feat(elk): addelk.keepEntryNodeOnTopconfig option to keep a recursive flow's entry node on top -
#7803
74e44ebThanks @knsv-bot! - feat(elk): addelk.nodePlacementAlignmentconfig option -
#7792
ea55b31Thanks @RodrigojndSantos! - feat(er): add subgraph support to ER diagrams. -
#7970
a2c0fb6Thanks @filipsajdak! - feat(flowchart): addfolder,bucket,console(terminal window) andbrowsershapes -
#7842
ae3e115Thanks @filipsajdak! - feat(flowchart): addpersonshape (circular head above a rounded body), usable in flowcharts viaA@{ shape: person } -
#7724
0fd7a9fThanks @xdumaine! - feat(xyChart): add legends for named line and bar series
-
#7847
215fe89Thanks @filipsajdak! - fix(c4): named attributes such as$tags,$linkand$spriteare no longer clobbered to undefined when they arrive in an earlier positional slot of Person/System/Container/Component/Boundary/Rel statements. -
#7871
8d874c4Thanks @knsv-bot! - fix(flowchart): stop dagre layout from spammingwarn-level logs on every node/edge/cluster -
#8071
b3d1f63Thanks @pbrolin47! - fix(block): sibling blocks overlapping in block diagrams when one has a label wider than 200px -
#7870
71b8843Thanks @knsv-bot! - fix: aRangeError: Invalid array lengthcrash when rendering certain edges. -
#7924
9cbef5dThanks @nightt5879! - fix(treeView): icons disappearing after strict security sanitization. -
#7850
a34cbf0Thanks @aloisklink! - fix(block): allow classdefs to update text color -
#7937
f9cbe1eThanks @filipsajdak! - fix(dagre): let a diagram's own nodeSpacing/rankSpacing take effect in the unified dagre layout -
#8005
90eeeceThanks @pbrolin47! - fix(flowchart): reverts the behavior change from #7672 (fix/4648-directions), since arrows between subgraphs are broken -
#7951
afa2f80Thanks @aloisklink! - perf: usefastdomto batch DOM measurements (up to 25% speedup) -
Updated dependencies [
e848423]:- @mermaid-js/parser@1.2.1
@mermaid-js/parser@1.2.1
- #7984
e848423Thanks @aloktomarr! - fix(architecture): allow non-ASCII characters and punctuation in unquoted titles
@mermaid-js/tiny@11.17.0
-
#7842
3670b4eThanks @filipsajdak! - feat(c4): render C4 elements through the unified shape system, using the new person shape -
#7812
cdfc0eaThanks @knsv-bot! - feat(class): routeclassDiagramto the unified (v2) renderer by defaultSet
class: { defaultRenderer: 'dagre-d3' }in the config to restore the legacy renderer. -
#7785
c45cde9Thanks @knsv-bot! - feat(flowchart): add collapsible flowchart subgraphs viasubgraphId@{ view: collapsed } -
#7828
8eb3afcThanks @knsv-bot! - feat(elk): addelk.keepEntryNodeOnTopconfig option to keep a recursive flow's entry node on top -
#7803
74e44ebThanks @knsv-bot! - feat(elk): addelk.nodePlacementAlignmentconfig option -
#7792
ea55b31Thanks @RodrigojndSantos! - feat(er): add subgraph support to ER diagrams. -
#7970
a2c0fb6Thanks @filipsajdak! - feat(flowchart): addfolder,bucket,console(terminal window) andbrowsershapes -
#7842
ae3e115Thanks @filipsajdak! - feat(flowchart): addpersonshape (circular head above a rounded body), usable in flowcharts viaA@{ shape: person } -
#7724
0fd7a9fThanks @xdumaine! - feat(xyChart): add legends for named line and bar series
-
#7847
215fe89Thanks @filipsajdak! - fix(c4): named attributes such as$tags,$linkand$spriteare no longer clobbered to undefined when they arrive in an earlier positional slot of Person/System/Container/Component/Boundary/Rel statements. -
#7871
8d874c4Thanks @knsv-bot! - fix(flowchart): stop dagre layout from spammingwarn-level logs on every node/edge/cluster -
#8071
b3d1f63Thanks @pbrolin47! - fix(block): sibling blocks overlapping in block diagrams when one has a label wider than 200px -
#7870
71b8843Thanks @knsv-bot! - fix: aRangeError: Invalid array lengthcrash when rendering certain edges. -
#7924
9cbef5dThanks @nightt5879! - fix(treeView): icons disappearing after strict security sanitization. -
#7850
a34cbf0Thanks @aloisklink! - fix(block): allow classdefs to update text color -
#7937
f9cbe1eThanks @filipsajdak! - fix(dagre): let a diagram's own nodeSpacing/rankSpacing take effect in the unified dagre layout -
#8005
90eeeceThanks @pbrolin47! - fix(flowchart): reverts the behavior change from #7672 (fix/4648-directions), since arrows between subgraphs are broken -
#7951
afa2f80Thanks @aloisklink! - perf: usefastdomto batch DOM measurements (up to 25% speedup) -
Updated dependencies [
e848423]:- @mermaid-js/parser@1.2.1
@mermaid-js/layout-elk@0.2.3
-
#7828
8eb3afcThanks @knsv-bot! - feat(elk): addelk.keepEntryNodeOnTopconfig option to keep a recursive flow's entry node on top -
#7803
74e44ebThanks @knsv-bot! - feat(elk): addelk.nodePlacementAlignmentconfig option -
Updated dependencies [
215fe89,3670b4e,cdfc0ea,c45cde9,8d874c4,8eb3afc,74e44eb,ea55b31,b3d1f63,71b8843,9cbef5d,a2c0fb6,a34cbf0,f9cbe1e,ae3e115,90eeece,afa2f80,0fd7a9f]:- mermaid@11.17.0
v52.19.1
- create-app: Default manual setup to npm - by @NgoQuocViet2001 and @antfu in https://github.com/slidevjs/slidev/issues/2703 (22b96)
v2.8.53
- New
checkLocalDirectoryoption in the reader options. It compares the local file header of an entry against its central directory record whenFileEntry#getData()is called, and throwsERR_AMBIGUOUS_ARCHIVEwhen the two disagree.truecompares the filename, the general purpose bit flag, the compression method, the CRC-32 checksum and the sizes, likestrictnessset to"strict";falsecompares nothing, like"tolerant". Setting it explicitly always wins overstrictness, whetherstrictnesswas passed to the constructor ofZipReaderor to the call, so it is the way to ask for this one check without the archive-level checks ofcheckAmbiguity, and the way to drop it without giving up the other checksstrictnessperforms. It is also the only way to validate the local file headers of a self-extracting archive, sincecheckAmbiguityrejects prepended data outright - The local file header of an entry now reports the two records the reader had already read and dropped.
LocalDirectory#rawFilenameholds the filename stored in the local file header, which is allowed to differ fromEntryMetaData#rawFilename, and is defined whenstrictnessis"strict"orcheckLocalDirectoryistrue.LocalDirectory#dataDescriptorholds the data descriptor record written after the content, described by the newLocalDataDescriptorinterface, and is defined whencheckOverlappingEntryorcheckOverlappingEntryOnlyis set. It carries the CRC-32 checksum and the sizes stored in the record, each of which is allowed to differ from the central directory, and asignatureflag telling whether the record is preceded by its optional signature. That signature is not part of the original format, it is a later convention writers are free to follow. When the four bytes look like the signature but the values behind them disagree with the central directory, the flag isfalseand the record is read as starting at those four bytes instead - The parsed extra field records are now typed instead of being declared as the bare
EntryExtraField.EntryExtraFieldZip64,EntryExtraFieldNTFS,EntryExtraFieldExtendedTimestampandEntryExtraFieldUnixdescribe the members the reader fills in,EntryExtraFieldUnicodegainsversion,filenameandcomment, andEntryExtraFieldAESgainscompressionMethod, the real compression method of the entry, next tooriginalCompressionMethod, which is the99a WinZip AES header is required to carry in its place SplitDataReadernow accepts an array ofReaderinstances, ofReadableReaderinstances or ofReadableStreaminstances. The last two were declared in the TypeScript definitions and worked nowhere: reading a split archive requires the size of every disk to map a global offset onto one of them, so an element that only provides a stream is now buffered when the reader is initialized. This applies wherever an array of readers is accepted, i.e. the constructor ofZipReader,ZipWriter#add(),ZipWriter#prependZip(),ZipDirectoryEntry#importZip()and thereaderproperty of aZipFileEntryinstanceZipWriter#prependZip()now accepts a reader that only provides aReadableStream. It reads the central directory of the archive it prepends before piping it, so passing a stream used to fail withTypeError: ReadableStream is already locked. The stream is buffered once, like the disks above- New
ERR_INVALID_COMMENT_TYPEerror constant
- The local file header of an entry is now compared against its central directory record by default, except for the filename.
strictnessset to"balanced", the default, used to trust the central directory record entirely;getData()now throwsERR_AMBIGUOUS_ARCHIVEwhen the general purpose bit flag, the compression method, the CRC-32 checksum or the sizes disagree.getEntries()is unaffected, the local file header is only read when the data is. This costs nothing: every one of those fields is read from the local file header anyway to locate the entry data. Only the filename is left out, because comparing it reads the filename bytes as well, which costs one extra read per entry whenever the local file header carries no extra field, the common case."strict"still compares the filename too,"tolerant"still compares nothing, andcheckLocalDirectoryset tofalserestores the previous behavior. The new default was verified against 458,000 entries of real archives, where it rejects none of them - An explicit
checkAmbiguitynow wins over an inheritedstrictness.checkAmbiguityis the boolean form ofstrictness,truemeaning"strict", and the two used to be resolved without regard to where they came from, so acheckAmbiguitypassed togetEntries()or togetData()could not relax astrictnesspassed to the constructor ofZipReader. A value passed to the call now wins over a value passed to the constructor, andstrictnessstill wins overcheckAmbiguitywhen both are passed to the same one.checkAmbiguityset tofalsemeans "not strict" rather than "trust everything", so it downgrades an inherited"strict"to"balanced"and leaves an inherited"tolerant"alone; passstrictnessset to"tolerant"to compare nothing. Code that passesstrictnessand nevercheckAmbiguityresolves exactly as before - The platform byte of the "Version made by" field is now forced instead of being merged into the value given by the
versionMadeByoption. It is set to Unix (3) when the entry carries Unix metadata, i.e. whenuid,gid,unixModeorunixExtraFieldTypeis set, and to MS-DOS (0) whenmsdosAttributesormsdosAttributesRawis set. Only the lower byte of the given value survives in both cases. It used to be combined with the byte already present, so aversionMadeBycarrying another platform produced a value belonging to neither ZipWriter#close()now throws the newERR_INVALID_COMMENT_TYPEerror when the comment it is given is not aUint8Array. Passing a string, the natural mistake, used to fail deep inside the writer withTypeError: Cannot read properties of undefined (reading 'byteLength'), after the entries had been written.getExportedSize()performs the same check on theglobalCommentoption
- The Unix user and group ids are now read from the local file header when the central directory has none. The Info-ZIP Unix type 2 extra field (0x7855) stores them in the local file header only and leaves a zero-length copy in the central directory, so
uidandgidwere undefined on every archive written by Info-ZIP. They are filled in when the data of the entry is read: they are still undefined aftergetEntries()and appear oncegetData()has run, since that is when the local file header is read, and they are also readable onEntryMetaData#localDirectory. A value read from the central directory is never overwritten by the local file header, since the type 2 field truncates the ids to 16 bits while the New Unix field (0x7875) does not - An empty Info-ZIP Unix type 2 extra field no longer hides the ids of the Info-ZIP New Unix extra field next to it. The reader looked at 0x7875 only when 0x7855 was absent, so an entry carrying both, which is what Info-ZIP writes, reported no ids at all although 0x7875 held them
EntryMetaData#rawLastAccessDateandEntryMetaData#rawCreationDateare now filled from the NTFS extra field. They were declared but never set: the rawFILETIMEvalues were stored on the extra field record only.EntryMetaData#rawLastModDateis unaffected, it remains the MS-DOS date and time stored in the header- The entries returned by
ZipReader#getEntries()now carryrawBitFlag,filenameLength,extraFieldLengthandunixExternalUpper. The four properties were declared onEntryMetaDataand read from the central directory, they were simply dropped when the entry object was built unixExternalUpperis now the upper half of theexternalFileAttributesthe entry was written with, on the entry returned byZipWriter#add(). It was computed before theunixModeoption and the Unix file type were folded in, so it reported the default0o644for every entry, whatever the mode: an entry written with0o120777disagreed both with its ownexternalFileAttributesand with what the reader reports for it- A worker that fails to load now falls back to the main scope instead of throwing a
TypeError. The codec pool builds the worker and its interface, then calls it back one turn later; when theerrorevent of the worker arrived in that interval, the error was dropped and the pool went on to post a message to a worker it had already discarded, which failed withCannot read properties of null (reading 'postMessage'). The designed fallback now runs in that case too, with the error of the worker as the reason. This affects the engines where a worker cannot be started at all, e.g. Firefox extensions using manifest v2 and Chromium 76 to 79 - The entry returned by
ZipWriter#add()now defines the same members as the entries returned byZipReader#getEntries():zip64,symlink,encrypted,zipCryptoandmsDosCompatiblewere left undefined instead offalseon one side or the other, and the deprecatedinternalFileAttributeandexternalFileAttributealiases were missing from it
- The
strictnessoption now lists the fields each level compares, and states which of them are read from the local file header anyway - The
versionMadeBy,msDosCompatibleandunixModeoptions now describe how the platform byte and the Unix file type are chosen, including the fact that a folder entry is always written withS_IFDIRwhatever type the mode carries - The
symlinkproperty now points at the option that writes a symbolic link, since there is no option of that name: the file type goes inunixMode, i.e.0o120777with the path of the target as the content of the entry - Several documented defaults disagreed with the code and were corrected:
maxWorkersfalls back to 2 when the environment provides nonavigator.hardwareConcurrency,workerURIpoints at the worker of the build that was imported, the fourCompressionStreamandDecompressionStreamoptions default to the global implementations or to the one embedded in the entry point,lastAccessDateandcreationDatehave no default at all so that the entries do not carry a meaningless time, andversionMadeBydefaults to 768 rather than 20 preventHeadRequestnow states that leaving it unset is not the same as setting it tofalsewhenuseRangeHeaderorforceRangeRequestsis set: the size is then read from a rangedGETrequest, and only an explicitfalserestores theHEADrequestrawLastModDatenow states that it is the MS-DOS date and time of the header and is not replaced by the value of the NTFS extra field, unlikelastModDate
- A workflow step rebuilds the project on every push and fails when the committed build output differs. The release workflow publishes the committed files as they are, it never rebuilds, so a stale
dist/orindex.min.jsat a tag would ship to npm and JSR. Pull requests are exempt, asking outside contributors to commit build output would add an unreviewable diff to every change - The release workflow now publishes only when the test suite passed on the released commit
- A new audit compares the shapes of the objects the library builds at runtime against the interfaces declared in
index.d.ts, in addition to the audit of the read and write surfaces added in v2.8.52. It is what found the members left undefined and the extra field records declared as the bareEntryExtraField - A regression test covers the backpressure of the writer on the web worker path
- The browser runner restarts the browser and runs the suite again when the session is lost, and its
--headfuloption was renamed to--headed - The Safari job runs on macOS 15 instead of macOS latest, where the browser loses its window or its session in the middle of the suite more often
- The workers are terminated between the tests in the Node.js, Deno and Bun runners, and the Bun runner sets its own timeout
- A test reproduces the ordering that made a failing worker throw instead of falling back, i.e. the error of the worker arriving before the pool sends it its first message
- Claude (Opus 5) contributed to every change listed above
Full Changelog: https://github.com/gildas-lormeau/zip.js/compare/v2.8.52...v2.8.53
v1.6.19
HLS.js v1.6.19 includes bug fixes and improvements over the last release.
https://github.com/video-dev/hls.js/compare/v1.6.18...v1.6.19
- Fix permanent stall in encrypted low-latency streams (#7976) @zaki699-blip
- Workaround for macOS and iOS 27 beta regression in ManagedMediaSource "startstreaming" (cherry-pick of #7984) @robwalch
https://392c003f.hls-js-dev.pages.dev/demo/
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.