@poe-platform/safe-bash 0.1.812 → 0.1.814
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/dist/audio-ast/id3-source.d.ts +27 -0
- package/dist/audio-ast/index.d.ts +4 -0
- package/dist/audio-ast/index.js +996 -596
- package/dist/audio-ast/mp3-source.d.ts +18 -0
- package/dist/audio-ast/ogg-source.d.ts +25 -0
- package/dist/audio-ast/ogg-stream-source.d.ts +22 -0
- package/dist/image-ast/index.js +139 -9
- package/dist/mp4-ast/containers/adapters.d.ts +7 -0
- package/dist/mp4-ast/index.d.ts +2 -0
- package/dist/mp4-ast/mp4-sample-source.d.ts +52 -0
- package/dist/mp4-ast/mp4-source.d.ts +32 -0
- package/dist/office-xml/retained-xml-document.d.ts +14 -0
- package/dist/pdf-ast/ast.d.ts +2 -0
- package/dist/pdf-ast/content/dictionary-cursor.d.ts +15 -0
- package/dist/pdf-ast/content/evaluator.d.ts +4 -0
- package/dist/pdf-ast/content/range-operator-parser.d.ts +4 -0
- package/dist/pdf-ast/content/stored-dictionary.d.ts +10 -0
- package/dist/pdf-ast/cos/lexer.d.ts +8 -5
- package/dist/pdf-ast/cos/object-reader.d.ts +11 -3
- package/dist/pdf-ast/cos/range-parser.d.ts +4 -0
- package/dist/pdf-ast/cos/retained-objects.d.ts +1 -0
- package/dist/pdf-ast/cos/retained-writer.d.ts +1 -0
- package/dist/pdf-ast/cos/value-parser.d.ts +10 -0
- package/dist/pdf-ast/edit/retained-append-attachments.d.ts +13 -0
- package/dist/pdf-ast/edit/retained-bookmarks.d.ts +13 -0
- package/dist/pdf-ast/edit/retained-form-appearances.d.ts +10 -0
- package/dist/pdf-ast/edit/retained-graph.d.ts +12 -0
- package/dist/pdf-ast/edit/retained-info-updates.d.ts +33 -0
- package/dist/pdf-ast/edit/retained-save.d.ts +2 -0
- package/dist/pdf-ast/edit/retained-stamps.d.ts +9 -0
- package/dist/pdf-ast/fonts/resolve.d.ts +3 -1
- package/dist/pdf-ast/index.d.ts +3 -1
- package/dist/pdf-ast/index.js +1966 -844
- package/dist/pdf-ast/retained-document.d.ts +5 -0
- package/dist/safe-bash/audio-ast.browser.js +6 -1
- package/dist/safe-bash/chunks/{chunk-HHSOUC3Z.js → chunk-HPQE675Q.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-BUYRKFW2.js → chunk-I6ECNJMR.js} +1 -1
- package/dist/safe-bash/chunks/{pdftk-WRYEP3CA.js → pdftk-Y2TX74LY.js} +2 -1
- package/dist/safe-bash/command-chunks/biff-KRHJ63K3-VQPJCVIL.js +5309 -0
- package/dist/safe-bash/command-chunks/{chunk-34G2SQX2.js → chunk-2BLTUQNK.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-LLU2IQEJ.js → chunk-2BNGPR6Z.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-HWQ2UHMT.js → chunk-2ETEJOYX.js} +18 -18
- package/dist/safe-bash/command-chunks/{chunk-NQDIT667.js → chunk-2PKBXGXD.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-MMBZTYXO.js → chunk-2PQRZDNR.js} +221 -0
- package/dist/safe-bash/command-chunks/{chunk-6QBMND4A.js → chunk-2VVJRVYM.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-G5QVZQCO.js → chunk-3EASXF5D.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-U3SBHEKH.js → chunk-3EB2FSAN.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-VB2TUPO2.js → chunk-3EW7GYHM.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-RNSKXOG3.js → chunk-3GRMU7TM.js} +6 -6
- package/dist/safe-bash/command-chunks/chunk-3JM7E42I.js +197 -0
- package/dist/safe-bash/command-chunks/{chunk-6L4IYQAT.js → chunk-3MG5EAMX.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-RASQPOSV.js → chunk-3SPLP2DB.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-K5COUQAQ.js → chunk-3VGQTLO6.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-K7CV55K5.js → chunk-3YEQI5B7.js} +10 -10
- package/dist/safe-bash/command-chunks/{chunk-ZXR6LXV5.js → chunk-3ZRCL756.js} +48 -4
- package/dist/safe-bash/command-chunks/{chunk-SOFM3GPG.js → chunk-42MEXZBJ.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-GQ2ZSPZ3.js → chunk-46AMTJPE.js} +10 -10
- package/dist/safe-bash/command-chunks/{chunk-MTWZEPAR.js → chunk-47IAU25U.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-6GI3NTCW.js → chunk-4B2ZUGLT.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-L5MCW6CM.js → chunk-4EHY6J2Z.js} +9 -155
- package/dist/safe-bash/command-chunks/{chunk-QQVACHZA.js → chunk-4EZJV4FZ.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-SSKMPDN4.js → chunk-4GQKCUS5.js} +15 -15
- package/dist/safe-bash/command-chunks/{chunk-UOBW5K3M.js → chunk-4RRYWHED.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-PINR7QET.js → chunk-4UPKVQWH.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-M7QE2MN7.js → chunk-4YLACJHE.js} +6 -6
- package/dist/safe-bash/command-chunks/chunk-5BIQWWLB.js +175 -0
- package/dist/safe-bash/command-chunks/{chunk-P3WU3PSL.js → chunk-5L4YGRQU.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-HKATEVAP.js → chunk-5LFGXN3D.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-SPLOIABU.js → chunk-5OM3UIK3.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-TVH4JORU.js → chunk-6LPSKLLD.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-CV7M2QJU.js → chunk-6QYSF7I2.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-XVP6V5K3.js → chunk-6VBDJC6V.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-6N5GHM72.js → chunk-6WNVGCXD.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-6CCQI6XZ.js → chunk-6XES7Z4G.js} +12 -12
- package/dist/safe-bash/command-chunks/{chunk-AFROLW6S.js → chunk-6XGDWFNQ.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-WTE23QXN.js → chunk-6ZGCKUAM.js} +3 -3
- package/dist/safe-bash/command-chunks/chunk-6ZHQB453.js +35 -0
- package/dist/safe-bash/command-chunks/{chunk-RIV6XN7K.js → chunk-7DOLY7IV.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-QD7ZRDUN.js → chunk-7KZ5LWV2.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-NGR5KOPQ.js → chunk-A347DLRB.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-ZM2Y4Z3C.js → chunk-A45UG4KT.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-56NYSX65.js → chunk-ADHFF2IM.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-ATI464W3.js → chunk-AG2SNMP5.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-FDCIPJBQ.js → chunk-AM5LANIE.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-3Q247UDJ.js → chunk-AVGXFWEB.js} +278 -135
- package/dist/safe-bash/command-chunks/{chunk-RBTC7OFT.js → chunk-AVOGFREX.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-QC5RMGSA.js → chunk-AWPI4DZR.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-FYMNHG7R.js → chunk-AXXZNB7U.js} +13 -13
- package/dist/safe-bash/command-chunks/{chunk-Q6S57NOQ.js → chunk-AY3KQ4EN.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-456PHA3L.js → chunk-BLGGAHQW.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-CU4DLVME.js → chunk-BLIFGBIO.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-NARD63DY.js → chunk-BS3ZEQGT.js} +22 -66
- package/dist/safe-bash/command-chunks/{chunk-WFVSUXJL.js → chunk-BS5JEUEW.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-UYWSIIUX.js → chunk-BZMNC7Q5.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-RHYJVTJO.js → chunk-CCMAHM3I.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-N4R2SHSS.js → chunk-CCZZVCHX.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-WGG6G2KG.js → chunk-CIRDVCAZ.js} +7 -7
- package/dist/safe-bash/command-chunks/chunk-CK2WFJZN.js +178 -0
- package/dist/safe-bash/command-chunks/{chunk-UZL7G57V.js → chunk-CKEMZUE3.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-B5LDP7AA.js → chunk-CQBACD2V.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-JYUJAF4L.js → chunk-CSE4VQKG.js} +16 -1
- package/dist/safe-bash/command-chunks/{chunk-Q73EMLLZ.js → chunk-CXME4YHU.js} +107 -5
- package/dist/safe-bash/command-chunks/{chunk-FTLDRH47.js → chunk-CZ5K2YPU.js} +16 -16
- package/dist/safe-bash/command-chunks/{chunk-554Z6IKP.js → chunk-DBLQUZGN.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-6M6TM5Z5.js → chunk-DBNJEXHK.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-SPW4GW4Z.js → chunk-DFI7QF3M.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-ZO5WBWLL.js → chunk-DN6MSXY7.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-GXLXWZWH.js → chunk-DZH54L3F.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-XRVKWGVQ.js → chunk-EBHOZIBS.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-3Y5EME26.js → chunk-ENEIE44W.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-ATTWQVR2.js → chunk-EQWFKNHJ.js} +17 -17
- package/dist/safe-bash/command-chunks/{chunk-YV72XQKL.js → chunk-ETXPMVR6.js} +13 -13
- package/dist/safe-bash/command-chunks/{chunk-JFYWVQ4V.js → chunk-EV5G535P.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-PZMU3Z4L.js → chunk-EVYKV3QI.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-D6UMSC45.js → chunk-F4YFTO2K.js} +11 -11
- package/dist/safe-bash/command-chunks/{chunk-MPUHH2KR.js → chunk-F762XDNG.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-D2ASPM7R.js → chunk-FF7UGJWS.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-OA75SGN2.js → chunk-FOONI6BD.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-DYLNU57U.js → chunk-FSVJ67G5.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-CLKOGAR3.js → chunk-FSYMSWJU.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-22MOB45U.js → chunk-FUQMEUAT.js} +6 -6
- package/dist/safe-bash/command-chunks/chunk-FWKLBDMK.js +0 -0
- package/dist/safe-bash/command-chunks/{chunk-KXPCSVAT.js → chunk-FXCSPPYE.js} +20 -20
- package/dist/safe-bash/command-chunks/{chunk-XZ2FWFNV.js → chunk-FYYFV6PW.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-3OETVNJA.js → chunk-G2COZLXX.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-ZEX53S5I.js → chunk-G3TAX3CV.js} +7369 -7221
- package/dist/safe-bash/command-chunks/{chunk-LXLLA4PM.js → chunk-GCHB7VNX.js} +17 -17
- package/dist/safe-bash/command-chunks/{chunk-4Y6O2K35.js → chunk-GLAF45M7.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-OEJM666F.js → chunk-GQGMQMIM.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-RRL3Y562.js → chunk-GXMPXMDP.js} +11 -11
- package/dist/safe-bash/command-chunks/{chunk-GEM47B2P.js → chunk-GYM5ICK4.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-A5FZBR7X.js → chunk-H33D4R26.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-AGLK7OJR.js → chunk-HDSIIQBS.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-3ZDANXIC.js → chunk-HELAVGZH.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-S4QH5BXZ.js → chunk-HGIMFVI2.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-35IPOBWL.js → chunk-HI6ZYH3W.js} +10 -10
- package/dist/safe-bash/command-chunks/{chunk-KB7DUBVL.js → chunk-HK6MSB7Z.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-7ZE3VIAN.js → chunk-IB5QP4LF.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-UCR5YDV3.js → chunk-IBYMPAUW.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-LABOWPFB.js → chunk-IHXZMAMY.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-XPD636C4.js → chunk-IWHNRYER.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-PPO7YUZF.js → chunk-JGKSWDGP.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-KCOJA7EM.js → chunk-JR3Q6QNL.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-S6R3IB36.js → chunk-JUHOL5KB.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-3O2YEI47.js → chunk-JVKE7YZN.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-6NATRKUJ.js → chunk-JW6WVNTM.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-IK6K2HCG.js → chunk-JWORWL72.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-JOCFI7TG.js → chunk-K2WOMJOQ.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-XVLWZTPY.js → chunk-K4XNUJVJ.js} +543 -144
- package/dist/safe-bash/command-chunks/{chunk-DM2CPMB4.js → chunk-KBAQHE5Y.js} +2 -2
- package/dist/safe-bash/command-chunks/chunk-KCLJGRU7.js +737 -0
- package/dist/safe-bash/command-chunks/{chunk-TUDFMNPP.js → chunk-KINIV2SV.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-43TRBJ2N.js → chunk-KPHLESD4.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-47NEG4UO.js → chunk-KRRG4MGH.js} +222 -46
- package/dist/safe-bash/command-chunks/{chunk-33YCKZZX.js → chunk-KSBNZTAZ.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-4Y34ZG4T.js → chunk-KUOCGGEU.js} +11 -11
- package/dist/safe-bash/command-chunks/{chunk-ML5R5JML.js → chunk-KY4LCHUF.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-2JSDKQ4J.js → chunk-LAPOMHGY.js} +251 -239
- package/dist/safe-bash/command-chunks/{chunk-ENT3IV2G.js → chunk-LDW3RF7Y.js} +12 -12
- package/dist/safe-bash/command-chunks/{chunk-U27XPNLP.js → chunk-LEO4VRIN.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-GZ3VIWNN.js → chunk-LKGTH2Q7.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-ZMHEGDU2.js → chunk-LNTEV56A.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-DVGXLBUW.js → chunk-LZ2JFMKT.js} +10 -10
- package/dist/safe-bash/command-chunks/{chunk-6D2BMAF4.js → chunk-MEM2ZPMI.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-HTVIYLVB.js → chunk-MGMTRGKM.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-B3NLITWP.js → chunk-MKK6FM5H.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-Z2JW6M2D.js → chunk-MKOIPOXX.js} +3 -3
- package/dist/safe-bash/command-chunks/chunk-MLOYUXUV.js +244 -0
- package/dist/safe-bash/command-chunks/{chunk-CBNKHBLD.js → chunk-MNK3DDH6.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-JVGUVHWI.js → chunk-MPXMRTMY.js} +10 -10
- package/dist/safe-bash/command-chunks/{chunk-TW73OXPR.js → chunk-MVLVIMJ6.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-TY4WDAHM.js → chunk-MYZ46FQL.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-TBAIMDGL.js → chunk-N4MUBJCT.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-NPLVFAD6.js → chunk-N6G3345Q.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-ZIIO6GRY.js → chunk-NEMUPUUB.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-K5GB2YMN.js → chunk-NEVQWOU6.js} +10 -10
- package/dist/safe-bash/command-chunks/{chunk-FIIAYCWS.js → chunk-NFGCBQN3.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-PNGDJA6M.js → chunk-NFII726L.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-JQPNA77Y.js → chunk-NHNZYWPW.js} +2 -2
- package/dist/safe-bash/command-chunks/chunk-NQINS4XY.js +156 -0
- package/dist/safe-bash/command-chunks/{chunk-APEWTWCC.js → chunk-NRFTYZ2R.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-THMZLJQD.js → chunk-NYFYTL5G.js} +18 -18
- package/dist/safe-bash/command-chunks/{chunk-SMSGLRIH.js → chunk-OTF2AJ5M.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-QZZ73J2O.js → chunk-OVQP6KH5.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-HDJVJTCK.js → chunk-P2LT6TGR.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-YS25EI54.js → chunk-PCCFLPUQ.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-26VCZHLJ.js → chunk-PIOQBOEK.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-D2KZ66W4.js → chunk-PIVH35EQ.js} +190 -42
- package/dist/safe-bash/command-chunks/{chunk-QYMEASQ6.js → chunk-PLMF35XK.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-JQVHUSDD.js → chunk-PLR5IULU.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-2CORNDGF.js → chunk-PS5GDFIP.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-R6EGGK5M.js → chunk-Q5PWYPQV.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-COKYZUBW.js → chunk-Q7TVCBU2.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-EHTOHOTR.js → chunk-QB72X7FF.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-F3GP3EXE.js → chunk-RGDOYWOD.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-RQIQ75W5.js → chunk-RHDERFMR.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-3KMOXEGH.js → chunk-RHU44OMN.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-7PVHO47B.js → chunk-RIVKF77R.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-UOR6PXZZ.js → chunk-ROL5AEX6.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-AHA6IWAJ.js → chunk-RQYPFLZJ.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-YSMNXMAO.js → chunk-RTNI47C5.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-W5LLKV5H.js → chunk-RV5AGXOV.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-PMAM4N33.js → chunk-RXQ2G2YK.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-EVU7FLDA.js → chunk-S2QNBAN6.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-YE6OAKK7.js → chunk-S43QRKDC.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-774GLJAO.js → chunk-S7HIOT7Z.js} +4 -4
- package/dist/safe-bash/command-chunks/chunk-SEPUP6TZ.js +63 -0
- package/dist/safe-bash/command-chunks/{chunk-JPMYPOYZ.js → chunk-SUTHGUD3.js} +28 -28
- package/dist/safe-bash/command-chunks/chunk-SW37YCBW.js +286 -0
- package/dist/safe-bash/command-chunks/{chunk-Y4EYCZFT.js → chunk-SWAKALDJ.js} +10 -10
- package/dist/safe-bash/command-chunks/{chunk-QUM3SYAJ.js → chunk-SYSX46IV.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-WGH3RLJY.js → chunk-T5S4SJGO.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-7JEIWA3A.js → chunk-TID5TSQW.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-CRV2Q3PB.js → chunk-TJLXSENN.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-IT7TAC3F.js → chunk-TKCUGMRZ.js} +24 -20
- package/dist/safe-bash/command-chunks/{chunk-7GKKMNL6.js → chunk-TXPDKEGY.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-A2CLZMQZ.js → chunk-UJERQEJB.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-6VPQ3CDZ.js → chunk-USGZN2KE.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-LCZDBW55.js → chunk-UYGQEQIP.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-MPORWUTU.js → chunk-V5XC43BX.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-AIMSZBWP.js → chunk-V7E3PZOK.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-CNHRVUHA.js → chunk-VDTFVRYX.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-KJ4XXZIL.js → chunk-VT2PHQ63.js} +582 -59
- package/dist/safe-bash/command-chunks/{chunk-MOZD7RUY.js → chunk-VT7UBPAE.js} +38 -15
- package/dist/safe-bash/command-chunks/{chunk-QDVI2YB6.js → chunk-VUWXLH3E.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-X7FA7ZD5.js → chunk-W3ZSWK76.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-JPA2PUYI.js → chunk-WBKB7HBZ.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-MIRL7HTF.js → chunk-WJ2ERUCQ.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-36XGIPOG.js → chunk-WTVJLHMG.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-SLQWQKXP.js → chunk-WWHMI4S3.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-2UBZALAK.js → chunk-WYZG3DRR.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-YORJDX4V.js → chunk-WZRFS5OY.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-EHSM5ZQS.js → chunk-X6OHFKBL.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-S6ZTBXYO.js → chunk-XKAUKLF7.js} +13 -13
- package/dist/safe-bash/command-chunks/{chunk-EUT24Y5Z.js → chunk-XM5QJCPD.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-WXRYDALR.js → chunk-XMTR7QGL.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-4CKFNXRN.js → chunk-XNGM3W5R.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-2ZFLMWOX.js → chunk-XTEIT5CI.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-4DLIUTQV.js → chunk-XU6S3XUZ.js} +11 -11
- package/dist/safe-bash/command-chunks/{chunk-CJQSAATC.js → chunk-XUJAQA3S.js} +30 -30
- package/dist/safe-bash/command-chunks/{chunk-W5YSINXC.js → chunk-Y42KSX63.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-UAXSE3XE.js → chunk-Y54L4P4J.js} +5 -5
- package/dist/safe-bash/command-chunks/{chunk-6WQD7LRA.js → chunk-YAD7EV4N.js} +14 -14
- package/dist/safe-bash/command-chunks/{chunk-WVMHRNXZ.js → chunk-YRPXBGRX.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-5HPU7D36.js → chunk-Z2WNYEPD.js} +4 -4
- package/dist/safe-bash/command-chunks/{chunk-SDTPO2VV.js → chunk-Z7QOSXQC.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-WJCN2IXI.js → chunk-ZQM37BGE.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-W3HV45CI.js → chunk-ZSQZHFWS.js} +9 -9
- package/dist/safe-bash/command-chunks/{chunk-IDJQP3A6.js → chunk-ZTMZO4IT.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-RID6VYS3.js → chunk-ZU2KJMXO.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-YXKNJ6EM.js → chunk-ZXELXF2H.js} +5 -5
- package/dist/safe-bash/command-chunks/{clipboard-BBDK33GP-VB22F7GI.js → clipboard-BBDK33GP-QZ4ERNQX.js} +2 -2
- package/dist/safe-bash/command-chunks/{command-engine-BCUQGJJ4.js → command-engine-7V6PZR7G.js} +1012 -678
- package/dist/safe-bash/command-chunks/{engine-LAUEWYSQ-DQCEI5HE.js → engine-UYJENSWK-VSCGKSQV.js} +1 -1
- package/dist/safe-bash/command-chunks/{gnumeric-UJPXWBVR-YPXTNEDZ.js → gnumeric-UJPXWBVR-7VOHQAPM.js} +2 -2
- package/dist/safe-bash/command-chunks/{model-store-E7BHBFJC.js → model-store-UB5DWMAP.js} +24 -24
- package/dist/safe-bash/command-chunks/paradox-4FCZE53D-LQPGVMEL.js +365 -0
- package/dist/safe-bash/commands/pandoc/index.browser.js +1 -1
- package/dist/safe-bash/full-core.browser.js +2 -2
- package/dist/safe-bash/plugins/index.browser.js +2 -2
- package/dist/safe-bash-command-awk/awk-runtime.js +3 -3
- package/dist/safe-bash-command-awk/awk.js +4 -4
- package/dist/safe-bash-command-awk/index.js +4 -4
- package/dist/safe-bash-command-diff/diff.js +2 -2
- package/dist/safe-bash-command-diff/index.js +3 -3
- package/dist/safe-bash-command-diff/sync.js +2 -2
- package/dist/safe-bash-command-du/du.js +2 -2
- package/dist/safe-bash-command-du/index.js +2 -2
- package/dist/safe-bash-command-ffmpeg/index.js +1 -1
- package/dist/safe-bash-command-ffprobe/index.js +2 -2
- package/dist/safe-bash-command-ffprobe/media.d.ts +3 -1
- package/dist/safe-bash-command-ffprobe/media.js +2 -2
- package/dist/safe-bash-command-html-to-markdown/budget.js +2 -1
- package/dist/safe-bash-command-html-to-markdown/entities.js +4 -3
- package/dist/safe-bash-command-html-to-markdown/index.js +533 -310
- package/dist/safe-bash-command-html-to-markdown/input.js +6 -5
- package/dist/safe-bash-command-html-to-markdown/options.js +2 -1
- package/dist/safe-bash-command-html-to-markdown/parser.js +5 -4
- package/dist/safe-bash-command-html-to-markdown/render.js +6 -5
- package/dist/safe-bash-command-html-to-markdown/stored-text.d.ts +50 -0
- package/dist/safe-bash-command-html-to-markdown/stored-text.js +12 -0
- package/dist/safe-bash-command-html-to-markdown/text.js +3 -2
- package/dist/safe-bash-command-htmlq/contracts.d.ts +5 -0
- package/dist/safe-bash-command-htmlq/index.js +2006 -259
- package/dist/safe-bash-command-htmlq/selectors.d.ts +38 -1
- package/dist/safe-bash-command-htmlq/serializer.d.ts +1 -0
- package/dist/safe-bash-command-htmlq/tree.d.ts +4 -2
- package/dist/safe-bash-command-iconv/command.js +2 -2
- package/dist/safe-bash-command-iconv/index.js +2 -2
- package/dist/safe-bash-command-llm/command.js +3 -3
- package/dist/safe-bash-command-llm/index.js +9 -9
- package/dist/safe-bash-command-llm/openai.js +2 -2
- package/dist/safe-bash-command-llm/providers/index.js +2 -2
- package/dist/safe-bash-command-llm/providers/openai.js +2 -2
- package/dist/safe-bash-command-node/commands/node/browser.js +2 -2
- package/dist/safe-bash-command-node/commands/node/default-runtime.js +2 -2
- package/dist/safe-bash-command-node/commands/node/safejs.js +2 -2
- package/dist/safe-bash-command-pandoc/command.js +7 -7
- package/dist/safe-bash-command-pandoc/index.js +46 -46
- package/dist/safe-bash-command-patch/index.js +6 -6
- package/dist/safe-bash-command-patch/patch-envelope.js +53 -3
- package/dist/safe-bash-command-patch/patch-formats.d.ts +7 -2
- package/dist/safe-bash-command-patch/patch-formats.js +6 -4
- package/dist/safe-bash-command-patch/patch-gnu-paths.d.ts +7 -7
- package/dist/safe-bash-command-patch/patch-gnu-reject.d.ts +3 -2
- package/dist/safe-bash-command-patch/patch-gnu-reject.js +4 -3
- package/dist/safe-bash-command-patch/patch-publication.js +2 -1
- package/dist/safe-bash-command-patch/patch.js +6 -6
- package/dist/safe-bash-command-patch/stored-patch.d.ts +26 -0
- package/dist/safe-bash-command-patch/stored-target.d.ts +40 -0
- package/dist/safe-bash-command-patch/unified.d.ts +23 -10
- package/dist/safe-bash-command-patch/unified.js +3 -1
- package/dist/safe-bash-command-pdftk/index.d.ts +6 -2
- package/dist/safe-bash-command-pdftk/index.js +1247 -373
- package/dist/safe-bash-command-playwright-cli/index.js +26 -26
- package/dist/safe-bash-command-playwright-cli/playwright/abilities.js +10 -10
- package/dist/safe-bash-command-playwright-cli/playwright/controller.js +14 -14
- package/dist/safe-bash-command-playwright-cli/playwright/index.js +23 -23
- package/dist/safe-bash-command-playwright-cli/playwright/snapshot.js +2 -2
- package/dist/safe-bash-command-playwright-cli/playwright/standard-capabilities.js +6 -6
- package/dist/safe-bash-command-playwright-cli/playwright/storage-capabilities.js +4 -4
- package/dist/safe-bash-command-pptx/command-engine.d.ts +5 -1
- package/dist/safe-bash-command-pptx/engine.js +1 -1
- package/dist/safe-bash-command-pptx/index.d.ts +1 -1
- package/dist/safe-bash-command-pptx/index.js +172 -19
- package/dist/safe-bash-command-pptx/streaming-inputs.d.ts +7 -2
- package/dist/safe-bash-command-python/executor.js +5 -5
- package/dist/safe-bash-command-python/index.js +5 -5
- package/dist/safe-bash-command-python/jspi.js +2 -2
- package/dist/safe-bash-command-soffice/index.js +1 -1
- package/dist/safe-bash-command-sort/index.js +3 -3
- package/dist/safe-bash-command-ssconvert/index.js +2 -2
- package/dist/safe-bash-command-tar/create.js +2 -2
- package/dist/safe-bash-command-tar/extract.js +2 -2
- package/dist/safe-bash-command-tar/index.js +8 -8
- package/dist/safe-bash-command-tar/modes.js +4 -4
- package/dist/safe-bash-command-timeout/index.js +3 -3
- package/dist/safe-bash-command-tree/index.js +2 -2
- package/dist/safe-bash-command-tree/tree.js +2 -2
- package/dist/safe-bash-command-xmllint/index.js +22 -31
- package/dist/safe-bash-command-xz/index.js +5 -5
- package/dist/safe-bash-compression-engine/files.js +2 -2
- package/dist/safe-bash-compression-engine/operand.js +4 -4
- package/dist/safe-bash-contracts/diagnostics.js +3 -3
- package/dist/safe-bash-contracts/escaping.js +10 -10
- package/dist/safe-bash-contracts/filesystem-descriptor.js +1 -1
- package/dist/safe-bash-contracts/filesystem-output.js +6 -6
- package/dist/safe-bash-contracts/index.js +33 -33
- package/dist/safe-bash-contracts/io.js +2 -2
- package/dist/safe-bash-contracts/output.js +3 -3
- package/dist/safe-bash-docx-engine/ancillary-resources.js +5 -5
- package/dist/safe-bash-docx-engine/batch-operations.js +63 -63
- package/dist/safe-bash-docx-engine/batch-result-schema.js +74 -74
- package/dist/safe-bash-docx-engine/batch.js +74 -74
- package/dist/safe-bash-docx-engine/bookmarks.js +13 -13
- package/dist/safe-bash-docx-engine/charts.js +6 -6
- package/dist/safe-bash-docx-engine/command-option-rules.js +3 -3
- package/dist/safe-bash-docx-engine/comments.js +21 -21
- package/dist/safe-bash-docx-engine/control-bindings.js +16 -16
- package/dist/safe-bash-docx-engine/control-repeat.js +16 -16
- package/dist/safe-bash-docx-engine/controls.js +14 -14
- package/dist/safe-bash-docx-engine/create.js +8 -8
- package/dist/safe-bash-docx-engine/diagrams.js +6 -6
- package/dist/safe-bash-docx-engine/diff.js +8 -8
- package/dist/safe-bash-docx-engine/document-properties.js +12 -12
- package/dist/safe-bash-docx-engine/equations.js +12 -12
- package/dist/safe-bash-docx-engine/extract.js +9 -9
- package/dist/safe-bash-docx-engine/fields.js +18 -18
- package/dist/safe-bash-docx-engine/font-inventory.js +13 -13
- package/dist/safe-bash-docx-engine/font-resources.js +3 -3
- package/dist/safe-bash-docx-engine/image-batch-operations.js +11 -11
- package/dist/safe-bash-docx-engine/image-insertion.js +17 -17
- package/dist/safe-bash-docx-engine/image-layout.js +14 -14
- package/dist/safe-bash-docx-engine/image-replacement.js +19 -19
- package/dist/safe-bash-docx-engine/images.js +14 -14
- package/dist/safe-bash-docx-engine/index.js +102 -102
- package/dist/safe-bash-docx-engine/inspection.js +15 -15
- package/dist/safe-bash-docx-engine/invocation.js +4 -4
- package/dist/safe-bash-docx-engine/io.js +6 -6
- package/dist/safe-bash-docx-engine/links.js +17 -17
- package/dist/safe-bash-docx-engine/lists.js +16 -16
- package/dist/safe-bash-docx-engine/locations.js +10 -10
- package/dist/safe-bash-docx-engine/notes.js +18 -18
- package/dist/safe-bash-docx-engine/objects.js +14 -14
- package/dist/safe-bash-docx-engine/pack.js +9 -9
- package/dist/safe-bash-docx-engine/package-view-batch-operations.js +19 -19
- package/dist/safe-bash-docx-engine/pandoc-adapter.js +25 -25
- package/dist/safe-bash-docx-engine/paragraph-edit.js +21 -21
- package/dist/safe-bash-docx-engine/publication.js +6 -6
- package/dist/safe-bash-docx-engine/removal.js +16 -16
- package/dist/safe-bash-docx-engine/revision-decisions.js +16 -16
- package/dist/safe-bash-docx-engine/revision-edit.js +15 -15
- package/dist/safe-bash-docx-engine/revisions.js +12 -12
- package/dist/safe-bash-docx-engine/run-format.js +15 -15
- package/dist/safe-bash-docx-engine/sanitize.js +29 -29
- package/dist/safe-bash-docx-engine/sections.js +15 -15
- package/dist/safe-bash-docx-engine/settings.js +6 -6
- package/dist/safe-bash-docx-engine/shape-edit.js +16 -16
- package/dist/safe-bash-docx-engine/signatures.js +11 -11
- package/dist/safe-bash-docx-engine/stories.js +18 -18
- package/dist/safe-bash-docx-engine/structure-model-batch-operations.js +34 -34
- package/dist/safe-bash-docx-engine/style-model-batch-operations.js +24 -24
- package/dist/safe-bash-docx-engine/style-model-result-schema.js +39 -39
- package/dist/safe-bash-docx-engine/styles.js +14 -14
- package/dist/safe-bash-docx-engine/table-edit.js +23 -23
- package/dist/safe-bash-docx-engine/table-read.js +11 -11
- package/dist/safe-bash-docx-engine/template.js +17 -17
- package/dist/safe-bash-docx-engine/text-replace.js +15 -15
- package/dist/safe-bash-docx-engine/text-resource-read.js +11 -11
- package/dist/safe-bash-docx-engine/text.js +11 -11
- package/dist/safe-bash-docx-engine/validation.js +4 -4
- package/dist/safe-bash-docx-engine/xml-parts.js +17 -17
- package/dist/safe-bash-io-engine/commands/text-programs/shared.js +4 -4
- package/dist/safe-bash-line-ending-engine/command.js +3 -3
- package/dist/safe-bash-line-ending-engine/convert.js +2 -2
- package/dist/safe-bash-line-ending-engine/index.js +6 -6
- package/dist/safe-bash-line-ending-engine/info.js +2 -2
- package/dist/safe-bash-markdown-engine/commonmark-blocks.js +4 -4
- package/dist/safe-bash-markdown-engine/commonmark-inlines.js +4 -4
- package/dist/safe-bash-markdown-engine/commonmark-syntax.js +2 -2
- package/dist/safe-bash-markdown-engine/gfm-syntax.js +3 -3
- package/dist/safe-bash-markdown-engine/index.js +5 -5
- package/dist/safe-bash-network-engine/transfer.js +3 -3
- package/dist/safe-bash-presentation-engine/accessibility.js +31 -30
- package/dist/safe-bash-presentation-engine/animation-editing.js +16 -15
- package/dist/safe-bash-presentation-engine/animations.js +16 -15
- package/dist/safe-bash-presentation-engine/backgrounds.js +17 -16
- package/dist/safe-bash-presentation-engine/bytes.js +3 -3
- package/dist/safe-bash-presentation-engine/chart-editing.js +34 -33
- package/dist/safe-bash-presentation-engine/chart-object-operations.js +25 -24
- package/dist/safe-bash-presentation-engine/charts.js +31 -30
- package/dist/safe-bash-presentation-engine/command-placeholder.js +59 -56
- package/dist/safe-bash-presentation-engine/comments.js +17 -16
- package/dist/safe-bash-presentation-engine/connector-operations.js +32 -31
- package/dist/safe-bash-presentation-engine/connectors.js +29 -28
- package/dist/safe-bash-presentation-engine/content-types.js +4 -4
- package/dist/safe-bash-presentation-engine/creation.js +6 -6
- package/dist/safe-bash-presentation-engine/diff.js +32 -31
- package/dist/safe-bash-presentation-engine/drawing-enums.d.ts +10 -10
- package/dist/safe-bash-presentation-engine/drawing-format.js +20 -19
- package/dist/safe-bash-presentation-engine/drawing-operations.js +31 -30
- package/dist/safe-bash-presentation-engine/drawing-schema.js +21 -20
- package/dist/safe-bash-presentation-engine/equations.js +17 -16
- package/dist/safe-bash-presentation-engine/errors.js +2 -2
- package/dist/safe-bash-presentation-engine/fields.js +17 -16
- package/dist/safe-bash-presentation-engine/font-metrics.js +3 -3
- package/dist/safe-bash-presentation-engine/image-extraction.js +20 -19
- package/dist/safe-bash-presentation-engine/image-formatting.js +32 -31
- package/dist/safe-bash-presentation-engine/image-insertion.js +18 -17
- package/dist/safe-bash-presentation-engine/image-replacement.js +21 -20
- package/dist/safe-bash-presentation-engine/image-value.js +4 -4
- package/dist/safe-bash-presentation-engine/images.js +19 -18
- package/dist/safe-bash-presentation-engine/index.d.ts +5 -1
- package/dist/safe-bash-presentation-engine/index.js +121 -108
- package/dist/safe-bash-presentation-engine/layouts.js +16 -15
- package/dist/safe-bash-presentation-engine/length.js +3 -3
- package/dist/safe-bash-presentation-engine/links.js +16 -15
- package/dist/safe-bash-presentation-engine/masters.js +15 -14
- package/dist/safe-bash-presentation-engine/media-editing.js +24 -23
- package/dist/safe-bash-presentation-engine/media-extraction.js +17 -16
- package/dist/safe-bash-presentation-engine/media.js +16 -15
- package/dist/safe-bash-presentation-engine/memberships.js +15 -14
- package/dist/safe-bash-presentation-engine/notes.js +16 -15
- package/dist/safe-bash-presentation-engine/ole-enum.js +4 -4
- package/dist/safe-bash-presentation-engine/ole-insertion.js +20 -19
- package/dist/safe-bash-presentation-engine/opaque-objects.js +9 -9
- package/dist/safe-bash-presentation-engine/package-reader.js +5 -5
- package/dist/safe-bash-presentation-engine/package-tools.d.ts +3 -0
- package/dist/safe-bash-presentation-engine/package-tools.js +27 -17
- package/dist/safe-bash-presentation-engine/package-uri.js +3 -3
- package/dist/safe-bash-presentation-engine/package-writer.js +4 -4
- package/dist/safe-bash-presentation-engine/presentation-model.js +58 -55
- package/dist/safe-bash-presentation-engine/presentation-settings.js +14 -13
- package/dist/safe-bash-presentation-engine/properties.js +16 -15
- package/dist/safe-bash-presentation-engine/relationships.js +4 -4
- package/dist/safe-bash-presentation-engine/resource-limits.js +1 -1
- package/dist/safe-bash-presentation-engine/retained-archive-staging.d.ts +19 -0
- package/dist/safe-bash-presentation-engine/retained-extraction-output.d.ts +18 -0
- package/dist/safe-bash-presentation-engine/retained-frame-formatting.d.ts +14 -0
- package/dist/safe-bash-presentation-engine/retained-inspection.js +14 -12
- package/dist/safe-bash-presentation-engine/retained-package-extraction.d.ts +22 -0
- package/dist/safe-bash-presentation-engine/retained-package-packing.d.ts +19 -0
- package/dist/safe-bash-presentation-engine/retained-package.d.ts +2 -0
- package/dist/safe-bash-presentation-engine/retained-package.js +6 -4
- package/dist/safe-bash-presentation-engine/retained-text.d.ts +9 -2
- package/dist/safe-bash-presentation-engine/retained-text.js +131 -30
- package/dist/safe-bash-presentation-engine/retained-xml-document.d.ts +1 -0
- package/dist/safe-bash-presentation-engine/retained-xml-parts.d.ts +5 -1
- package/dist/safe-bash-presentation-engine/retained-xml-publication.d.ts +18 -0
- package/dist/safe-bash-presentation-engine/retained-xml-replacement.d.ts +13 -0
- package/dist/safe-bash-presentation-engine/sanitize.js +17 -16
- package/dist/safe-bash-presentation-engine/selectors.js +10 -10
- package/dist/safe-bash-presentation-engine/shape-groups.js +31 -30
- package/dist/safe-bash-presentation-engine/shape-operations.js +30 -29
- package/dist/safe-bash-presentation-engine/shape-path-operations.js +32 -31
- package/dist/safe-bash-presentation-engine/shape-paths.js +16 -15
- package/dist/safe-bash-presentation-engine/shape-presets.js +3 -3
- package/dist/safe-bash-presentation-engine/shape-selection.js +31 -30
- package/dist/safe-bash-presentation-engine/shape-transforms.js +18 -17
- package/dist/safe-bash-presentation-engine/shapes.d.ts +1 -1
- package/dist/safe-bash-presentation-engine/shapes.js +27 -26
- package/dist/safe-bash-presentation-engine/slide-copy.js +17 -16
- package/dist/safe-bash-presentation-engine/slide-import.js +18 -17
- package/dist/safe-bash-presentation-engine/slide-merge-split.js +20 -19
- package/dist/safe-bash-presentation-engine/slide-model.js +43 -42
- package/dist/safe-bash-presentation-engine/slide-removal.js +18 -17
- package/dist/safe-bash-presentation-engine/slide-transfer-budget.js +9 -9
- package/dist/safe-bash-presentation-engine/slides.js +19 -16
- package/dist/safe-bash-presentation-engine/table-operations.js +33 -32
- package/dist/safe-bash-presentation-engine/table-spans.js +32 -31
- package/dist/safe-bash-presentation-engine/tables.js +31 -30
- package/dist/safe-bash-presentation-engine/tags.js +16 -15
- package/dist/safe-bash-presentation-engine/template-bindings.js +33 -32
- package/dist/safe-bash-presentation-engine/template-repeat.js +40 -39
- package/dist/safe-bash-presentation-engine/text-fitting.js +27 -26
- package/dist/safe-bash-presentation-engine/text-frames.d.ts +13 -0
- package/dist/safe-bash-presentation-engine/text-frames.js +29 -26
- package/dist/safe-bash-presentation-engine/text-paragraphs.js +27 -26
- package/dist/safe-bash-presentation-engine/text-reading.js +11 -11
- package/dist/safe-bash-presentation-engine/text-replacement.js +17 -16
- package/dist/safe-bash-presentation-engine/text-runs.js +20 -19
- package/dist/safe-bash-presentation-engine/themes.js +16 -15
- package/dist/safe-bash-presentation-engine/transitions.js +16 -15
- package/dist/safe-bash-presentation-engine/validation.js +10 -9
- package/dist/safe-bash-presentation-engine/xml-parts.d.ts +2 -0
- package/dist/safe-bash-presentation-engine/xml-parts.js +23 -15
- package/dist/safe-bash-presentation-engine/xml-view.js +3 -3
- package/dist/safe-bash-presentation-engine/xml.js +3 -3
- package/dist/safe-bash-query-engine/index.js +4 -4
- package/dist/safe-bash-query-engine/interpreter.js +2 -2
- package/dist/safe-bash-query-engine/query-core.js +4 -4
- package/dist/safe-bash-regex-engine/index.js +1 -1
- package/dist/safe-bash-regex-engine/python-glob.js +1 -1
- package/dist/safe-bash-regex-engine/text/regex.d.ts +19 -0
- package/dist/safe-bash-regex-engine/text/regex.js +1 -1
- package/dist/safe-bash-xml-engine/document.js +3 -3
- package/dist/safe-bash-xml-engine/evaluate.js +1 -1
- package/dist/safe-bash-xml-engine/index.d.ts +1 -0
- package/dist/safe-bash-xml-engine/index.js +9 -5
- package/dist/safe-bash-xml-engine/query.js +2 -2
- package/dist/safe-bash-xml-engine/recovery.d.ts +10 -0
- package/dist/safe-bash-xml-engine/stored-document.d.ts +3 -3
- package/dist/safe-bash-xml-engine/stored-document.js +1 -1
- package/dist/safe-bash-xml-engine/stored-evaluate.js +1 -1
- package/dist/safe-bash-zip-engine/zip/repair.js +3 -3
- package/dist/safe-bash-zip-engine/zip/volumes.js +3 -3
- package/dist/spreadsheet-engine/datasource.js +16 -2
- package/dist/spreadsheet-engine/formulas/diagnostics.d.ts +2 -1
- package/dist/spreadsheet-engine/formulas/diagnostics.js +2 -2
- package/dist/spreadsheet-engine/formulas/evaluator.d.ts +1 -1
- package/dist/spreadsheet-engine/formulas/evaluator.js +2 -1
- package/dist/spreadsheet-engine/formulas/functions/python-printf.js +56 -33
- package/dist/spreadsheet-format-xls/biff-encrypted-properties.d.ts +1 -1
- package/dist/spreadsheet-format-xls/biff-encrypted-properties.js +54 -24
- package/dist/spreadsheet-format-xls/biff-properties-merge.d.ts +6 -2
- package/dist/spreadsheet-format-xls/biff-properties-merge.js +413 -296
- package/dist/spreadsheet-format-xls/biff-properties-write.js +40 -23
- package/dist/spreadsheet-format-xls/biff-properties.js +95 -175
- package/dist/spreadsheet-format-xls/biff-property-dictionary.d.ts +5 -0
- package/dist/spreadsheet-format-xls/biff-property-dictionary.js +75 -0
- package/dist/spreadsheet-format-xls/biff-property-index.d.ts +23 -0
- package/dist/spreadsheet-format-xls/biff-property-index.js +93 -0
- package/dist/spreadsheet-format-xls/biff-property-name.d.ts +4 -0
- package/dist/spreadsheet-format-xls/biff-property-name.js +114 -0
- package/dist/spreadsheet-format-xls/biff-property-range.d.ts +17 -3
- package/dist/spreadsheet-format-xls/biff-property-range.js +178 -37
- package/dist/spreadsheet-format-xls/biff-property-text.d.ts +6 -0
- package/dist/spreadsheet-format-xls/biff-property-text.js +68 -0
- package/dist/spreadsheet-format-xls/biff-property-transcode.d.ts +5 -0
- package/dist/spreadsheet-format-xls/biff-property-transcode.js +45 -0
- package/package.json +8 -3
- package/dist/safe-bash/command-chunks/biff-YKPDH35C-MVQIWNKV.js +0 -4974
- package/dist/safe-bash/command-chunks/chunk-2VLAXKTS.js +0 -245
- package/dist/safe-bash/command-chunks/chunk-5Q22ZLNC.js +0 -127
- package/dist/safe-bash/command-chunks/chunk-JKLOBSMP.js +0 -56
- package/dist/safe-bash/command-chunks/chunk-JYTESTBS.js +0 -99
- package/dist/safe-bash/command-chunks/chunk-ZEGNRZV2.js +0 -333
- package/dist/safe-bash/command-chunks/paradox-ZWWXYY4J-JYOSWSBL.js +0 -362
- package/dist/spreadsheet-format-xls/biff-properties-layout.js +0 -56
- package/dist/safe-bash/command-chunks/{chunk-X2HVVMTW.js → chunk-AW4Q3GZW.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-JC2EV66U.js → chunk-BJXADHRT.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-XI2LETBJ.js → chunk-BXU5Y7I5.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-PVLPWVRH.js → chunk-D3HW7R2N.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-OLK3DCJD.js → chunk-DYERIXPU.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-WYBCSJFG.js → chunk-FWCUEZ3K.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-FF2SQ2GP.js → chunk-GGH376XQ.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-D66Q7QJ3.js → chunk-JRSZ5IGD.js} +6 -6
- package/dist/safe-bash/command-chunks/{chunk-Z3YB4EVE.js → chunk-KSM5CCHT.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-NJ4NTTCR.js → chunk-LNLACEAN.js} +8 -8
- package/dist/safe-bash/command-chunks/{chunk-NBTG6NF6.js → chunk-LTJRUMK6.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-XCYTG7CR.js → chunk-NJGL5JQ6.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-SZ66JC25.js → chunk-Q7J2NTH2.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-MDV7W5AS.js → chunk-SKNI2XQA.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-7ZWACKCG.js → chunk-T6OXG7QQ.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-ECDEPKKW.js → chunk-W25EIKDJ.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-4YSBUQPV.js → chunk-W2FKFEVY.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-2CIDPOUV.js → chunk-WSNHJZQ5.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-4H3TYOVC.js → chunk-Y7AXMCFV.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-U6IEK2CI.js → chunk-YPG55QTP.js} +7 -7
- package/dist/safe-bash/command-chunks/{chunk-252L5YC5.js → chunk-Z37OM247.js} +6 -6
- package/dist/safe-bash/command-chunks/{pln-DFS7VLVS-JATX6FS7.js → pln-DFS7VLVS-OVOBS4QX.js} +3 -3
- package/dist/safe-bash/command-chunks/{psion-YBI6JEQI-6OMC2PGC.js → psion-YBI6JEQI-GY4S6ZLC.js} +3 -3
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import { createBiffPropertyNameEncoder } from "./biff-property-name.js";
|
|
2
|
+
import { readBiffPropertyText } from "./biff-property-text.js";
|
|
3
|
+
import { stageWideBiffProperty } from './biff-property-transcode.js';
|
|
4
|
+
import { stagePropertyBytes, propertyChunks } from './biff-property-bytes.js';
|
|
1
5
|
import { SsconvertError } from "../spreadsheet-engine/contracts.js";
|
|
2
|
-
import { singleByteTables } from "../spreadsheet-engine/encoding/tables.js";
|
|
3
|
-
import { biffDbcsTables } from "../spreadsheet-engine/encoding/biff-dbcs-tables.js";
|
|
4
6
|
import { Binary, invalidBiff } from "./biff-binary.js";
|
|
5
|
-
import { biffDecode } from "./biff-strings.js";
|
|
6
7
|
import { biffPropertyFields, biffPropertyFormats, readBiffProperties } from "./biff-properties.js";
|
|
7
|
-
import {
|
|
8
|
+
import { propertyRange, readPropertySectionRanges, readPropertyValueRanges } from "./biff-property-range.js";
|
|
8
9
|
/** Rebuild offsets around original opaque spans. Never transcode their codepage. */
|
|
9
|
-
export async function mergeBiffProperties(book, streams, handled, context, charge, allocate) {
|
|
10
|
+
export async function mergeBiffProperties(book, streams, handled, context, charge, allocate, staged) {
|
|
10
11
|
const canonical = (name) => ["\u0005SummaryInformation", "\u0005DocumentSummaryInformation"].find(target => target.toUpperCase() === name.toUpperCase());
|
|
11
12
|
const snapshots = new Map(), duplicates = new Set();
|
|
12
13
|
const preserved = new Set();
|
|
@@ -27,316 +28,432 @@ export async function mergeBiffProperties(book, streams, handled, context, charg
|
|
|
27
28
|
throw new SsconvertError("resource-limit", "ssconvert BIFF property text limit exceeded");
|
|
28
29
|
return text;
|
|
29
30
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
continue;
|
|
37
|
-
const object = data;
|
|
38
|
-
charge(Object.keys(object).length);
|
|
39
|
-
if (Object.keys(object).some(key => !["stream", "bytes", "modeled"].includes(key)) || typeof object.stream !== "string" ||
|
|
40
|
-
typeof object.bytes !== "string" || object.modeled !== undefined && !Array.isArray(object.modeled))
|
|
41
|
-
continue;
|
|
42
|
-
charge(object.stream.length + object.bytes.length);
|
|
43
|
-
const name = canonical(object.stream);
|
|
44
|
-
if (!name)
|
|
45
|
-
continue;
|
|
46
|
-
if (snapshots.has(name)) {
|
|
47
|
-
duplicates.add(name);
|
|
48
|
-
continue;
|
|
49
|
-
}
|
|
50
|
-
if (object.bytes.length % 2)
|
|
51
|
-
invalidBiff("invalid retained property bytes");
|
|
52
|
-
const bytes = allocate(object.bytes.length / 2);
|
|
53
|
-
for (let i = 0; i < bytes.length; i++) {
|
|
54
|
-
const high = "0123456789abcdef".indexOf(object.bytes[i * 2].toLowerCase()), low = "0123456789abcdef".indexOf(object.bytes[i * 2 + 1].toLowerCase());
|
|
55
|
-
if (high < 0 || low < 0)
|
|
56
|
-
invalidBiff("invalid retained property bytes");
|
|
57
|
-
bytes[i] = high * 16 + low;
|
|
58
|
-
}
|
|
59
|
-
snapshots.set(name, { record, bytes, modeled: object.modeled });
|
|
60
|
-
}
|
|
61
|
-
for (const name of duplicates)
|
|
62
|
-
snapshots.delete(name);
|
|
63
|
-
if (!snapshots.size)
|
|
64
|
-
return preserved;
|
|
65
|
-
const parse = (bytes) => readBiffPropertySections(bytes, admit, charge).map(section => {
|
|
66
|
-
const data = bytes.subarray(section.offset, section.end);
|
|
67
|
-
return { ...section, bytes: data, ...(biffPropertyFields.has(section.guid) || section.guid === biffPropertyFormats.custom ?
|
|
68
|
-
{ values: readBiffPropertyValues(new Binary(data), admit, charge) } : {}) };
|
|
69
|
-
});
|
|
70
|
-
const old = new Map([...snapshots].map(([name, snapshot]) => [name, parse(snapshot.bytes)]));
|
|
71
|
-
const fresh = new Map([...streams].map(([name, bytes]) => [name, parse(bytes)]));
|
|
72
|
-
const original = new Map(), pending = new Map();
|
|
73
|
-
const identity = (property) => `${property.stream}:${property.section}:${property.id}`;
|
|
74
|
-
const readContext = { ...context, limits: { ...context.limits, inputBytes: context.limits.outputBytes } };
|
|
75
|
-
// Reuse scalar decoding, but do not create another retained hexadecimal copy.
|
|
76
|
-
await readBiffProperties(new Map([...snapshots].map(([name, value]) => [name, value.bytes])), readContext, accountText, charge, undefined, property => { admit(1); original.set(identity(property), property); });
|
|
77
|
-
await readBiffProperties(streams, readContext, accountText, charge, undefined, property => { admit(1); pending.set(property.key, property); });
|
|
78
|
-
const dictionary = (section) => {
|
|
79
|
-
const data = section.values?.get(0);
|
|
80
|
-
if (!data)
|
|
81
|
-
return [];
|
|
82
|
-
const cp = section.values?.get(1)?.u16(4) ?? 1252, width = cp === 1200 ? 2 : 1, count = data.u32(0);
|
|
83
|
-
data.check(4, count * 9);
|
|
84
|
-
admit(count);
|
|
85
|
-
let at = 4;
|
|
86
|
-
const entries = [];
|
|
87
|
-
for (let i = 0; i < count; i++) {
|
|
88
|
-
const start = at, id = data.u32(at), length = data.u32(at + 4);
|
|
89
|
-
at += 8;
|
|
90
|
-
if (!length)
|
|
91
|
-
invalidBiff("empty property dictionary name");
|
|
92
|
-
const bytes = data.slice(at, (length - 1) * width);
|
|
93
|
-
const name = cp === 1200 || cp === 65001 ? new TextDecoder(cp === 1200 ? "utf-16le" : "utf-8", { fatal: true, ignoreBOM: true }).decode(bytes) : biffDecode(bytes, cp);
|
|
94
|
-
accountText(name);
|
|
95
|
-
at += length * width;
|
|
96
|
-
if (width === 2)
|
|
97
|
-
at = Math.ceil(at / 4) * 4;
|
|
98
|
-
entries.push({ id, name, bytes: data.slice(start, at - start) });
|
|
99
|
-
}
|
|
100
|
-
return entries;
|
|
31
|
+
const temporarySources = [];
|
|
32
|
+
const closeTemporary = async () => {
|
|
33
|
+
const outcomes = await Promise.allSettled(temporarySources.map(source => source.close()));
|
|
34
|
+
const errors = outcomes.filter((value) => value.status === "rejected").map(value => value.reason);
|
|
35
|
+
if (errors.length)
|
|
36
|
+
throw new AggregateError(errors, "BIFF property merge storage cleanup failed");
|
|
101
37
|
};
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
38
|
+
try {
|
|
39
|
+
for (const record of book.unsupportedRecords ?? []) {
|
|
40
|
+
admit(1);
|
|
41
|
+
if (record.source !== "biff" || record.kind !== "ole-properties" || record.disposition !== "retained")
|
|
42
|
+
continue;
|
|
43
|
+
const data = record.data;
|
|
44
|
+
if (!data || typeof data !== "object" || Array.isArray(data))
|
|
45
|
+
continue;
|
|
46
|
+
const object = data;
|
|
47
|
+
charge(Object.keys(object).length);
|
|
48
|
+
if (Object.keys(object).some(key => !["stream", "bytes", "modeled"].includes(key)) || typeof object.stream !== "string" ||
|
|
49
|
+
typeof object.bytes !== "string" || object.modeled !== undefined && !Array.isArray(object.modeled))
|
|
50
|
+
continue;
|
|
51
|
+
charge(object.stream.length + object.bytes.length);
|
|
52
|
+
const name = canonical(object.stream);
|
|
53
|
+
if (!name)
|
|
54
|
+
continue;
|
|
55
|
+
if (snapshots.has(name)) {
|
|
56
|
+
duplicates.add(name);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (object.bytes.length % 2)
|
|
60
|
+
invalidBiff("invalid retained property bytes");
|
|
61
|
+
const hex = object.bytes, size = hex.length / 2;
|
|
62
|
+
if (size > context.limits.outputBytes || size > 0xffffffff)
|
|
63
|
+
throw new SsconvertError("resource-limit", "ssconvert BIFF property output bytes limit exceeded");
|
|
64
|
+
charge(size);
|
|
65
|
+
const byte = (at) => {
|
|
66
|
+
const high = "0123456789abcdef".indexOf(hex[at * 2].toLowerCase()), low = "0123456789abcdef".indexOf(hex[at * 2 + 1].toLowerCase());
|
|
67
|
+
if (high < 0 || low < 0)
|
|
68
|
+
invalidBiff("invalid retained property bytes");
|
|
69
|
+
return high * 16 + low;
|
|
70
|
+
};
|
|
71
|
+
for (let at = 0; at < size; at++) {
|
|
72
|
+
if (at % 16384 === 0)
|
|
73
|
+
context.signal.throwIfAborted();
|
|
74
|
+
byte(at);
|
|
75
|
+
}
|
|
76
|
+
const bytes = propertyRange({ size, async read(at, count) {
|
|
77
|
+
const bytes = new Uint8Array(Math.min(16384, count, size - at));
|
|
78
|
+
for (let i = 0; i < bytes.length; i++)
|
|
79
|
+
bytes[i] = byte(at + i);
|
|
80
|
+
return bytes;
|
|
81
|
+
} }, context);
|
|
82
|
+
snapshots.set(name, { record, bytes, modeled: object.modeled });
|
|
110
83
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
84
|
+
for (const name of duplicates)
|
|
85
|
+
snapshots.delete(name);
|
|
86
|
+
if (!snapshots.size)
|
|
87
|
+
return preserved;
|
|
88
|
+
const parse = async (input) => {
|
|
89
|
+
const file = propertyRange(input, context), sections = [];
|
|
90
|
+
for await (const section of readPropertySectionRanges(file, admit, charge, context)) {
|
|
91
|
+
const bytes = file.slice(section.offset, section.end - section.offset);
|
|
92
|
+
sections.push({ ...section, bytes, ...(biffPropertyFields.has(section.guid) || section.guid === biffPropertyFormats.custom ?
|
|
93
|
+
{ values: await readPropertyValueRanges(bytes, admit, charge, context) } : {}) });
|
|
94
|
+
}
|
|
95
|
+
return sections;
|
|
96
|
+
};
|
|
97
|
+
const old = new Map(), fresh = new Map();
|
|
98
|
+
for (const [name, snapshot] of snapshots)
|
|
99
|
+
old.set(name, await parse(snapshot.bytes));
|
|
100
|
+
for (const [name, bytes] of streams)
|
|
101
|
+
fresh.set(name, await parse(bytes));
|
|
102
|
+
const materialize = async (source) => {
|
|
103
|
+
const bytes = allocate(source.size);
|
|
104
|
+
for (let at = 0; at < bytes.length;) {
|
|
105
|
+
const part = await source.read(at, bytes.length - at);
|
|
106
|
+
bytes.set(part, at);
|
|
107
|
+
at += part.length;
|
|
108
|
+
}
|
|
109
|
+
return new Binary(bytes);
|
|
110
|
+
};
|
|
111
|
+
const original = new Map(), pending = new Map();
|
|
112
|
+
const identity = (property) => `${property.stream}:${property.section}:${property.id}`;
|
|
113
|
+
const readContext = { ...context, limits: { ...context.limits, inputBytes: context.limits.outputBytes } };
|
|
114
|
+
// Reuse scalar decoding, but do not create another retained hexadecimal copy.
|
|
115
|
+
await readBiffProperties(new Map([...snapshots].map(([name, value]) => [name, value.bytes])), readContext, accountText, charge, undefined, property => { admit(1); original.set(identity(property), property); });
|
|
116
|
+
await readBiffProperties(streams, readContext, accountText, charge, undefined, property => { admit(1); pending.set(property.key, property); });
|
|
117
|
+
const chunks = async function* (source) {
|
|
118
|
+
for (let at = 0; at < source.size;) {
|
|
119
|
+
const bytes = await source.read(at, source.size - at);
|
|
120
|
+
at += bytes.length;
|
|
121
|
+
yield bytes;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const dictionary = async function* (section, names = true) {
|
|
125
|
+
const data = section.values?.get(0);
|
|
126
|
+
if (!data)
|
|
127
|
+
return;
|
|
128
|
+
const cp = await section.values?.get(1)?.u16(4) ?? 1252, count = await data.u32(0);
|
|
129
|
+
data.check(4, count * 9);
|
|
130
|
+
if (names) {
|
|
131
|
+
charge(data.size);
|
|
132
|
+
admit(count);
|
|
133
|
+
}
|
|
134
|
+
let at = 4;
|
|
135
|
+
for (let i = 0; i < count; i++) {
|
|
136
|
+
const start = at, id = await data.u32(at);
|
|
137
|
+
let name = '';
|
|
138
|
+
if (names) {
|
|
139
|
+
const entry = await readBiffPropertyText(data, at + 4, cp, readContext, accountText, charge);
|
|
140
|
+
at = entry.end;
|
|
141
|
+
name = entry.value;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// Replay already validated spans without retaining or decoding their names again.
|
|
145
|
+
const length = await data.u32(at + 4), width = cp === 1200 ? 2 : 1;
|
|
146
|
+
if (!length)
|
|
147
|
+
invalidBiff("empty property dictionary name");
|
|
148
|
+
at += 8 + length * width;
|
|
149
|
+
if (width === 2)
|
|
150
|
+
at = Math.ceil(at / 4) * 4;
|
|
159
151
|
}
|
|
152
|
+
yield { id, name, bytes: data.slice(start, at - start) };
|
|
160
153
|
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
154
|
+
};
|
|
155
|
+
const writeDictionary = async (section, plan) => {
|
|
156
|
+
const output = { length: plan.length, async *chunks() {
|
|
157
|
+
const header = new Uint8Array(4);
|
|
158
|
+
new DataView(header.buffer).setUint32(0, plan.count, true);
|
|
159
|
+
yield header;
|
|
160
|
+
for await (const entry of dictionary(section, false))
|
|
161
|
+
if (entry.id !== plan.remove) {
|
|
162
|
+
charge(entry.bytes.size);
|
|
163
|
+
yield* chunks(entry.bytes);
|
|
164
|
+
}
|
|
165
|
+
if (plan.append) {
|
|
166
|
+
charge(plan.append.size);
|
|
167
|
+
yield* chunks(plan.append);
|
|
168
|
+
}
|
|
169
|
+
} };
|
|
170
|
+
if (staged) {
|
|
171
|
+
staged.reserve(plan.length);
|
|
172
|
+
const source = await stagePropertyBytes(output, context);
|
|
173
|
+
temporarySources.push(source);
|
|
174
|
+
section.values.set(0, propertyRange(source, context));
|
|
180
175
|
}
|
|
181
|
-
else
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
if (cp === 65001)
|
|
190
|
-
return new TextEncoder().encode(name + "\0");
|
|
191
|
-
if (cp === 1200) {
|
|
192
|
-
const bytes = allocate((name.length + 1) * 2), view = new DataView(bytes.buffer);
|
|
193
|
-
for (let i = 0; i < name.length; i++)
|
|
194
|
-
view.setUint16(i * 2, name.charCodeAt(i), true);
|
|
195
|
-
return bytes;
|
|
196
|
-
}
|
|
197
|
-
let reverse = encodings.get(cp);
|
|
198
|
-
if (!reverse) {
|
|
199
|
-
reverse = new Map();
|
|
200
|
-
encodings.set(cp, reverse);
|
|
201
|
-
const dbcs = biffDbcsTables[cp], table = dbcs?.single ?? singleByteTables[cp === 1201 ? "iso-8859-1" : cp === 10000 ? "macintosh" : cp >= 1250 && cp <= 1258 ? `windows-${cp}` : `cp${cp}`];
|
|
202
|
-
if (!table)
|
|
203
|
-
return undefined;
|
|
204
|
-
for (let i = 0; i < table.length; i++) {
|
|
205
|
-
charge(1);
|
|
206
|
-
if (table[i] !== "\uffff" && !reverse.has(table[i]))
|
|
207
|
-
reverse.set(table[i], [i]);
|
|
176
|
+
else {
|
|
177
|
+
const bytes = allocate(plan.length);
|
|
178
|
+
let at = 0;
|
|
179
|
+
for await (const part of output.chunks()) {
|
|
180
|
+
bytes.set(part, at);
|
|
181
|
+
at += part.length;
|
|
182
|
+
}
|
|
183
|
+
section.values.set(0, propertyRange(bytes, context));
|
|
208
184
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
185
|
+
};
|
|
186
|
+
const remove = async (section, id) => {
|
|
187
|
+
section.values.delete(id);
|
|
188
|
+
if (section.guid === biffPropertyFormats.custom) {
|
|
189
|
+
let length = 4, count = 0;
|
|
190
|
+
for await (const entry of dictionary(section))
|
|
191
|
+
if (entry.id !== id) {
|
|
192
|
+
length += entry.bytes.size;
|
|
193
|
+
count++;
|
|
215
194
|
}
|
|
216
|
-
|
|
217
|
-
const result = [];
|
|
218
|
-
for (const character of name + "\0") {
|
|
219
|
-
charge(1);
|
|
220
|
-
const value = reverse.get(character);
|
|
221
|
-
if (!value)
|
|
222
|
-
return undefined;
|
|
223
|
-
result.push(...value);
|
|
224
|
-
if (result.length > context.limits.outputBytes)
|
|
225
|
-
throw new SsconvertError("resource-limit", "ssconvert BIFF property output bytes limit exceeded");
|
|
226
|
-
}
|
|
227
|
-
const bytes = Uint8Array.from(result);
|
|
228
|
-
return biffDecode(bytes, cp) === name + "\0" ? bytes : undefined;
|
|
229
|
-
};
|
|
230
|
-
const warn = async (key, reason) => context.diagnostic?.({ code: "biff-loss-warning", severity: "warning",
|
|
231
|
-
message: `Unsupported Excel BIFF document property: ${key} (${reason}; original property bytes retained)` });
|
|
232
|
-
for (const property of [...pending.values()]) {
|
|
233
|
-
charge(fresh.get(property.stream).length + (old.get(property.stream)?.length ?? 0));
|
|
234
|
-
const source = fresh.get(property.stream).find(section => section.offset === property.section);
|
|
235
|
-
const target = old.get(property.stream)?.find(section => section.guid === source.guid);
|
|
236
|
-
if (!target)
|
|
237
|
-
continue;
|
|
238
|
-
const value = take(property), values = target.values;
|
|
239
|
-
let id = property.id;
|
|
240
|
-
if (target.guid === biffPropertyFormats.custom) {
|
|
241
|
-
let entries;
|
|
242
|
-
try {
|
|
243
|
-
entries = dictionary(target);
|
|
195
|
+
await writeDictionary(section, { length, count, remove: id });
|
|
244
196
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
197
|
+
};
|
|
198
|
+
const take = async (property) => {
|
|
199
|
+
charge(fresh.get(property.stream).length);
|
|
200
|
+
const section = fresh.get(property.stream).find(section => section.offset === property.section);
|
|
201
|
+
const value = section.values.get(property.id);
|
|
202
|
+
await remove(section, property.id);
|
|
203
|
+
pending.delete(property.key);
|
|
204
|
+
return value;
|
|
205
|
+
};
|
|
206
|
+
const wide = async (source, section) => {
|
|
207
|
+
if (await source.u32(0) !== 30 || (await section.values.get(1)?.u16(4) ?? 1252) === 65001)
|
|
208
|
+
return source;
|
|
209
|
+
if (staged) {
|
|
210
|
+
const output = await stageWideBiffProperty(source, context, charge, staged.reserve);
|
|
211
|
+
temporarySources.push(output);
|
|
212
|
+
return propertyRange(output, context);
|
|
250
213
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
214
|
+
const data = await materialize(source);
|
|
215
|
+
const value = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(data.slice(8, data.u32(4) - 1));
|
|
216
|
+
charge(value.length);
|
|
217
|
+
const bytes = allocate(8 + (value.length + 1) * 2), view = new DataView(bytes.buffer);
|
|
218
|
+
view.setUint32(0, 31, true);
|
|
219
|
+
view.setUint32(4, value.length + 1, true);
|
|
220
|
+
for (let i = 0; i < value.length; i++)
|
|
221
|
+
view.setUint16(8 + i * 2, value.charCodeAt(i), true);
|
|
222
|
+
return propertyRange(bytes, context);
|
|
223
|
+
};
|
|
224
|
+
const same = (a, b) => {
|
|
225
|
+
if (!Array.isArray(a) || !Array.isArray(b))
|
|
226
|
+
return Object.is(a, b);
|
|
227
|
+
charge(a.length + b.length);
|
|
228
|
+
return a.length === b.length && a.every((value, i) => Object.is(value, b[i]));
|
|
229
|
+
};
|
|
230
|
+
for (const [name, snapshot] of snapshots) {
|
|
231
|
+
const seen = new Set();
|
|
232
|
+
let modeled = snapshot.modeled;
|
|
233
|
+
if (!modeled) {
|
|
234
|
+
modeled = [];
|
|
235
|
+
// SummaryInformation is read first. A legacy document-only snapshot lacks
|
|
236
|
+
// that earlier stream's ownership decisions: infer only unchanged values.
|
|
237
|
+
for (const property of original.values()) {
|
|
238
|
+
charge(1);
|
|
239
|
+
if (property.stream !== name)
|
|
240
|
+
continue;
|
|
241
|
+
if (name === "\u0005SummaryInformation" || snapshots.has("\u0005SummaryInformation") ||
|
|
242
|
+
Object.hasOwn(book.properties ?? {}, property.key) && same(property.value, book.properties?.[property.key])) {
|
|
243
|
+
admit(1);
|
|
244
|
+
modeled.push([property.section, property.id, property.key]);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
for (const entry of modeled) {
|
|
249
|
+
admit(1);
|
|
250
|
+
if (!Array.isArray(entry) || entry.length !== 3 || typeof entry[0] !== "number" || typeof entry[1] !== "number" || typeof entry[2] !== "string")
|
|
251
|
+
invalidBiff("invalid retained property identity");
|
|
252
|
+
const [offset, id, key] = entry;
|
|
253
|
+
const property = original.get(identity({ stream: name, section: offset, id }));
|
|
254
|
+
if (!property || property.key !== key || seen.has(key))
|
|
255
|
+
invalidBiff("invalid retained property identity");
|
|
256
|
+
seen.add(key);
|
|
257
|
+
charge(old.get(name).length);
|
|
258
|
+
const section = old.get(name).find(section => section.offset === offset);
|
|
259
|
+
const value = book.properties?.[key], replacement = pending.get(key);
|
|
260
|
+
if (!Object.hasOwn(book.properties ?? {}, key))
|
|
261
|
+
await remove(section, id);
|
|
262
|
+
else if (same(property.value, value)) {
|
|
263
|
+
preserved.add(key);
|
|
264
|
+
if (replacement)
|
|
265
|
+
await take(replacement);
|
|
266
|
+
}
|
|
267
|
+
else if (replacement)
|
|
268
|
+
section.values.set(id, await wide(await take(replacement), section));
|
|
255
269
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
270
|
+
}
|
|
271
|
+
const encodeName = createBiffPropertyNameEncoder(context, charge, accountText);
|
|
272
|
+
const warn = async (key, reason) => context.diagnostic?.({ code: "biff-loss-warning", severity: "warning",
|
|
273
|
+
message: `Unsupported Excel BIFF document property: ${key} (${reason}; original property bytes retained)` });
|
|
274
|
+
for (const property of [...pending.values()]) {
|
|
275
|
+
charge(fresh.get(property.stream).length + (old.get(property.stream)?.length ?? 0));
|
|
276
|
+
const source = fresh.get(property.stream).find(section => section.offset === property.section);
|
|
277
|
+
const target = old.get(property.stream)?.find(section => section.guid === source.guid);
|
|
278
|
+
if (!target)
|
|
259
279
|
continue;
|
|
280
|
+
const value = await take(property), values = target.values;
|
|
281
|
+
let id = property.id;
|
|
282
|
+
if (target.guid === biffPropertyFormats.custom) {
|
|
283
|
+
let count = 0, dictionaryLength = 4, maximumId = 1, collision = false;
|
|
284
|
+
try {
|
|
285
|
+
for await (const entry of dictionary(target)) {
|
|
286
|
+
count++;
|
|
287
|
+
dictionaryLength += entry.bytes.size;
|
|
288
|
+
maximumId = Math.max(maximumId, entry.id);
|
|
289
|
+
if (entry.name === property.key)
|
|
290
|
+
collision = true;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
if (!(error instanceof SsconvertError) || error.code !== "unsupported-feature")
|
|
295
|
+
throw error;
|
|
296
|
+
await warn(property.key, "unknown dictionary encoding");
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
charge(count + values.size);
|
|
300
|
+
if (collision) {
|
|
301
|
+
await warn(property.key, "opaque name collision");
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
const cp = await values.get(1)?.u16(4) ?? 1252, text = encodeName(property.key, cp);
|
|
305
|
+
if (!text) {
|
|
306
|
+
await warn(property.key, "name cannot be encoded in the original codepage");
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
id = maximumId;
|
|
310
|
+
for (const key of values.keys())
|
|
311
|
+
id = Math.max(id, key);
|
|
312
|
+
id++;
|
|
313
|
+
if (id > 0xffffffff) {
|
|
314
|
+
await warn(property.key, "no free property ID");
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
const size = 8 + text.length, length = cp === 1200 ? Math.ceil(size / 4) * 4 : size;
|
|
318
|
+
const entry = { length, *chunks() {
|
|
319
|
+
const header = new Uint8Array(8), view = new DataView(header.buffer);
|
|
320
|
+
view.setUint32(0, id, true);
|
|
321
|
+
view.setUint32(4, text.length / (cp === 1200 ? 2 : 1), true);
|
|
322
|
+
yield header;
|
|
323
|
+
yield* propertyChunks(text);
|
|
324
|
+
if (length > size)
|
|
325
|
+
yield new Uint8Array(length - size);
|
|
326
|
+
} };
|
|
327
|
+
let bytes;
|
|
328
|
+
if (staged) {
|
|
329
|
+
staged.reserve(length);
|
|
330
|
+
const source = await stagePropertyBytes(entry, context);
|
|
331
|
+
temporarySources.push(source);
|
|
332
|
+
bytes = propertyRange(source, context);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
const data = allocate(length);
|
|
336
|
+
let at = 0;
|
|
337
|
+
for (const part of entry.chunks()) {
|
|
338
|
+
data.set(part, at);
|
|
339
|
+
at += part.length;
|
|
340
|
+
}
|
|
341
|
+
bytes = propertyRange(data, context);
|
|
342
|
+
}
|
|
343
|
+
await writeDictionary(target, { length: dictionaryLength + bytes.size, count: count + 1, append: bytes });
|
|
260
344
|
}
|
|
261
|
-
id
|
|
262
|
-
|
|
263
|
-
id = Math.max(id, key);
|
|
264
|
-
for (const entry of entries)
|
|
265
|
-
id = Math.max(id, entry.id);
|
|
266
|
-
id++;
|
|
267
|
-
if (id > 0xffffffff) {
|
|
268
|
-
await warn(property.key, "no free property ID");
|
|
345
|
+
else if (values.has(id)) {
|
|
346
|
+
await warn(property.key, "opaque property ID collision");
|
|
269
347
|
continue;
|
|
270
348
|
}
|
|
271
|
-
|
|
272
|
-
view.setUint32(0, id, true);
|
|
273
|
-
view.setUint32(4, text.length / (cp === 1200 ? 2 : 1), true);
|
|
274
|
-
bytes.set(text, 8);
|
|
275
|
-
writeDictionary(target, [...entries, { id, name: property.key, bytes }]);
|
|
349
|
+
values.set(id, await wide(value, target));
|
|
276
350
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
351
|
+
const reserve = staged?.reserve ?? ((length) => {
|
|
352
|
+
charge(length);
|
|
353
|
+
if (length > 0xffffffff || length > context.limits.outputBytes)
|
|
354
|
+
throw new SsconvertError("resource-limit", "ssconvert BIFF property output bytes limit exceeded");
|
|
355
|
+
return length;
|
|
356
|
+
});
|
|
357
|
+
const encodeSection = (section) => {
|
|
358
|
+
if (!section.values)
|
|
359
|
+
return { length: section.bytes.size, chunks: () => chunks(section.bytes) };
|
|
360
|
+
const values = section.values;
|
|
361
|
+
let length = 8 + values.size * 8;
|
|
362
|
+
for (const value of values.values())
|
|
363
|
+
length += Math.ceil(value.size / 4) * 4;
|
|
364
|
+
// Buffered output charges the section size here, as the old allocation did.
|
|
365
|
+
reserve(length);
|
|
366
|
+
return { length, async *chunks() {
|
|
367
|
+
const header = new Uint8Array(8), view = new DataView(header.buffer);
|
|
368
|
+
view.setUint32(0, length, true);
|
|
369
|
+
view.setUint32(4, values.size, true);
|
|
370
|
+
yield header;
|
|
371
|
+
let at = 8 + values.size * 8;
|
|
372
|
+
for (const [id, value] of values) {
|
|
373
|
+
charge(value.size);
|
|
374
|
+
const entry = new Uint8Array(8), view = new DataView(entry.buffer);
|
|
375
|
+
view.setUint32(0, id, true);
|
|
376
|
+
view.setUint32(4, at, true);
|
|
377
|
+
yield entry;
|
|
378
|
+
at += Math.ceil(value.size / 4) * 4;
|
|
379
|
+
}
|
|
380
|
+
for (const value of values.values()) {
|
|
381
|
+
yield* chunks(value);
|
|
382
|
+
const padding = (4 - value.size % 4) % 4;
|
|
383
|
+
if (padding)
|
|
384
|
+
yield new Uint8Array(padding);
|
|
385
|
+
}
|
|
386
|
+
} };
|
|
387
|
+
};
|
|
388
|
+
for (const name of new Set([...streams.keys(), ...snapshots.keys()])) {
|
|
389
|
+
for (const section of fresh.get(name) ?? [])
|
|
390
|
+
charge(1 + section.values.size);
|
|
391
|
+
const remaining = fresh.get(name)?.filter(section => [...section.values.keys()].some(id => id >= 2)) ?? [];
|
|
392
|
+
if (!old.has(name) && remaining.some(section => section.guid === biffPropertyFormats.custom) &&
|
|
393
|
+
!remaining.some(section => section.guid === biffPropertyFormats.document)) {
|
|
394
|
+
const builtin = fresh.get(name)?.find(section => section.guid === biffPropertyFormats.document);
|
|
395
|
+
if (builtin)
|
|
396
|
+
remaining.unshift(builtin);
|
|
397
|
+
}
|
|
398
|
+
const sections = [...old.get(name) ?? [], ...remaining];
|
|
399
|
+
if (!sections.length) {
|
|
400
|
+
streams.delete(name);
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
const bodies = sections.map(encodeSection), length = 28 + sections.length * 20 + bodies.reduce((sum, body) => sum + body.length, 0);
|
|
404
|
+
const originalHeader = await (snapshots.get(name)?.bytes ?? propertyRange(streams.get(name), context)).read(0, 28);
|
|
405
|
+
const output = { length, async *chunks() {
|
|
406
|
+
const header = new Uint8Array(originalHeader);
|
|
407
|
+
new DataView(header.buffer).setUint32(24, sections.length, true);
|
|
408
|
+
yield header;
|
|
409
|
+
let at = 28 + sections.length * 20;
|
|
410
|
+
for (let i = 0; i < sections.length; i++) {
|
|
411
|
+
charge(1);
|
|
412
|
+
const entry = new Uint8Array(20), view = new DataView(entry.buffer);
|
|
413
|
+
for (let j = 0; j < 16; j++)
|
|
414
|
+
entry[j] = parseInt(sections[i].guid.slice(j * 2, j * 2 + 2), 16);
|
|
415
|
+
view.setUint32(16, at, true);
|
|
416
|
+
yield entry;
|
|
417
|
+
at += bodies[i].length;
|
|
418
|
+
}
|
|
419
|
+
for (const body of bodies)
|
|
420
|
+
yield* body.chunks();
|
|
421
|
+
} };
|
|
422
|
+
if (staged) {
|
|
423
|
+
reserve(length);
|
|
424
|
+
staged.sources.set(name, await stagePropertyBytes(output, context));
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
const bytes = allocate(length);
|
|
428
|
+
let at = 0;
|
|
429
|
+
for await (const part of output.chunks()) {
|
|
430
|
+
bytes.set(part, at);
|
|
431
|
+
at += part.length;
|
|
432
|
+
}
|
|
433
|
+
streams.set(name, bytes);
|
|
434
|
+
}
|
|
435
|
+
const snapshot = snapshots.get(name);
|
|
436
|
+
if (snapshot)
|
|
437
|
+
handled.add(snapshot.record);
|
|
280
438
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
const entries = [...section.values], bytes = allocate(8 + entries.length * 8 + entries.reduce((sum, [, value]) => sum + Math.ceil(value.bytes.length / 4) * 4, 0));
|
|
287
|
-
const view = new DataView(bytes.buffer);
|
|
288
|
-
view.setUint32(0, bytes.length, true);
|
|
289
|
-
view.setUint32(4, entries.length, true);
|
|
290
|
-
let at = 8 + entries.length * 8;
|
|
291
|
-
entries.forEach(([id, value], i) => {
|
|
292
|
-
charge(value.bytes.length);
|
|
293
|
-
view.setUint32(8 + i * 8, id, true);
|
|
294
|
-
view.setUint32(12 + i * 8, at, true);
|
|
295
|
-
bytes.set(value.bytes, at);
|
|
296
|
-
at += Math.ceil(value.bytes.length / 4) * 4;
|
|
439
|
+
const exposed = new Set();
|
|
440
|
+
await readBiffProperties(staged?.sources ?? streams, readContext, accountText, charge, undefined, property => {
|
|
441
|
+
admit(1);
|
|
442
|
+
if (!Object.hasOwn(book.properties ?? {}, property.key))
|
|
443
|
+
exposed.add(property.key);
|
|
297
444
|
});
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
if (!old.has(name) && remaining.some(section => section.guid === biffPropertyFormats.custom) &&
|
|
305
|
-
!remaining.some(section => section.guid === biffPropertyFormats.document)) {
|
|
306
|
-
const builtin = fresh.get(name)?.find(section => section.guid === biffPropertyFormats.document);
|
|
307
|
-
if (builtin)
|
|
308
|
-
remaining.unshift(builtin);
|
|
445
|
+
for (const key of exposed)
|
|
446
|
+
await warn(key, "opaque property exposes a field absent from the model");
|
|
447
|
+
}
|
|
448
|
+
catch (error) {
|
|
449
|
+
try {
|
|
450
|
+
await closeTemporary();
|
|
309
451
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
streams.delete(name);
|
|
313
|
-
continue;
|
|
452
|
+
catch (cleanup) {
|
|
453
|
+
throw new AggregateError([error, cleanup], "BIFF property merge and cleanup failed");
|
|
314
454
|
}
|
|
315
|
-
|
|
316
|
-
bytes.set((snapshots.get(name)?.bytes ?? streams.get(name)).subarray(0, 28));
|
|
317
|
-
const view = new DataView(bytes.buffer);
|
|
318
|
-
view.setUint32(24, sections.length, true);
|
|
319
|
-
let at = 28 + sections.length * 20;
|
|
320
|
-
sections.forEach((section, i) => {
|
|
321
|
-
charge(1);
|
|
322
|
-
for (let j = 0; j < 16; j++)
|
|
323
|
-
bytes[28 + i * 20 + j] = parseInt(section.guid.slice(j * 2, j * 2 + 2), 16);
|
|
324
|
-
view.setUint32(44 + i * 20, at, true);
|
|
325
|
-
bytes.set(bodies[i], at);
|
|
326
|
-
at += bodies[i].length;
|
|
327
|
-
});
|
|
328
|
-
streams.set(name, bytes);
|
|
329
|
-
const snapshot = snapshots.get(name);
|
|
330
|
-
if (snapshot)
|
|
331
|
-
handled.add(snapshot.record);
|
|
455
|
+
throw error;
|
|
332
456
|
}
|
|
333
|
-
|
|
334
|
-
await readBiffProperties(streams, readContext, accountText, charge, undefined, property => {
|
|
335
|
-
admit(1);
|
|
336
|
-
if (!Object.hasOwn(book.properties ?? {}, property.key))
|
|
337
|
-
exposed.add(property.key);
|
|
338
|
-
});
|
|
339
|
-
for (const key of exposed)
|
|
340
|
-
await warn(key, "opaque property exposes a field absent from the model");
|
|
457
|
+
await closeTemporary();
|
|
341
458
|
return preserved;
|
|
342
459
|
}
|