@lofcz/tikz 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +2 -1
- package/README.md +13 -2
- package/package.json +3 -2
- package/runtime/dist/bundles/cm-tfm/chunks/0.br +0 -0
- package/runtime/dist/bundles/cm-tfm/chunks/1.br +0 -0
- package/runtime/dist/bundles/cm-tfm/chunks/2.br +0 -0
- package/runtime/dist/bundles/cm-tfm/chunks/3.br +0 -0
- package/runtime/dist/bundles/cm-tfm/files.index.json +1 -1
- package/runtime/dist/bundles/cm-tfm/manifest.json +1 -1
- package/runtime/dist/bundles/cm-type1/chunks/0.br +0 -0
- package/runtime/dist/bundles/cm-type1/chunks/1.br +0 -0
- package/runtime/dist/bundles/cm-type1/chunks/2.br +0 -0
- package/runtime/dist/bundles/cm-type1/chunks/3.br +0 -0
- package/runtime/dist/bundles/cm-type1/chunks/4.br +0 -0
- package/runtime/dist/bundles/cm-type1/chunks/5.br +0 -0
- package/runtime/dist/bundles/cm-type1/chunks/6.br +0 -0
- package/runtime/dist/bundles/cm-type1/chunks/7.br +0 -0
- package/runtime/dist/bundles/cm-type1/files.index.json +1 -1
- package/runtime/dist/bundles/cm-type1/manifest.json +1 -1
- package/runtime/dist/bundles/core/chunks/0.br +0 -0
- package/runtime/dist/bundles/core/chunks/1.br +0 -0
- package/runtime/dist/bundles/core/chunks/2.br +0 -0
- package/runtime/dist/bundles/core/files.index.json +1 -1
- package/runtime/dist/bundles/core/manifest.json +1 -1
- package/runtime/dist/bundles/filesystem.json +1 -0
- package/runtime/dist/bundles/latex-core/chunks/0.br +0 -0
- package/runtime/dist/bundles/latex-core/chunks/1.br +0 -0
- package/runtime/dist/bundles/latex-core/chunks/2.br +0 -0
- package/runtime/dist/bundles/latex-core/chunks/3.br +0 -0
- package/runtime/dist/bundles/latex-core/chunks/4.br +0 -0
- package/runtime/dist/bundles/latex-core/chunks/5.br +0 -0
- package/runtime/dist/bundles/latex-core/chunks/6.br +0 -0
- package/runtime/dist/bundles/latex-core/chunks/7.br +0 -0
- package/runtime/dist/bundles/latex-core/chunks/8.br +0 -0
- package/runtime/dist/bundles/latex-core/files.index.json +1 -1
- package/runtime/dist/bundles/latex-core/manifest.json +1 -1
- package/runtime/dist/bundles/latex-extra/chunks/0.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/1.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/10.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/11.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/12.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/13.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/14.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/15.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/16.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/17.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/18.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/19.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/2.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/20.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/21.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/22.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/23.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/24.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/25.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/3.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/4.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/5.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/6.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/7.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/8.br +0 -0
- package/runtime/dist/bundles/latex-extra/chunks/9.br +0 -0
- package/runtime/dist/bundles/latex-extra/files.index.json +1 -1
- package/runtime/dist/bundles/latex-extra/manifest.json +1 -1
- package/runtime/dist/bundles/lm-fonts/chunks/0.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/1.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/10.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/11.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/12.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/13.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/14.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/15.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/16.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/17.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/18.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/19.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/2.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/20.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/21.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/22.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/23.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/24.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/25.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/26.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/27.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/28.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/29.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/3.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/4.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/5.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/6.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/7.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/8.br +0 -0
- package/runtime/dist/bundles/lm-fonts/chunks/9.br +0 -0
- package/runtime/dist/bundles/lm-fonts/files.index.json +1 -1
- package/runtime/dist/bundles/lm-fonts/manifest.json +1 -1
- package/runtime/dist/bundles/luatex/chunks/0.br +0 -0
- package/runtime/dist/bundles/luatex/chunks/1.br +0 -0
- package/runtime/dist/bundles/luatex/chunks/2.br +0 -0
- package/runtime/dist/bundles/luatex/files.index.json +1 -1
- package/runtime/dist/bundles/luatex/manifest.json +1 -1
- package/runtime/dist/bundles/ps-fonts/chunks/0.br +0 -0
- package/runtime/dist/bundles/ps-fonts/chunks/1.br +0 -0
- package/runtime/dist/bundles/ps-fonts/chunks/2.br +0 -0
- package/runtime/dist/bundles/ps-fonts/chunks/3.br +0 -0
- package/runtime/dist/bundles/ps-fonts/chunks/4.br +0 -0
- package/runtime/dist/bundles/ps-fonts/chunks/5.br +0 -0
- package/runtime/dist/bundles/ps-fonts/files.index.json +1 -1
- package/runtime/dist/bundles/ps-fonts/manifest.json +1 -1
- package/runtime/dist/bundles/tex-plain/chunks/0.br +0 -0
- package/runtime/dist/bundles/tex-plain/chunks/1.br +0 -0
- package/runtime/dist/bundles/tex-plain/chunks/2.br +0 -0
- package/runtime/dist/bundles/tex-plain/chunks/3.br +0 -0
- package/runtime/dist/bundles/tex-plain/chunks/4.br +0 -0
- package/runtime/dist/bundles/tex-plain/chunks/5.br +0 -0
- package/runtime/dist/bundles/tex-plain/chunks/6.br +0 -0
- package/runtime/dist/bundles/tex-plain/files.index.json +1 -1
- package/runtime/dist/bundles/tex-plain/manifest.json +1 -1
- package/runtime/dist/bundles/tikz-snapshot/files.index.json +1 -1
- package/runtime/dist/bundles/tikz-snapshot/manifest.json +1 -1
- package/runtime/dist/core.d.ts +3 -1
- package/runtime/dist/core.js +18 -7
- package/runtime/dist/index.js +22 -7
- package/runtime/dist/node.js +40 -26
- package/runtime/dist/types.d.ts +5 -0
- package/runtime/dist/vfs/bundle.d.ts +7 -0
- package/runtime/dist/vfs/bundle.js +20 -0
- package/runtime/upstream.json +1 -1
- package/src/browser-worker.js +2 -2
- package/src/deploy.js +14 -3
- package/src/index.js +3 -2
- package/src/worker.js +3 -3
- package/upstream.json +1 -1
- package/runtime/dist/bundles/cm-tfm/files.br +0 -0
- package/runtime/dist/bundles/cm-type1/files.br +0 -0
- package/runtime/dist/bundles/core/files.br +0 -0
- package/runtime/dist/bundles/latex-core/files.br +0 -0
- package/runtime/dist/bundles/latex-extra/files.br +0 -0
- package/runtime/dist/bundles/lm-fonts/files.br +0 -0
- package/runtime/dist/bundles/luatex/files.br +0 -0
- package/runtime/dist/bundles/ps-fonts/files.br +0 -0
- package/runtime/dist/bundles/tex-plain/files.br +0 -0
- /package/runtime/dist/bundles/tikz-snapshot/{files.br → chunks/0.br} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"tex-plain","version":"2025.1","texlive":"2025","files":{"tex/generic/atbegshi/atbegshi.sty":{"size":24708,"sha":"a73003b4bb2dc8a8"},"tex/generic/babel/hyphen.cfg":{"size":6445,"sha":"f646844e8fab61d1"},"tex/generic/babel/luababel.def":{"size":75294,"sha":"7d720228e51dc87c"},"tex/generic/bigintcalc/bigintcalc.sty":{"size":40635,"sha":"050f2ad3a3671a1f"},"tex/generic/bitset/bitset.sty":{"size":33961,"sha":"af5c7196c69dc9d2"},"tex/generic/chemfig/chemfig-lewis.tex":{"size":5803,"sha":"d907dab915078c7d"},"tex/generic/chemfig/chemfig.sty":{"size":388,"sha":"0c19604354900a8e"},"tex/generic/chemfig/chemfig.tex":{"size":125167,"sha":"18caf07da06abe7c"},"tex/generic/circuitikz/ctikzstyle-example.tex":{"size":280,"sha":"59f577f0360decc9"},"tex/generic/circuitikz/ctikzstyle-legacy.tex":{"size":3150,"sha":"b1b4fd1866df6d18"},"tex/generic/circuitikz/ctikzstyle-romano.tex":{"size":2240,"sha":"69878376ef7ec6ff"},"tex/generic/circuitikz/pgfcirc.defines.tex":{"size":47046,"sha":"ec30235b60a9f072"},"tex/generic/circuitikz/pgfcircbipoles.tex":{"size":319927,"sha":"2c526e5ac600455a"},"tex/generic/circuitikz/pgfcirccurrent.tex":{"size":9538,"sha":"b4067c61c07792dd"},"tex/generic/circuitikz/pgfcircflow.tex":{"size":9804,"sha":"959e6f05fcda8db2"},"tex/generic/circuitikz/pgfcirclabel.tex":{"size":15442,"sha":"ebf9761a4dbdc156"},"tex/generic/circuitikz/pgfcircmonopoles.tex":{"size":62349,"sha":"7531190c1ad26ad4"},"tex/generic/circuitikz/pgfcircmultipoles.tex":{"size":140232,"sha":"3760ab93dcda29df"},"tex/generic/circuitikz/pgfcircpath.tex":{"size":17175,"sha":"7a83c9af92d8dd1a"},"tex/generic/circuitikz/pgfcircquadpoles.tex":{"size":105987,"sha":"875371bdf94a1a42"},"tex/generic/circuitikz/pgfcircshapes.tex":{"size":33716,"sha":"4a72bd0ea8075199"},"tex/generic/circuitikz/pgfcirctripoles.tex":{"size":400264,"sha":"53cdb3a70e6a821f"},"tex/generic/circuitikz/pgfcircutils.tex":{"size":14587,"sha":"ed68f13d561e9d63"},"tex/generic/circuitikz/pgfcircvoltage.tex":{"size":36286,"sha":"821ac7ac0489c1dd"},"tex/generic/etex/etex.src":{"size":33286,"sha":"7af74a3fde135872"},"tex/generic/etexcmds/etexcmds.sty":{"size":7734,"sha":"a7db2834e02bd11b"},"tex/generic/gettitlestring/gettitlestring.sty":{"size":8371,"sha":"26ab10fd43fd5a90"},"tex/generic/hyphen/dumyhyph.tex":{"size":419,"sha":"99d210320228a242"},"tex/generic/hyphen/grahyph5.tex":{"size":36706,"sha":"eeb7329e7dd94b87"},"tex/generic/hyphen/grmhyph5.tex":{"size":5902,"sha":"becdf19387bc265d"},"tex/generic/hyphen/grphyph5.tex":{"size":13326,"sha":"1bfe51dcff12f444"},"tex/generic/hyphen/hyphen.tex":{"size":27860,"sha":"2c18acdc04c1a066"},"tex/generic/hyphen/hypht1.tex":{"size":9081,"sha":"6a96e10de9b34ad9"},"tex/generic/hyphen/ibyhyph.tex":{"size":28651,"sha":"b12db81b0c101b38"},"tex/generic/hyphen/zerohyph.tex":{"size":402,"sha":"80b6e5b7ff3bcd2f"},"tex/generic/iftex/ifetex.sty":{"size":529,"sha":"6a522456643896e4"},"tex/generic/iftex/ifluatex.sty":{"size":492,"sha":"1f1dd9c7cc37bfc5"},"tex/generic/iftex/ifpdf.sty":{"size":480,"sha":"92b2cd262dc42d52"},"tex/generic/iftex/iftex.sty":{"size":7984,"sha":"0dc0cefe2131f823"},"tex/generic/iftex/ifvtex.sty":{"size":1057,"sha":"1138730b9ad7d9f6"},"tex/generic/iftex/ifxetex.sty":{"size":488,"sha":"b4729967ca572a3f"},"tex/generic/infwarerr/infwarerr.sty":{"size":8356,"sha":"8c3e23b8bb7d940f"},"tex/generic/intcalc/intcalc.sty":{"size":31769,"sha":"1343ba1b10b245bf"},"tex/generic/kvdefinekeys/kvdefinekeys.sty":{"size":5412,"sha":"c42f0c2628dc5fbd"},"tex/generic/ltxcmds/ltxcmds.sty":{"size":17865,"sha":"8fea89995d37ba4c"},"tex/generic/luatex85/luatex85.sty":{"size":5870,"sha":"6d2a0ec7974247ec"},"tex/generic/mp-tikz-wasm/tikzlibrarysvg.attributes.code.tex":{"size":6164,"sha":"a4e73b1206f18bee"},"tex/generic/pdfescape/pdfescape.sty":{"size":19007,"sha":"b3f0e56366c11b85"},"tex/generic/pdftex/glyphtounicode.tex":{"size":216747,"sha":"395e568c1f4db5e8"},"tex/generic/pdftex/pdfcolor.tex":{"size":5687,"sha":"84b30448637fd29e"},"tex/generic/pdftexcmds/pdftexcmds.lua":{"size":9447,"sha":"872a8889c423ec55"},"tex/generic/pdftexcmds/pdftexcmds.sty":{"size":20089,"sha":"2df7e0bd148c99d8"},"tex/generic/simplekv/simplekv.sty":{"size":161,"sha":"3fc1096a8c34760b"},"tex/generic/simplekv/simplekv.tex":{"size":12655,"sha":"d4d089826306a58a"},"tex/generic/stringenc/se-ascii-print.def":{"size":3257,"sha":"77c07ed6267049f3"},"tex/generic/stringenc/se-ascii.def":{"size":2870,"sha":"0c8d40cb65411fee"},"tex/generic/stringenc/se-clean7bit.def":{"size":3765,"sha":"aa70dd7e8990b2cb"},"tex/generic/stringenc/se-cp1250.def":{"size":10277,"sha":"d2068e5fa58864c9"},"tex/generic/stringenc/se-cp1251.def":{"size":10128,"sha":"63704757c1c8d231"},"tex/generic/stringenc/se-cp1252.def":{"size":4858,"sha":"e21b611d03bf8e1f"},"tex/generic/stringenc/se-cp1257.def":{"size":9657,"sha":"4ec2651c335029d2"},"tex/generic/stringenc/se-cp437.def":{"size":10585,"sha":"05e91523dc818207"},"tex/generic/stringenc/se-cp850.def":{"size":10434,"sha":"b15d916580e45d29"},"tex/generic/stringenc/se-cp852.def":{"size":10733,"sha":"3dcbfa0c3487f170"},"tex/generic/stringenc/se-cp855.def":{"size":10349,"sha":"3b185da948e95ed6"},"tex/generic/stringenc/se-cp858.def":{"size":10415,"sha":"1e40d8d74672e14a"},"tex/generic/stringenc/se-cp865.def":{"size":10605,"sha":"24af379d5e7ad707"},"tex/generic/stringenc/se-cp866.def":{"size":10531,"sha":"a45de2d50e0d2733"},"tex/generic/stringenc/se-dec-mcs.def":{"size":7864,"sha":"91dc69b841166064"},"tex/generic/stringenc/se-iso-8859-1.def":{"size":3357,"sha":"74c79c0b12b0d39b"},"tex/generic/stringenc/se-iso-8859-10.def":{"size":9508,"sha":"9bfcbfdd02bf6695"},"tex/generic/stringenc/se-iso-8859-11.def":{"size":8046,"sha":"5158a22308bb0043"},"tex/generic/stringenc/se-iso-8859-13.def":{"size":9190,"sha":"787d127c7ad98a00"},"tex/generic/stringenc/se-iso-8859-14.def":{"size":9571,"sha":"7e25fdaaa78e3120"},"tex/generic/stringenc/se-iso-8859-15.def":{"size":9131,"sha":"266c8fb3f31653cb"},"tex/generic/stringenc/se-iso-8859-16.def":{"size":9476,"sha":"29a72ed727e910c2"},"tex/generic/stringenc/se-iso-8859-2.def":{"size":9224,"sha":"2a7c60979e263e0b"},"tex/generic/stringenc/se-iso-8859-3.def":{"size":8734,"sha":"9a6bdf7bce6b185c"},"tex/generic/stringenc/se-iso-8859-4.def":{"size":9196,"sha":"b0737bf21ae2dc40"},"tex/generic/stringenc/se-iso-8859-5.def":{"size":8835,"sha":"ff7ccc62228088ee"},"tex/generic/stringenc/se-iso-8859-6.def":{"size":5528,"sha":"f9fba42471db4619"},"tex/generic/stringenc/se-iso-8859-7.def":{"size":8589,"sha":"4efcfb39cd3fb844"},"tex/generic/stringenc/se-iso-8859-8.def":{"size":5956,"sha":"455433c65e5975f7"},"tex/generic/stringenc/se-iso-8859-9.def":{"size":8976,"sha":"4c3080873d39ce9c"},"tex/generic/stringenc/se-koi8-r.def":{"size":10600,"sha":"62b74a3118529b10"},"tex/generic/stringenc/se-mac-centeuro.def":{"size":11598,"sha":"9e648981230327d5"},"tex/generic/stringenc/se-mac-cyrillic.def":{"size":10942,"sha":"f77f04a3250c56a6"},"tex/generic/stringenc/se-mac-roman.def":{"size":10575,"sha":"a00115bfe651fc0a"},"tex/generic/stringenc/se-nextstep.def":{"size":10464,"sha":"799ca9c1eef76dd1"},"tex/generic/stringenc/se-pdfdoc.def":{"size":5108,"sha":"f168cc1772edb0e2"},"tex/generic/stringenc/se-utf16le.def":{"size":2764,"sha":"20213ef0fd25b6f9"},"tex/generic/stringenc/se-utf32be.def":{"size":4522,"sha":"aed4597f5fce2d1d"},"tex/generic/stringenc/se-utf32le.def":{"size":4718,"sha":"a00be3fae9ee794c"},"tex/generic/stringenc/se-utf8.def":{"size":11635,"sha":"aeecc3b65c8002f2"},"tex/generic/stringenc/stringenc.sty":{"size":21514,"sha":"b134a7bba648a698"},"tex/generic/tex-ini-files/dviluatex.ini":{"size":82,"sha":"cc7cb46692f7a54b"},"tex/generic/tex-ini-files/luatex.ini":{"size":289,"sha":"bc47cd163289fecb"},"tex/generic/tex-ini-files/luatexconfig.tex":{"size":2036,"sha":"e455906a91a8a040"},"tex/generic/tex-ini-files/luatexiniconfig.tex":{"size":606,"sha":"b3e97563b977e36e"},"tex/generic/tex-ini-files/pdftexconfig.tex":{"size":549,"sha":"87102cd6fa7307af"},"tex/generic/tex-ini-files/pdfxmltex.ini":{"size":243,"sha":"0286c93d313d8034"},"tex/generic/tex-ini-files/xetex.ini":{"size":3428,"sha":"6aa9a56c7947f655"},"tex/generic/tex-ini-files/xmltex.ini":{"size":160,"sha":"e7bb21eb0a3457d9"},"tex/generic/uniquecounter/uniquecounter.sty":{"size":7008,"sha":"9d11c81501953d68"},"tex/generic/xkeyval/keyval.tex":{"size":2725,"sha":"7a8dbfe90926a910"},"tex/generic/xkeyval/pst-xkey.tex":{"size":2369,"sha":"4549723f49707c14"},"tex/generic/xkeyval/xkeyval.tex":{"size":19231,"sha":"29c2b60c6973c374"},"tex/generic/xkeyval/xkvtxhdr.tex":{"size":2856,"sha":"cc6150c71e73d1dd"},"tex/generic/xkeyval/xkvutils.tex":{"size":7677,"sha":"5e82c31b1b4492c8"},"tex/plain/base/fontchart.tex":{"size":3201,"sha":"c92c60b5aa85a634"},"tex/plain/base/gkpmac.tex":{"size":36500,"sha":"52787766e84cf3df"},"tex/plain/base/letterformat.tex":{"size":2892,"sha":"def29743d02d0f43"},"tex/plain/base/list-latin.tex":{"size":2292,"sha":"fa7f1928a6846739"},"tex/plain/base/list.tex":{"size":1581,"sha":"6ce822dc31d6934d"},"tex/plain/base/llist-latin.tex":{"size":2894,"sha":"a73985923307aaa0"},"tex/plain/base/llist.tex":{"size":2177,"sha":"b9184319aa034b63"},"tex/plain/base/mptmac.tex":{"size":3267,"sha":"a15782301c853be7"},"tex/plain/base/picmac.tex":{"size":8240,"sha":"111703092e524997"},"tex/plain/base/plain.tex":{"size":44615,"sha":"7c1223b880fa5135"},"tex/plain/base/wlist.tex":{"size":1698,"sha":"dd0f2a0d9743af6e"},"tex/plain/config/etex.ini":{"size":69,"sha":"a6e65150abae7552"},"tex/plain/config/tex.ini":{"size":66,"sha":"c1ccea43dc1c3d07"},"tex/plain/etex/etex.src":{"size":31690,"sha":"00b9b0017fc2347a"},"tex/plain/etex/etexdefs.lib":{"size":3591,"sha":"0c6a325ce1810cff"},"web2c/etex.fmt":{"size":127343,"sha":"b276d57b2fbf5575"},"web2c/plain.fmt":{"size":113546,"sha":"8bdb51b8e06b0f42"}},"eager":[]}
|
|
1
|
+
{"name":"tex-plain","version":"2025.1","texlive":"2025","files":{"tex/generic/atbegshi/atbegshi.sty":{"size":24708,"sha":"a73003b4bb2dc8a8"},"tex/generic/babel/hyphen.cfg":{"size":6445,"sha":"f646844e8fab61d1"},"tex/generic/babel/luababel.def":{"size":75294,"sha":"7d720228e51dc87c"},"tex/generic/bigintcalc/bigintcalc.sty":{"size":40635,"sha":"050f2ad3a3671a1f"},"tex/generic/bitset/bitset.sty":{"size":33961,"sha":"af5c7196c69dc9d2"},"tex/generic/chemfig/chemfig-lewis.tex":{"size":5803,"sha":"d907dab915078c7d"},"tex/generic/chemfig/chemfig.sty":{"size":388,"sha":"0c19604354900a8e"},"tex/generic/chemfig/chemfig.tex":{"size":125167,"sha":"18caf07da06abe7c"},"tex/generic/circuitikz/ctikzstyle-example.tex":{"size":280,"sha":"59f577f0360decc9"},"tex/generic/circuitikz/ctikzstyle-legacy.tex":{"size":3150,"sha":"b1b4fd1866df6d18"},"tex/generic/circuitikz/ctikzstyle-romano.tex":{"size":2240,"sha":"69878376ef7ec6ff"},"tex/generic/circuitikz/pgfcirc.defines.tex":{"size":47046,"sha":"ec30235b60a9f072"},"tex/generic/circuitikz/pgfcircbipoles.tex":{"size":319927,"sha":"2c526e5ac600455a"},"tex/generic/circuitikz/pgfcirccurrent.tex":{"size":9538,"sha":"b4067c61c07792dd"},"tex/generic/circuitikz/pgfcircflow.tex":{"size":9804,"sha":"959e6f05fcda8db2"},"tex/generic/circuitikz/pgfcirclabel.tex":{"size":15442,"sha":"ebf9761a4dbdc156"},"tex/generic/circuitikz/pgfcircmonopoles.tex":{"size":62349,"sha":"7531190c1ad26ad4"},"tex/generic/circuitikz/pgfcircmultipoles.tex":{"size":140232,"sha":"3760ab93dcda29df"},"tex/generic/circuitikz/pgfcircpath.tex":{"size":17175,"sha":"7a83c9af92d8dd1a"},"tex/generic/circuitikz/pgfcircquadpoles.tex":{"size":105987,"sha":"875371bdf94a1a42"},"tex/generic/circuitikz/pgfcircshapes.tex":{"size":33716,"sha":"4a72bd0ea8075199"},"tex/generic/circuitikz/pgfcirctripoles.tex":{"size":400264,"sha":"53cdb3a70e6a821f"},"tex/generic/circuitikz/pgfcircutils.tex":{"size":14587,"sha":"ed68f13d561e9d63"},"tex/generic/circuitikz/pgfcircvoltage.tex":{"size":36286,"sha":"821ac7ac0489c1dd"},"tex/generic/etex/etex.src":{"size":33286,"sha":"7af74a3fde135872"},"tex/generic/etexcmds/etexcmds.sty":{"size":7734,"sha":"a7db2834e02bd11b"},"tex/generic/gettitlestring/gettitlestring.sty":{"size":8371,"sha":"26ab10fd43fd5a90"},"tex/generic/hyphen/dumyhyph.tex":{"size":419,"sha":"99d210320228a242"},"tex/generic/hyphen/grahyph5.tex":{"size":36706,"sha":"eeb7329e7dd94b87"},"tex/generic/hyphen/grmhyph5.tex":{"size":5902,"sha":"becdf19387bc265d"},"tex/generic/hyphen/grphyph5.tex":{"size":13326,"sha":"1bfe51dcff12f444"},"tex/generic/hyphen/hyphen.tex":{"size":27860,"sha":"2c18acdc04c1a066"},"tex/generic/hyphen/hypht1.tex":{"size":9081,"sha":"6a96e10de9b34ad9"},"tex/generic/hyphen/ibyhyph.tex":{"size":28651,"sha":"b12db81b0c101b38"},"tex/generic/hyphen/zerohyph.tex":{"size":402,"sha":"80b6e5b7ff3bcd2f"},"tex/generic/iftex/ifetex.sty":{"size":529,"sha":"6a522456643896e4"},"tex/generic/iftex/ifluatex.sty":{"size":492,"sha":"1f1dd9c7cc37bfc5"},"tex/generic/iftex/ifpdf.sty":{"size":480,"sha":"92b2cd262dc42d52"},"tex/generic/iftex/iftex.sty":{"size":7984,"sha":"0dc0cefe2131f823"},"tex/generic/iftex/ifvtex.sty":{"size":1057,"sha":"1138730b9ad7d9f6"},"tex/generic/iftex/ifxetex.sty":{"size":488,"sha":"b4729967ca572a3f"},"tex/generic/infwarerr/infwarerr.sty":{"size":8356,"sha":"8c3e23b8bb7d940f"},"tex/generic/intcalc/intcalc.sty":{"size":31769,"sha":"1343ba1b10b245bf"},"tex/generic/kvdefinekeys/kvdefinekeys.sty":{"size":5412,"sha":"c42f0c2628dc5fbd"},"tex/generic/ltxcmds/ltxcmds.sty":{"size":17865,"sha":"8fea89995d37ba4c"},"tex/generic/luatex85/luatex85.sty":{"size":5870,"sha":"6d2a0ec7974247ec"},"tex/generic/mp-tikz-wasm/tikzlibrarysvg.attributes.code.tex":{"size":6164,"sha":"a4e73b1206f18bee"},"tex/generic/pdfescape/pdfescape.sty":{"size":19007,"sha":"b3f0e56366c11b85"},"tex/generic/pdftex/glyphtounicode.tex":{"size":216747,"sha":"395e568c1f4db5e8"},"tex/generic/pdftex/pdfcolor.tex":{"size":5687,"sha":"84b30448637fd29e"},"tex/generic/pdftexcmds/pdftexcmds.lua":{"size":9447,"sha":"872a8889c423ec55"},"tex/generic/pdftexcmds/pdftexcmds.sty":{"size":20089,"sha":"2df7e0bd148c99d8"},"tex/generic/simplekv/simplekv.sty":{"size":161,"sha":"3fc1096a8c34760b"},"tex/generic/simplekv/simplekv.tex":{"size":12655,"sha":"d4d089826306a58a"},"tex/generic/stringenc/se-ascii-print.def":{"size":3257,"sha":"77c07ed6267049f3"},"tex/generic/stringenc/se-ascii.def":{"size":2870,"sha":"0c8d40cb65411fee"},"tex/generic/stringenc/se-clean7bit.def":{"size":3765,"sha":"aa70dd7e8990b2cb"},"tex/generic/stringenc/se-cp1250.def":{"size":10277,"sha":"d2068e5fa58864c9"},"tex/generic/stringenc/se-cp1251.def":{"size":10128,"sha":"63704757c1c8d231"},"tex/generic/stringenc/se-cp1252.def":{"size":4858,"sha":"e21b611d03bf8e1f"},"tex/generic/stringenc/se-cp1257.def":{"size":9657,"sha":"4ec2651c335029d2"},"tex/generic/stringenc/se-cp437.def":{"size":10585,"sha":"05e91523dc818207"},"tex/generic/stringenc/se-cp850.def":{"size":10434,"sha":"b15d916580e45d29"},"tex/generic/stringenc/se-cp852.def":{"size":10733,"sha":"3dcbfa0c3487f170"},"tex/generic/stringenc/se-cp855.def":{"size":10349,"sha":"3b185da948e95ed6"},"tex/generic/stringenc/se-cp858.def":{"size":10415,"sha":"1e40d8d74672e14a"},"tex/generic/stringenc/se-cp865.def":{"size":10605,"sha":"24af379d5e7ad707"},"tex/generic/stringenc/se-cp866.def":{"size":10531,"sha":"a45de2d50e0d2733"},"tex/generic/stringenc/se-dec-mcs.def":{"size":7864,"sha":"91dc69b841166064"},"tex/generic/stringenc/se-iso-8859-1.def":{"size":3357,"sha":"74c79c0b12b0d39b"},"tex/generic/stringenc/se-iso-8859-10.def":{"size":9508,"sha":"9bfcbfdd02bf6695"},"tex/generic/stringenc/se-iso-8859-11.def":{"size":8046,"sha":"5158a22308bb0043"},"tex/generic/stringenc/se-iso-8859-13.def":{"size":9190,"sha":"787d127c7ad98a00"},"tex/generic/stringenc/se-iso-8859-14.def":{"size":9571,"sha":"7e25fdaaa78e3120"},"tex/generic/stringenc/se-iso-8859-15.def":{"size":9131,"sha":"266c8fb3f31653cb"},"tex/generic/stringenc/se-iso-8859-16.def":{"size":9476,"sha":"29a72ed727e910c2"},"tex/generic/stringenc/se-iso-8859-2.def":{"size":9224,"sha":"2a7c60979e263e0b"},"tex/generic/stringenc/se-iso-8859-3.def":{"size":8734,"sha":"9a6bdf7bce6b185c"},"tex/generic/stringenc/se-iso-8859-4.def":{"size":9196,"sha":"b0737bf21ae2dc40"},"tex/generic/stringenc/se-iso-8859-5.def":{"size":8835,"sha":"ff7ccc62228088ee"},"tex/generic/stringenc/se-iso-8859-6.def":{"size":5528,"sha":"f9fba42471db4619"},"tex/generic/stringenc/se-iso-8859-7.def":{"size":8589,"sha":"4efcfb39cd3fb844"},"tex/generic/stringenc/se-iso-8859-8.def":{"size":5956,"sha":"455433c65e5975f7"},"tex/generic/stringenc/se-iso-8859-9.def":{"size":8976,"sha":"4c3080873d39ce9c"},"tex/generic/stringenc/se-koi8-r.def":{"size":10600,"sha":"62b74a3118529b10"},"tex/generic/stringenc/se-mac-centeuro.def":{"size":11598,"sha":"9e648981230327d5"},"tex/generic/stringenc/se-mac-cyrillic.def":{"size":10942,"sha":"f77f04a3250c56a6"},"tex/generic/stringenc/se-mac-roman.def":{"size":10575,"sha":"a00115bfe651fc0a"},"tex/generic/stringenc/se-nextstep.def":{"size":10464,"sha":"799ca9c1eef76dd1"},"tex/generic/stringenc/se-pdfdoc.def":{"size":5108,"sha":"f168cc1772edb0e2"},"tex/generic/stringenc/se-utf16le.def":{"size":2764,"sha":"20213ef0fd25b6f9"},"tex/generic/stringenc/se-utf32be.def":{"size":4522,"sha":"aed4597f5fce2d1d"},"tex/generic/stringenc/se-utf32le.def":{"size":4718,"sha":"a00be3fae9ee794c"},"tex/generic/stringenc/se-utf8.def":{"size":11635,"sha":"aeecc3b65c8002f2"},"tex/generic/stringenc/stringenc.sty":{"size":21514,"sha":"b134a7bba648a698"},"tex/generic/tex-ini-files/dviluatex.ini":{"size":82,"sha":"cc7cb46692f7a54b"},"tex/generic/tex-ini-files/luatex.ini":{"size":289,"sha":"bc47cd163289fecb"},"tex/generic/tex-ini-files/luatexconfig.tex":{"size":2036,"sha":"e455906a91a8a040"},"tex/generic/tex-ini-files/luatexiniconfig.tex":{"size":606,"sha":"b3e97563b977e36e"},"tex/generic/tex-ini-files/pdftexconfig.tex":{"size":549,"sha":"87102cd6fa7307af"},"tex/generic/tex-ini-files/pdfxmltex.ini":{"size":243,"sha":"0286c93d313d8034"},"tex/generic/tex-ini-files/xetex.ini":{"size":3428,"sha":"6aa9a56c7947f655"},"tex/generic/tex-ini-files/xmltex.ini":{"size":160,"sha":"e7bb21eb0a3457d9"},"tex/generic/uniquecounter/uniquecounter.sty":{"size":7008,"sha":"9d11c81501953d68"},"tex/generic/xkeyval/keyval.tex":{"size":2725,"sha":"7a8dbfe90926a910"},"tex/generic/xkeyval/pst-xkey.tex":{"size":2369,"sha":"4549723f49707c14"},"tex/generic/xkeyval/xkeyval.tex":{"size":19231,"sha":"29c2b60c6973c374"},"tex/generic/xkeyval/xkvtxhdr.tex":{"size":2856,"sha":"cc6150c71e73d1dd"},"tex/generic/xkeyval/xkvutils.tex":{"size":7677,"sha":"5e82c31b1b4492c8"},"tex/plain/base/fontchart.tex":{"size":3201,"sha":"c92c60b5aa85a634"},"tex/plain/base/gkpmac.tex":{"size":36500,"sha":"52787766e84cf3df"},"tex/plain/base/letterformat.tex":{"size":2892,"sha":"def29743d02d0f43"},"tex/plain/base/list-latin.tex":{"size":2292,"sha":"fa7f1928a6846739"},"tex/plain/base/list.tex":{"size":1581,"sha":"6ce822dc31d6934d"},"tex/plain/base/llist-latin.tex":{"size":2894,"sha":"a73985923307aaa0"},"tex/plain/base/llist.tex":{"size":2177,"sha":"b9184319aa034b63"},"tex/plain/base/mptmac.tex":{"size":3267,"sha":"a15782301c853be7"},"tex/plain/base/picmac.tex":{"size":8240,"sha":"111703092e524997"},"tex/plain/base/plain.tex":{"size":44615,"sha":"7c1223b880fa5135"},"tex/plain/base/wlist.tex":{"size":1698,"sha":"dd0f2a0d9743af6e"},"tex/plain/config/etex.ini":{"size":69,"sha":"a6e65150abae7552"},"tex/plain/config/tex.ini":{"size":66,"sha":"c1ccea43dc1c3d07"},"tex/plain/etex/etex.src":{"size":31690,"sha":"00b9b0017fc2347a"},"tex/plain/etex/etexdefs.lib":{"size":3591,"sha":"0c6a325ce1810cff"},"web2c/etex.fmt":{"size":127343,"sha":"b276d57b2fbf5575"},"web2c/plain.fmt":{"size":113546,"sha":"8bdb51b8e06b0f42"}},"eager":[],"storage":"brotli-chunks-v1","filesystemKey":"3648a9d774d14fb99f24cd8a6e1ffe24f309789c6a73de067e3bd3f5d8f97916"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"web2c/tikz.fmt":[0,5819794]}
|
|
1
|
+
{"web2c/tikz.fmt":["chunks/0.br",0,5819794]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"tikz-snapshot","version":"2025.1","texlive":"2025","files":{"web2c/tikz.fmt":{"size":5819794,"sha":"68f750bb1d12ec43"}},"eager":[]}
|
|
1
|
+
{"name":"tikz-snapshot","version":"2025.1","texlive":"2025","files":{"web2c/tikz.fmt":{"size":5819794,"sha":"68f750bb1d12ec43"}},"eager":[],"storage":"brotli-chunks-v1","filesystemKey":"2bd36fa3b9d5e22c06f4ce4d19ed7e3274023f132268ebfdef9c398b55382969"}
|
package/runtime/dist/core.d.ts
CHANGED
|
@@ -45,6 +45,7 @@ export declare class MetaPostCore {
|
|
|
45
45
|
build: string;
|
|
46
46
|
};
|
|
47
47
|
private userFiles;
|
|
48
|
+
private mplibReady?;
|
|
48
49
|
/**
|
|
49
50
|
* luaotfload's font cache (TEXMF_VAR), carried from one LuaTeX run to the
|
|
50
51
|
* next. Parsing an OpenType face costs about a second, and every TeX run
|
|
@@ -53,7 +54,8 @@ export declare class MetaPostCore {
|
|
|
53
54
|
private texmfVar;
|
|
54
55
|
private get logger();
|
|
55
56
|
constructor(env: CoreEnv);
|
|
56
|
-
init(): Promise<void>;
|
|
57
|
+
init(eager?: boolean): Promise<void>;
|
|
58
|
+
private initMetaPost;
|
|
57
59
|
private progress;
|
|
58
60
|
/** The errors and warnings of a finished run, one record each; a MetaPost help paragraph is indented under its error. */
|
|
59
61
|
private report;
|
package/runtime/dist/core.js
CHANGED
|
@@ -69,7 +69,8 @@ export class MetaPostCore {
|
|
|
69
69
|
cache = new MemorySnippetCache();
|
|
70
70
|
bridge;
|
|
71
71
|
version = { metapost: '', tex: 'pdfTeX 1.40.27 (DVI)', build: '' };
|
|
72
|
-
userFiles = new
|
|
72
|
+
userFiles = new Map();
|
|
73
|
+
mplibReady;
|
|
73
74
|
/**
|
|
74
75
|
* luaotfload's font cache (TEXMF_VAR), carried from one LuaTeX run to the
|
|
75
76
|
* next. Parsing an OpenType face costs about a second, and every TeX run
|
|
@@ -80,7 +81,13 @@ export class MetaPostCore {
|
|
|
80
81
|
constructor(env) {
|
|
81
82
|
this.env = env;
|
|
82
83
|
}
|
|
83
|
-
async init() {
|
|
84
|
+
async init(eager = !this.env.options.lazy) {
|
|
85
|
+
if (!eager)
|
|
86
|
+
return;
|
|
87
|
+
this.mplibReady ??= this.initMetaPost();
|
|
88
|
+
await this.mplibReady;
|
|
89
|
+
}
|
|
90
|
+
async initMetaPost() {
|
|
84
91
|
const o = this.env.options;
|
|
85
92
|
this.progress({ phase: 'loading', detail: 'mplib.wasm' });
|
|
86
93
|
// mplib's own stdout/stderr (dvitomp, the runtime) and, through the termLine hook, MetaPost's terminal
|
|
@@ -96,6 +103,8 @@ export class MetaPostCore {
|
|
|
96
103
|
mkdirp(FS, '/work');
|
|
97
104
|
this.installTexmf(FS, this.M.NODEFS);
|
|
98
105
|
FS.chdir('/work');
|
|
106
|
+
for (const [path, bytes] of this.userFiles)
|
|
107
|
+
writeFileDeep(FS, path, bytes);
|
|
99
108
|
mpxAddPath(this.M, `${TEXMF_ROOT}/fonts/tfm`);
|
|
100
109
|
mpxAddPath(this.M, `${TEXMF_ROOT}/fonts/vf`);
|
|
101
110
|
this.M.mpwasmHooks = {
|
|
@@ -193,9 +202,9 @@ export class MetaPostCore {
|
|
|
193
202
|
}
|
|
194
203
|
copyUserFiles(T) {
|
|
195
204
|
// TeX may \input files the user supplied next to the job
|
|
196
|
-
for (const p of this.userFiles) {
|
|
205
|
+
for (const [p, bytes] of this.userFiles) {
|
|
197
206
|
try {
|
|
198
|
-
writeFileDeep(T.FS, p, this.M.FS.readFile(p, { encoding: 'binary' }));
|
|
207
|
+
writeFileDeep(T.FS, p, this.M ? this.M.FS.readFile(p, { encoding: 'binary' }) : bytes);
|
|
199
208
|
}
|
|
200
209
|
catch { /* ignore */ }
|
|
201
210
|
}
|
|
@@ -288,8 +297,9 @@ export class MetaPostCore {
|
|
|
288
297
|
addFiles(files) {
|
|
289
298
|
for (const [name, data] of Object.entries(files)) {
|
|
290
299
|
const p = name.startsWith('/') ? name : `/work/${name}`;
|
|
291
|
-
|
|
292
|
-
|
|
300
|
+
if (this.M)
|
|
301
|
+
writeFileDeep(this.M.FS, p, data);
|
|
302
|
+
this.userFiles.set(p, typeof data === 'string' ? data : data.slice());
|
|
293
303
|
}
|
|
294
304
|
}
|
|
295
305
|
/**
|
|
@@ -298,7 +308,7 @@ export class MetaPostCore {
|
|
|
298
308
|
* typesetting one document after another would hand the first one's .aux to the next.
|
|
299
309
|
*/
|
|
300
310
|
removeFiles(names) {
|
|
301
|
-
const paths = names ? names.map((n) => (n.startsWith('/') ? n : `/work/${n}`)) : [...this.userFiles];
|
|
311
|
+
const paths = names ? names.map((n) => (n.startsWith('/') ? n : `/work/${n}`)) : [...this.userFiles.keys()];
|
|
302
312
|
for (const p of paths) {
|
|
303
313
|
if (!this.userFiles.delete(p))
|
|
304
314
|
continue;
|
|
@@ -310,6 +320,7 @@ export class MetaPostCore {
|
|
|
310
320
|
}
|
|
311
321
|
clearCache() { this.cache.clear(); }
|
|
312
322
|
async run(source, ro = {}) {
|
|
323
|
+
await this.init(true);
|
|
313
324
|
const o = this.env.options;
|
|
314
325
|
const t0 = now();
|
|
315
326
|
this.stats = { totalMs: 0, metapostMs: 0, texMs: 0, texRuns: 0, metapostRuns: 0, snippetCacheHits: 0, snippetCacheMisses: 0 };
|
package/runtime/dist/index.js
CHANGED
|
@@ -34,16 +34,23 @@ class InProcessBackend {
|
|
|
34
34
|
this.bundles.logger = this.logger;
|
|
35
35
|
const base = o.bundleBaseUrl ?? new URL('./bundles/', here).href;
|
|
36
36
|
await this.bundles.addAll(resolveBundleSpecs(o.bundles ?? DEFAULT_BUNDLES, base));
|
|
37
|
-
await this.bundles.
|
|
38
|
-
|
|
37
|
+
await this.bundles.loadFilesystemIndex((base.endsWith('/') ? base : base + '/') + 'filesystem.json');
|
|
38
|
+
if (!o.lazy || !this.bundles.canFetchSync)
|
|
39
|
+
await this.bundles.prefetchEager();
|
|
40
|
+
if (!o.lazy)
|
|
41
|
+
await this.bundles.loadHot((base.endsWith('/') ? base : base + '/') + 'hot.json');
|
|
39
42
|
if (!this.bundles.canFetchSync)
|
|
40
43
|
await this.bundles.prefetchAll();
|
|
41
44
|
}
|
|
42
|
-
const
|
|
45
|
+
const lazyFactory = (name) => async (opts) => {
|
|
46
|
+
const module = await import(/* @vite-ignore */ new URL(`./${name}.mjs`, here).href);
|
|
47
|
+
return module.default(opts);
|
|
48
|
+
};
|
|
49
|
+
const mplibFactory = o.modules?.mplib ?? (o.lazy ? lazyFactory('mplib') : (await import(/* @vite-ignore */ new URL('./mplib.mjs', here).href)).default);
|
|
43
50
|
let texFactory = o.modules?.tex;
|
|
44
51
|
if (!texFactory && (o.tex ?? 'auto') !== 'none') {
|
|
45
52
|
try {
|
|
46
|
-
texFactory = (await import(/* @vite-ignore */ new URL('./tex.mjs', here).href)).default;
|
|
53
|
+
texFactory = o.lazy ? lazyFactory('tex') : (await import(/* @vite-ignore */ new URL('./tex.mjs', here).href)).default;
|
|
47
54
|
}
|
|
48
55
|
catch {
|
|
49
56
|
texFactory = undefined;
|
|
@@ -52,7 +59,7 @@ class InProcessBackend {
|
|
|
52
59
|
let dvisvgmFactory = o.modules?.dvisvgm;
|
|
53
60
|
if (!dvisvgmFactory && texFactory) {
|
|
54
61
|
try {
|
|
55
|
-
dvisvgmFactory = (await import(/* @vite-ignore */ new URL('./dvisvgm.mjs', here).href)).default;
|
|
62
|
+
dvisvgmFactory = o.lazy ? lazyFactory('dvisvgm') : (await import(/* @vite-ignore */ new URL('./dvisvgm.mjs', here).href)).default;
|
|
56
63
|
}
|
|
57
64
|
catch {
|
|
58
65
|
dvisvgmFactory = undefined;
|
|
@@ -62,7 +69,7 @@ class InProcessBackend {
|
|
|
62
69
|
let luatexFactory = o.modules?.luatex;
|
|
63
70
|
if (!luatexFactory && texFactory) {
|
|
64
71
|
try {
|
|
65
|
-
luatexFactory = (await import(/* @vite-ignore */ new URL('./luatex.mjs', here).href)).default;
|
|
72
|
+
luatexFactory = o.lazy ? lazyFactory('luatex') : (await import(/* @vite-ignore */ new URL('./luatex.mjs', here).href)).default;
|
|
66
73
|
}
|
|
67
74
|
catch {
|
|
68
75
|
luatexFactory = undefined;
|
|
@@ -104,7 +111,15 @@ class InProcessBackend {
|
|
|
104
111
|
await this.bundles.add(spec);
|
|
105
112
|
await this.bundles.prefetchAll((f) => bundles.includes(f.bundle));
|
|
106
113
|
}
|
|
107
|
-
async prefetch(kinds) {
|
|
114
|
+
async prefetch(kinds) {
|
|
115
|
+
if (!this.bundles)
|
|
116
|
+
return 0;
|
|
117
|
+
if (!Object.keys(this.bundles.hot).length) {
|
|
118
|
+
const base = this.options.bundleBaseUrl ?? new URL('./bundles/', import.meta.url).href;
|
|
119
|
+
await this.bundles.loadHot((base.endsWith('/') ? base : base + '/') + 'hot.json');
|
|
120
|
+
}
|
|
121
|
+
return this.bundles.prefetchHot(kinds);
|
|
122
|
+
}
|
|
108
123
|
setLogLevel(level) { this.logger.level = level; }
|
|
109
124
|
dispose() { }
|
|
110
125
|
}
|
package/runtime/dist/node.js
CHANGED
|
@@ -5,44 +5,58 @@ export async function nodeIO() {
|
|
|
5
5
|
const { brotliDecompressSync } = await import('node:zlib');
|
|
6
6
|
const strip = (u) => u.startsWith('file://')
|
|
7
7
|
? fileURLToPath(new URL(u)) : u.replace(/\?v=[0-9a-f]+$/, '');
|
|
8
|
-
const
|
|
8
|
+
const layouts = new Map();
|
|
9
|
+
const explicit = new Set();
|
|
10
|
+
function packed(directory, key) {
|
|
11
|
+
let layout = layouts.get(directory);
|
|
12
|
+
if (!layout) {
|
|
13
|
+
layout = { index: JSON.parse(fs.readFileSync(join(directory, 'files.index.json'), 'utf8')), chunks: new Map() };
|
|
14
|
+
layouts.set(directory, layout);
|
|
15
|
+
}
|
|
16
|
+
const entry = Object.hasOwn(layout.index, key) ? layout.index[key] : undefined;
|
|
17
|
+
if (!entry)
|
|
18
|
+
throw Object.assign(new Error(`Missing bundle file: ${key}`), { code: 'ENOENT' });
|
|
19
|
+
const [chunk, offset, size] = entry.length === 2 ? ['files.br', ...entry] : entry;
|
|
20
|
+
if (!/^(files\.br|chunks\/[0-9]+\.br)$/.test(chunk))
|
|
21
|
+
throw new Error('Invalid bundle chunk');
|
|
22
|
+
let bytes = layout.chunks.get(chunk);
|
|
23
|
+
if (!bytes) {
|
|
24
|
+
bytes = brotliDecompressSync(fs.readFileSync(join(directory, chunk)));
|
|
25
|
+
layout.chunks.set(chunk, bytes);
|
|
26
|
+
}
|
|
27
|
+
if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(size) || offset < 0 || size < 0 || offset + size > bytes.length)
|
|
28
|
+
throw new Error(`Invalid bundle offset: ${key}`);
|
|
29
|
+
return bytes.subarray(offset, offset + size);
|
|
30
|
+
}
|
|
9
31
|
const read = (url) => {
|
|
10
32
|
const path = strip(url);
|
|
33
|
+
const marker = `${sep}files${sep}`;
|
|
34
|
+
const position = path.lastIndexOf(marker);
|
|
35
|
+
const directory = path.slice(0, position);
|
|
36
|
+
const key = path.slice(position + marker.length).split(sep).join('/');
|
|
37
|
+
// New manifests explicitly select packed storage: no speculative filesystem
|
|
38
|
+
// calls or ENOENT exceptions for each file. Legacy/raw layouts retain overrides.
|
|
39
|
+
if (position >= 0 && explicit.has(directory))
|
|
40
|
+
return packed(directory, key);
|
|
11
41
|
try {
|
|
12
42
|
return fs.readFileSync(path);
|
|
13
43
|
}
|
|
14
44
|
catch (error) {
|
|
15
|
-
if (error.code !== 'ENOENT')
|
|
16
|
-
throw error;
|
|
17
|
-
// Bundle archives preserve cross-file compression (especially fonts).
|
|
18
|
-
// Cache only bundles touched by this engine instance; raw files override.
|
|
19
|
-
const marker = `${sep}files${sep}`;
|
|
20
|
-
const position = path.lastIndexOf(marker);
|
|
21
|
-
if (position < 0)
|
|
22
|
-
throw error;
|
|
23
|
-
const directory = path.slice(0, position);
|
|
24
|
-
let bundle = bundles.get(directory);
|
|
25
|
-
if (!bundle) {
|
|
26
|
-
bundle = {
|
|
27
|
-
bytes: brotliDecompressSync(fs.readFileSync(join(directory, 'files.br'))),
|
|
28
|
-
index: JSON.parse(fs.readFileSync(join(directory, 'files.index.json'), 'utf8')),
|
|
29
|
-
};
|
|
30
|
-
bundles.set(directory, bundle);
|
|
31
|
-
}
|
|
32
|
-
const key = path.slice(position + marker.length).split(sep).join('/');
|
|
33
|
-
const entry = Object.hasOwn(bundle.index, key) ? bundle.index[key] : undefined;
|
|
34
|
-
if (!entry)
|
|
45
|
+
if (error.code !== 'ENOENT' || position < 0)
|
|
35
46
|
throw error;
|
|
36
|
-
|
|
37
|
-
if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(size) || offset < 0 || size < 0 || offset + size > bundle.bytes.length)
|
|
38
|
-
throw new Error(`Invalid bundle offset: ${key}`);
|
|
39
|
-
return bundle.bytes.subarray(offset, offset + size);
|
|
47
|
+
return packed(directory, key);
|
|
40
48
|
}
|
|
41
49
|
};
|
|
42
50
|
return {
|
|
43
51
|
async fetch(url) { return read(url); },
|
|
44
52
|
fetchSync: read,
|
|
45
|
-
async fetchJson(url) {
|
|
53
|
+
async fetchJson(url) {
|
|
54
|
+
const path = strip(url);
|
|
55
|
+
const json = JSON.parse(fs.readFileSync(path, 'utf8'));
|
|
56
|
+
if (path.endsWith(`${sep}manifest.json`) && json.storage === 'brotli-chunks-v1')
|
|
57
|
+
explicit.add(path.slice(0, -'/manifest.json'.length));
|
|
58
|
+
return json;
|
|
59
|
+
},
|
|
46
60
|
};
|
|
47
61
|
}
|
|
48
62
|
export const isNode = typeof process !== 'undefined' && !!process.versions?.node && typeof globalThis.window === 'undefined';
|
package/runtime/dist/types.d.ts
CHANGED
|
@@ -98,6 +98,9 @@ export interface MetaPostOptions {
|
|
|
98
98
|
};
|
|
99
99
|
/** Run in-process instead of in a Web Worker (default: worker in browsers, in-process in Node). */
|
|
100
100
|
worker?: boolean;
|
|
101
|
+
/** Defer engine glue and MetaPost WASM until used. MetaPost version fields in creation
|
|
102
|
+
* metadata remain empty in this mode. No cross-request cache is required. */
|
|
103
|
+
lazy?: boolean;
|
|
101
104
|
/** Default for latex()'s snapshot option. Node: 'auto' (tikz.fmt from local files is free). Browser: 'none',
|
|
102
105
|
* because the 5.8 MB format does not compress and costs more to download than the files it replaces
|
|
103
106
|
* (2.5 MB gzipped); set 'auto' when many TikZ figures amortise it or the format is already cached. */
|
|
@@ -360,6 +363,8 @@ export interface ToolResult {
|
|
|
360
363
|
}
|
|
361
364
|
/** The bundle manifest format (docs/06 §3). Paths are relative to the texmf root. */
|
|
362
365
|
export interface BundleManifest {
|
|
366
|
+
storage?: "brotli-chunks-v1";
|
|
367
|
+
filesystemKey?: string;
|
|
363
368
|
name: string;
|
|
364
369
|
version: string;
|
|
365
370
|
texlive?: string;
|
|
@@ -51,6 +51,13 @@ export declare class BundleSet {
|
|
|
51
51
|
private addLoaded;
|
|
52
52
|
/** Add several bundles: the manifests are fetched in parallel, then merged in the given order (first bundle wins). */
|
|
53
53
|
addAll(specs: BundleSpec[]): Promise<void>;
|
|
54
|
+
/** Build-time immutable indexes; dynamic/custom bundle sets use the normal builder. */
|
|
55
|
+
exportFilesystemIndex(): {
|
|
56
|
+
keys: (string | undefined)[];
|
|
57
|
+
dirs: (string | string[])[][];
|
|
58
|
+
lsR: string;
|
|
59
|
+
};
|
|
60
|
+
loadFilesystemIndex(url: string): Promise<void>;
|
|
54
61
|
/** Load the hot lists; optional, so a missing file is not an error. */
|
|
55
62
|
loadHot(url: string): Promise<void>;
|
|
56
63
|
/** Fetch, in parallel, every file the hot lists name for these kinds that is not in memory yet. Returns how many. */
|
|
@@ -37,6 +37,8 @@ export class BundleSet {
|
|
|
37
37
|
this.addLoaded(spec, base, manifest);
|
|
38
38
|
}
|
|
39
39
|
addLoaded(spec, base, manifest) {
|
|
40
|
+
this.indexCache = undefined;
|
|
41
|
+
this.lsRText = undefined;
|
|
40
42
|
this.manifests.push({ spec, manifest, base });
|
|
41
43
|
const blobBase = spec.blobBaseUrl ?? joinUrl(base, 'files');
|
|
42
44
|
for (const [path, info] of Object.entries(manifest.files)) {
|
|
@@ -66,6 +68,24 @@ export class BundleSet {
|
|
|
66
68
|
for (const m of manifests)
|
|
67
69
|
this.addLoaded(m.spec, m.base, m.manifest);
|
|
68
70
|
}
|
|
71
|
+
/** Build-time immutable indexes; dynamic/custom bundle sets use the normal builder. */
|
|
72
|
+
exportFilesystemIndex() {
|
|
73
|
+
return { keys: this.manifests.map(m => m.manifest.filesystemKey),
|
|
74
|
+
dirs: [...this.index().dirs].map(([path, children]) => [path, [...children]]), lsR: this.lsR() };
|
|
75
|
+
}
|
|
76
|
+
async loadFilesystemIndex(url) {
|
|
77
|
+
if (!this.manifests.every(m => m.manifest.filesystemKey))
|
|
78
|
+
return;
|
|
79
|
+
try {
|
|
80
|
+
const data = await this.io.fetchJson(url);
|
|
81
|
+
const keys = this.manifests.map(m => m.manifest.filesystemKey);
|
|
82
|
+
if (JSON.stringify(data.keys) !== JSON.stringify(keys) || !Array.isArray(data.dirs) || typeof data.lsR !== 'string')
|
|
83
|
+
return;
|
|
84
|
+
this.indexCache = { dirs: new Map(data.dirs.map(([path, children]) => [path, new Set(children)])) };
|
|
85
|
+
this.lsRText = data.lsR;
|
|
86
|
+
}
|
|
87
|
+
catch { /* Optional prebuilt index; reconstruct for custom/missing assets. */ }
|
|
88
|
+
}
|
|
69
89
|
/** Load the hot lists; optional, so a missing file is not an error. */
|
|
70
90
|
async loadHot(url) {
|
|
71
91
|
try {
|
package/runtime/upstream.json
CHANGED
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
"archive": "https://github.com/jmckalex/mp-tikz-wasm/releases/download/v0.5.0/mp-tikz-wasm-0.5.0.tar.gz",
|
|
24
24
|
"sha256": "76b5591a83adfb96e8087b8560fd993c6ebba475ad15a63269a8aa47517dd575"
|
|
25
25
|
},
|
|
26
|
-
"distribution": "brotli-
|
|
26
|
+
"distribution": "brotli-chunks-v1"
|
|
27
27
|
}
|
package/src/browser-worker.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MetaPost } from '../runtime/dist/index.js';
|
|
2
2
|
|
|
3
3
|
try {
|
|
4
|
-
const engine = await MetaPost.create({ worker: false, logLevel: 'silent' });
|
|
4
|
+
const engine = await MetaPost.create({ worker: false, lazy: true, logLevel: 'silent' });
|
|
5
5
|
self.onmessage = async ({ data: { source: code, maxOutputBytes } }) => {
|
|
6
6
|
try {
|
|
7
7
|
const source = /^\s*\\documentclass\b/m.test(code) ? code : String.raw`\documentclass[tikz,border=6pt]{standalone}
|
|
@@ -9,7 +9,7 @@ try {
|
|
|
9
9
|
\begin{document}
|
|
10
10
|
${code}
|
|
11
11
|
\end{document}`;
|
|
12
|
-
const result = await engine.latex(source, { fonts: 'paths' });
|
|
12
|
+
const result = await engine.latex(source, { engine: 'auto', fonts: 'paths' });
|
|
13
13
|
if (result.status === 'error' || result.status === 'fatal' || result.pages?.length !== 1)
|
|
14
14
|
throw new Error('TikZ requires one valid page. ' + JSON.stringify(result.diagnostics).slice(0, 2000));
|
|
15
15
|
const svg = result.pages[0], bytes = new TextEncoder().encode(svg);
|
package/src/deploy.js
CHANGED
|
@@ -36,13 +36,24 @@ export async function copyTikzBrowserAssets(directory) {
|
|
|
36
36
|
for (const name of pin.bundles) {
|
|
37
37
|
const base = join(destination, 'runtime/dist/bundles', name);
|
|
38
38
|
const index = JSON.parse(await readFile(join(base, 'files.index.json'), 'utf8'));
|
|
39
|
-
const
|
|
40
|
-
for (const [path,
|
|
39
|
+
const chunks = new Map();
|
|
40
|
+
for (const [path, entry] of Object.entries(index)) {
|
|
41
|
+
const [chunk, offset, size] = entry.length === 2 ? ['files.br', ...entry] : entry;
|
|
42
|
+
if (!chunks.has(chunk)) chunks.set(chunk, brotliDecompressSync(await readFile(join(base, chunk))));
|
|
43
|
+
const bytes = chunks.get(chunk);
|
|
41
44
|
const file = join(base, 'files', path);
|
|
42
45
|
await mkdir(dirname(file), { recursive: true });
|
|
43
46
|
await writeFile(file, bytes.subarray(offset, offset + size));
|
|
44
47
|
}
|
|
45
|
-
await
|
|
48
|
+
const manifest = JSON.parse(await readFile(join(base, 'manifest.json'), 'utf8'));
|
|
49
|
+
delete manifest.storage;
|
|
50
|
+
// Browser assets use individual files; avoid an extra index round trip.
|
|
51
|
+
delete manifest.filesystemKey;
|
|
52
|
+
await writeFile(join(base, 'manifest.json'), JSON.stringify(manifest));
|
|
53
|
+
await rm(join(base, 'files.br'), { force: true });
|
|
54
|
+
await rm(join(base, 'chunks'), { recursive: true, force: true });
|
|
55
|
+
await rm(join(base, 'files.index.json'));
|
|
46
56
|
}
|
|
57
|
+
await rm(join(destination, 'runtime/dist/bundles/filesystem.json'), { force: true });
|
|
47
58
|
return { directory: destination, version: JSON.parse(await readFile(join(source, 'package.json'), 'utf8')).version };
|
|
48
59
|
}
|
package/src/index.js
CHANGED
|
@@ -74,11 +74,12 @@ export function createTikzRenderer(options = {}) {
|
|
|
74
74
|
if (failure) { reject(failure); return; }
|
|
75
75
|
if (code !== 0 || terminationSignal) { reject(new Error(stderr || 'TikZ compilation failed')); return; }
|
|
76
76
|
try {
|
|
77
|
-
const
|
|
77
|
+
const bytes = Buffer.concat(chunks);
|
|
78
|
+
const svg = bytes.toString('utf8');
|
|
78
79
|
const dimensions = typeof svg === 'string' && svg.match(/viewBox=['"]([^'"]+)['"]/)?.[1].trim().split(/[ ,]+/).map(Number);
|
|
79
80
|
if (!dimensions || dimensions.length !== 4 || !dimensions.every(Number.isFinite) || dimensions[2] <= 0 || dimensions[3] <= 0)
|
|
80
81
|
throw new Error('TikZ returned an invalid picture size');
|
|
81
|
-
resolve({ svg, width: dimensions[2], height: dimensions[3], dataUrl: `data:image/svg+xml;base64,${
|
|
82
|
+
resolve({ svg, width: dimensions[2], height: dimensions[3], dataUrl: `data:image/svg+xml;base64,${bytes.toString('base64')}` });
|
|
82
83
|
} catch (error) { reject(error); }
|
|
83
84
|
});
|
|
84
85
|
child.stdin.end(JSON.stringify({ source }));
|
package/src/worker.js
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
import { readFileSync } from 'node:fs';
|
|
4
4
|
import { MetaPost } from '../runtime/dist/index.js';
|
|
5
5
|
const { source } = JSON.parse(readFileSync(0, 'utf8'));
|
|
6
|
-
const engine = await MetaPost.create({ worker: false, logLevel: 'silent' });
|
|
6
|
+
const engine = await MetaPost.create({ worker: false, lazy: true, logLevel: 'silent' });
|
|
7
7
|
try {
|
|
8
|
-
const result = await engine.latex(source, { fonts: 'paths' });
|
|
8
|
+
const result = await engine.latex(source, { engine: 'auto', fonts: 'paths' });
|
|
9
9
|
if (result.status === 'error' || result.status === 'fatal' || result.pages?.length !== 1)
|
|
10
10
|
throw new Error('TikZ requires one valid page. ' + JSON.stringify(result.diagnostics).slice(0, 2000));
|
|
11
|
-
process.stdout.write(
|
|
11
|
+
process.stdout.write(result.pages[0]);
|
|
12
12
|
} catch (error) {
|
|
13
13
|
process.stderr.write(String(error).slice(0, 3000));
|
|
14
14
|
process.exitCode = 1;
|
package/upstream.json
CHANGED
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
"archive": "https://github.com/jmckalex/mp-tikz-wasm/releases/download/v0.5.0/mp-tikz-wasm-0.5.0.tar.gz",
|
|
24
24
|
"sha256": "76b5591a83adfb96e8087b8560fd993c6ebba475ad15a63269a8aa47517dd575"
|
|
25
25
|
},
|
|
26
|
-
"distribution": "brotli-
|
|
26
|
+
"distribution": "brotli-chunks-v1"
|
|
27
27
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|