skykoi 2026.3.18 → 2026.3.20
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/APEv2Parser-BzMnB23U.js +281 -0
- package/dist/APEv2Parser-MN2ivXt3.js +281 -0
- package/dist/APEv2Parser-pnIYq527.js +281 -0
- package/dist/AbstractID3Parser-CnRnpdUH.js +51 -0
- package/dist/AbstractID3Parser-Db7qV4ti.js +51 -0
- package/dist/AbstractID3Parser-mX_4_HBe.js +51 -0
- package/dist/AiffParser-Bg3MAng9.js +150 -0
- package/dist/AiffParser-CRggLRXd.js +150 -0
- package/dist/AiffParser-DfpK6zFl.js +150 -0
- package/dist/AsfParser-B1ASnQXa.js +640 -0
- package/dist/AsfParser-D4vog59t.js +640 -0
- package/dist/AsfParser-tU5W8OGT.js +640 -0
- package/dist/BasicParser-BNCoPDZ-.js +1582 -0
- package/dist/BasicParser-BiZYE-KY.js +1582 -0
- package/dist/BasicParser-C4NikQiO.js +1582 -0
- package/dist/DsdiffParser-BXvTQQCc.js +154 -0
- package/dist/DsdiffParser-CoBV6M8u.js +154 -0
- package/dist/DsdiffParser-DGDmXc_L.js +154 -0
- package/dist/DsfParser-Cgw_m3Kp.js +104 -0
- package/dist/DsfParser-hAexKKw9.js +104 -0
- package/dist/DsfParser-k6ySRPVQ.js +104 -0
- package/dist/FlacParser-B7dt6J4g.js +374 -0
- package/dist/FlacParser-DwwphmFR.js +374 -0
- package/dist/FlacParser-RLX1JRur.js +374 -0
- package/dist/ID3v1Parser-AYtRHmGI.js +293 -0
- package/dist/ID3v1Parser-BvpcxAfn.js +293 -0
- package/dist/ID3v1Parser-DQh8hAyo.js +293 -0
- package/dist/ID3v2Parser-B920rB9t.js +659 -0
- package/dist/ID3v2Parser-DRrEmlpw.js +659 -0
- package/dist/ID3v2Parser-YiXv1H5b.js +659 -0
- package/dist/ID3v2Token-DN7nREFT.js +147 -0
- package/dist/ID3v2Token-gDgWdafW.js +147 -0
- package/dist/ID3v2Token-o_W0tgHj.js +147 -0
- package/dist/MP4Parser-BZ1ayXHS.js +1066 -0
- package/dist/MP4Parser-CZvnfNfF.js +1066 -0
- package/dist/MP4Parser-YUAaCZWF.js +1066 -0
- package/dist/MatroskaParser-Bo8g5HKe.js +914 -0
- package/dist/MatroskaParser-PTQJnWWB.js +914 -0
- package/dist/MatroskaParser-duVzOPxM.js +914 -0
- package/dist/MpegParser-D3xAmmfi.js +749 -0
- package/dist/MpegParser-DHlEJLR5.js +749 -0
- package/dist/MpegParser-DYflLP9c.js +749 -0
- package/dist/MusepackParser-CUNYrJuI.js +293 -0
- package/dist/MusepackParser-CwZFzYmU.js +293 -0
- package/dist/MusepackParser-UoNvfbd2.js +293 -0
- package/dist/OggParser-B7vFNeKh.js +400 -0
- package/dist/OggParser-CpTGi8k4.js +400 -0
- package/dist/OggParser-lDXRkOsL.js +400 -0
- package/dist/{SkyKoi-root-1Xxoj9c2.js → SKYKOI-root-B5HYTPZX.js} +5 -5
- package/dist/{SkyKoi-root-B0slXVk_.js → SKYKOI-root-DgeLuP-Y.js} +7 -7
- package/dist/Util-BSeBJ8g_.js +173 -0
- package/dist/Util-Bx1_1IGi.js +173 -0
- package/dist/Util-GRC8g6jp.js +173 -0
- package/dist/WavPackParser-LRcQYWYh.js +172 -0
- package/dist/WavPackParser-Ye7AZlvW.js +172 -0
- package/dist/WavPackParser-x4uITtSL.js +172 -0
- package/dist/WaveParser-BEW8sb8Y.js +279 -0
- package/dist/WaveParser-D15dnWFP.js +279 -0
- package/dist/WaveParser-DbvydTcq.js +279 -0
- package/dist/{accounts-DcTOxu8H.js → accounts-6GHVTfhm.js} +3 -3
- package/dist/{accounts-CLZPTOk3.js → accounts-CnTxg3dy.js} +9 -9
- package/dist/{acp-cli-BYC1TBP3.js → acp-cli-CnrtTyKu.js} +22 -22
- package/dist/{acp-cli-DQ8Gl-66.js → acp-cli-D6OF8RVI.js} +24 -24
- package/dist/{agent-BK9yfjrn.js → agent-CFHVqHI1.js} +15 -15
- package/dist/{agent-DjSLJaQ5.js → agent-DJZpfRZX.js} +15 -15
- package/dist/{agent-scope-Dwqz9NKQ.js → agent-scope-C-oITVZT.js} +15 -15
- package/dist/{agent-scope-DXSQVQ2A.js → agent-scope-DADS8Ogj.js} +7 -7
- package/dist/{agent-scope-Dk1slobN.js → agent-scope-DgrFnRZg.js} +5 -5
- package/dist/{archive-CCe48J14.js → archive-B7z71oiV.js} +9 -9
- package/dist/audio-decode-Bk9cPvOv.js +184 -0
- package/dist/audio-decode-C-Jf_sFv.js +184 -0
- package/dist/audio-decode-C3Wkk46B.js +184 -0
- package/dist/{audit-G4JDzluf.js → audit-CdxqlVY0.js} +24 -24
- package/dist/{audit-CeJVn59E.js → audit-Cziq0-OG.js} +32 -32
- package/dist/{auth-Du3kY_jU.js → auth-DSrYkGU-.js} +2 -2
- package/dist/{auth-health-rhCcWsjZ.js → auth-health-D_hQ5_nq.js} +1 -1
- package/dist/{auth-health-BP6tIeej.js → auth-health-PX_SEdPy.js} +1 -1
- package/dist/{auth-CYYqbqZq.js → auth-kOl4q1D7.js} +2 -2
- package/dist/{auth-profiles-DlIEUnyA.js → auth-profiles-CJmbJXsl.js} +12 -12
- package/dist/{call-BVO6e0OD.js → call-BGnJy6Wo.js} +6 -6
- package/dist/{call-DWhy_UrG.js → call-C_yDMcZA.js} +13 -13
- package/dist/{channel-options-YUvPdymV.js → channel-options-5-N0q-Mt.js} +3 -3
- package/dist/{channel-options-BxFXWaYj.js → channel-options-yR6Egmka.js} +8 -8
- package/dist/{channel-selection-CSpC9ZM0.js → channel-selection-B1jlZvso.js} +2 -2
- package/dist/{channel-selection-jw4ReifC.js → channel-selection-Ha3CW6QO.js} +2 -2
- package/dist/{channel-summary-p01w5aXs.js → channel-summary-CQQsibxL.js} +7 -7
- package/dist/{channel-summary-J7RR_GHH.js → channel-summary-xPetbUgl.js} +8 -8
- package/dist/{channels-cli-gqDnPPnT.js → channels-cli-CSlch9EP.js} +51 -51
- package/dist/{channels-cli-BNMhWmSo.js → channels-cli-qsQd84m7.js} +59 -59
- package/dist/{channels-status-issues-BKH5rJhF.js → channels-status-issues-CsbN-n1Z.js} +1 -1
- package/dist/{channels-status-issues-D9wLqndg.js → channels-status-issues-Cx4DwKM8.js} +1 -1
- package/dist/{chrome-lo-vJbVv.js → chrome-BjAcrZj9.js} +17 -17
- package/dist/{chrome-D1IHaA-W.js → chrome-CAXMMO5v.js} +20 -20
- package/dist/chunk-BXK9XSlF.js +45 -0
- package/dist/{clack-prompter-ZKtp6akD.js → clack-prompter-Bfyih97B.js} +4 -4
- package/dist/{clack-prompter-B9yLhyOm.js → clack-prompter-ysYCwwA-.js} +4 -4
- package/dist/cli-C2Vzy15u.js +86 -0
- package/dist/cli-DyRIu3d4.js +89 -0
- package/dist/{client-C9puJST3.js → client-CkUn7eWk.js} +83 -77
- package/dist/codec-parser-BiLNUl-b.js +2048 -0
- package/dist/codec-parser-CQX5RoRa.js +2048 -0
- package/dist/codec-parser-Y4FcrGgi.js +2048 -0
- package/dist/{command-format-Q2sXw1hM.js → command-format-B5jjY9oQ.js} +2 -2
- package/dist/{command-format-CO5K-hjY.js → command-format-DaWwoZ_Z.js} +2 -2
- package/dist/{command-format-BB7fwONf.js → command-format-JFYLbDtd.js} +2 -2
- package/dist/{command-options-BPpXM6gP.js → command-options-CR1_j1Q3.js} +4 -4
- package/dist/{commands-DhRYjKO-.js → commands-D0jrFj2D.js} +5 -5
- package/dist/{completion-cli-BjxkErR6.js → completion-cli-DXEOXxKS.js} +33 -33
- package/dist/{completion-cli-BsNr40Io.js → completion-cli-Deu0w9Qa.js} +17 -17
- package/dist/{config-DGhm5Zuy.js → config-Cp4weBPs.js} +17 -18
- package/dist/{config-C16s_5FY.js → config-DvdKSujy.js} +17 -18
- package/dist/{config-CDIS7lkk.js → config-ZeM0kR6L.js} +18 -19
- package/dist/{config-guard-CDV1HVFk.js → config-guard-_cFW9m4U.js} +117 -116
- package/dist/{configure-BPSmAkSi.js → configure-B42sDkSS.js} +24 -24
- package/dist/{configure-CAi_zUTy.js → configure-BmZyk_p9.js} +23 -23
- package/dist/{constants-D6SqBATZ.js → constants-BApFvR9k.js} +10 -10
- package/dist/{constants-BzsOF9IQ.js → constants-CXZus5hc.js} +10 -10
- package/dist/{control-service-DhoUNWlV.js → control-service-BFK7QVgY.js} +7 -7
- package/dist/{control-service-CaDw3Uly.js → control-service-BNjuXFmE.js} +6 -6
- package/dist/{cron-cli-DuFo9TMh.js → cron-cli-BKn4-4Yy.js} +19 -19
- package/dist/{cron-cli-Dcifr5rd.js → cron-cli-C4TYzk1Y.js} +18 -18
- package/dist/{daemon-cli-CajPEC03.js → daemon-cli-BjzGPatB.js} +22 -22
- package/dist/{daemon-cli-lu2KND-K.js → daemon-cli-vvlMkTAF.js} +21 -21
- package/dist/{daemon-runtime-DjO_oiZJ.js → daemon-runtime-DCb0uSaS.js} +14 -14
- package/dist/{daemon-runtime-8_EOfq2R.js → daemon-runtime-c-EjZSJl.js} +6 -6
- package/dist/{deliver-PjcQjiUY.js → deliver-ClnTN5bh.js} +9 -9
- package/dist/{deliver-CFnL1UKa.js → deliver-XjO1_1Eh.js} +11 -11
- package/dist/{deliver-BMdhV7Q5.js → deliver-f2AivmYN.js} +5 -5
- package/dist/{deps-cV1Wf2Cj.js → deps-BdP-P-Ji.js} +2 -2
- package/dist/{deps-DeOdeGa3.js → deps-Dkh2WzMG.js} +2 -2
- package/dist/{devices-cli-q0uWi3t7.js → devices-cli-DIcFRpXx.js} +12 -12
- package/dist/{devices-cli-CEmVKNQv.js → devices-cli-k5QlMHgP.js} +15 -15
- package/dist/{directory-cli-lKz_ewUH.js → directory-cli-66KYypXC.js} +16 -16
- package/dist/{directory-cli-B9UxC4yG.js → directory-cli-BpeZIjvP.js} +15 -15
- package/dist/{dispatcher-NZEmG6Ya.js → dispatcher-DvJtgNH1.js} +1 -1
- package/dist/{dns-cli-BhMTHtM5.js → dns-cli-CP7KfVEM.js} +15 -15
- package/dist/{dns-cli-Dzr63Tk8.js → dns-cli-CjvDCuJL.js} +13 -13
- package/dist/{docs-cli-CYqhw6L8.js → docs-cli-BDOiFw-y.js} +10 -10
- package/dist/{docs-cli-Dt7Qw1FF.js → docs-cli-Dm-n_jpX.js} +11 -11
- package/dist/{doctor-CYJtszAW.js → doctor-Bcec8mQT.js} +62 -62
- package/dist/{doctor-MoNOWnT8.js → doctor-BrmKU2Vj.js} +52 -52
- package/dist/entry.js +23 -15
- package/dist/{env-Cttj98du.js → env-BmS1w6Of.js} +1 -1
- package/dist/{errors-B4doMHgK.js → errors-B_oMOHSO.js} +21 -21
- package/dist/{exec-DGTxXFQA.js → exec-B_35B71R.js} +1 -1
- package/dist/{exec-CwGfnRxa.js → exec-BfklUyuf.js} +5 -5
- package/dist/{exec-approvals-BYxeLhk2.js → exec-approvals-BKW0tzYZ.js} +1 -1
- package/dist/{exec-approvals-cli-yFq0PKOT.js → exec-approvals-cli-CQ-W5RyA.js} +22 -22
- package/dist/{exec-approvals-cli-BftIsRih.js → exec-approvals-cli-VlEIC5tr.js} +22 -22
- package/dist/extensionAPI.js +206 -220
- package/dist/flac-Buy3tHnd.js +0 -0
- package/dist/flac-DdmVsuqg.js +0 -0
- package/dist/flac-n-2Ylggm.js +0 -0
- package/dist/{gateway-cli-BpYeDjxf.js → gateway-cli-D3eNVBbZ.js} +211 -212
- package/dist/{gateway-cli-DpWciOhU.js → gateway-cli-DhXcOimF.js} +140 -141
- package/dist/{gateway-rpc-DpFTL0VX.js → gateway-rpc-BMC8-bqk.js} +3 -3
- package/dist/{gateway-rpc-VddQSMy_.js → gateway-rpc-wCkAdVe_.js} +3 -3
- package/dist/{github-copilot-auth-j4O1I0Sd.js → github-copilot-auth-CfOdEwXX.js} +11 -11
- package/dist/{github-copilot-auth-B5-n2fxo.js → github-copilot-auth-DEbYGuwP.js} +11 -11
- package/dist/{github-copilot-token-DkGdbrln.js → github-copilot-token-B_JmXvd-.js} +2 -2
- package/dist/{github-copilot-token-7boTx1D-.js → github-copilot-token-Bh7RwnX2.js} +2 -2
- package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-D3BDUkS_.js} +1 -1
- package/dist/{gmail-setup-utils-B_WClP-s.js → gmail-setup-utils-Bmf_oPLY.js} +3 -3
- package/dist/{gmail-setup-utils-zvV9N1hM.js → gmail-setup-utils-CeTb8vOB.js} +4 -4
- package/dist/{health-format-CJoBMw2C.js → health-format-B7xMjSqB.js} +18 -18
- package/dist/{health-format-CvdHB5XY.js → health-format-CHDuCA-E.js} +16 -16
- package/dist/{help-format-0lndqUB8.js → help-format-q-N7n7vs.js} +1 -1
- package/dist/{helpers-DMlRCrD6.js → helpers-BToWq-9U.js} +1 -1
- package/dist/{hooks-cli-BowoiKQn.js → hooks-cli-D7RJRnCp.js} +51 -51
- package/dist/{hooks-cli-CsTu08QI.js → hooks-cli-DD0XF9GG.js} +70 -70
- package/dist/{hooks-status-BkbDbuuR.js → hooks-status-CRG1w6AU.js} +12 -12
- package/dist/{hooks-status-D4kldoAx.js → hooks-status-D58LpxJJ.js} +12 -12
- package/dist/{image-Dr1f1OYM.js → image-CR77p4vD.js} +16 -16
- package/dist/{image-DioZ-V2D.js → image-Dynqe5-R.js} +11 -11
- package/dist/{image-Dzd44KC_.js → image-z_6CqPW6.js} +11 -11
- package/dist/index.js +157 -156
- package/dist/{installs-BVPHUbW9.js → installs-CSjAIvjg.js} +27 -27
- package/dist/{installs-CWsMIjk0.js → installs-ChtZhX65.js} +11 -11
- package/dist/lib-5zk18GRN.js +509 -0
- package/dist/lib-CQLziXRa.js +1965 -0
- package/dist/lib-D-lL5eAr.js +1965 -0
- package/dist/lib-DAmkdfCx.js +1965 -0
- package/dist/lib-cO2jri71.js +509 -0
- package/dist/lib-otGquoAU.js +509 -0
- package/dist/{links-eId_M8m-.js → links-BYUF0_Hp.js} +1 -1
- package/dist/{links-B3xkO8_G.js → links-Br7nIvtU.js} +1 -1
- package/dist/{loader-CpBACDoa.js → loader-J5uYhRMu.js} +244 -264
- package/dist/{logging-3phpsMUw.js → logging-CLxV9Na7.js} +2 -2
- package/dist/{logging-BDs786Px.js → logging-D15QDE2U.js} +1 -1
- package/dist/login-qr-DAdIWB1P.js +99960 -0
- package/dist/login-qr-DyzyAsRE.js +99963 -0
- package/dist/login-qr-Ovj9NB3z.js +99963 -0
- package/dist/{logs-cli-aJc9HkAG.js → logs-cli-C6cnKN90.js} +16 -16
- package/dist/{logs-cli-BYwCs6p2.js → logs-cli-CAlBiEQn.js} +19 -19
- package/dist/{manager-BWYzzbUa.js → manager-BxO_gdpU.js} +13 -13
- package/dist/{manager-VTzR4KLd.js → manager-D_k9W9gI.js} +11 -11
- package/dist/{manager-CfPTS--0.js → manager-DhEbUQm-.js} +23 -23
- package/dist/{manifest-registry-BNfgQinl.js → manifest-registry-BWwhsgX7.js} +4 -4
- package/dist/{manifest-registry-K6hK96M4.js → manifest-registry-BwckFakx.js} +4 -4
- package/dist/{message-channel-DXR7mBmt.js → message-channel-6KBhOx_o.js} +1 -0
- package/dist/{message-channel-CBfT5rub.js → message-channel-DHb3z4h2.js} +2 -1
- package/dist/{model-selection-C8DSGWIZ.js → model-selection--sxtl2RT.js} +14 -14
- package/dist/{model-selection-DKxD5K5m.js → model-selection-B1X17plF.js} +12 -12
- package/dist/{models-cli-BIvLm8Ib.js → models-cli-Bi4Vr0c6.js} +56 -56
- package/dist/{models-cli-h8e6a71t.js → models-cli-DG4UhIsK.js} +52 -52
- package/dist/mpg123-decoder-Bl-OtJD1.js +0 -0
- package/dist/mpg123-decoder-Bq_QA04d.js +0 -0
- package/dist/mpg123-decoder-Tsi-yPrx.js +0 -0
- package/dist/{net-Bmf8t8EC.js → net-sP4-ayNL.js} +82 -76
- package/dist/{node-cli-DOcP1l4K.js → node-cli-CwZFiSyM.js} +35 -30
- package/dist/{node-cli-CqMQXgxR.js → node-cli-DCA3ThYJ.js} +58 -53
- package/dist/{node-service-CM_a91Iw.js → node-service-0VCYYXMx.js} +2 -2
- package/dist/{node-service-wCEdSy59.js → node-service-TuA57gm-.js} +2 -2
- package/dist/node-wav-BSnuf3Oq.js +232 -0
- package/dist/node-wav-DoZT-OeN.js +232 -0
- package/dist/node-wav-Pb2Cw_GI.js +232 -0
- package/dist/{nodes-cli-DJ0BG0LI.js → nodes-cli-BUfpqag_.js} +21 -21
- package/dist/{nodes-cli-COdDszBG.js → nodes-cli-Yzyex_fY.js} +19 -19
- package/dist/{nodes-screen-CE7lnfmY.js → nodes-screen--Fiu4qmi.js} +2 -2
- package/dist/{nodes-screen-BT0HKIUM.js → nodes-screen-COmr4MnV.js} +4 -4
- package/dist/{note-98hAjjTc.js → note-CrCSjpk3.js} +2 -2
- package/dist/{note-_C44YfAQ.js → note-YmyPRD-3.js} +1 -1
- package/dist/ogg-opus-decoder-CPpAqZXP.js +0 -0
- package/dist/ogg-opus-decoder-DYQP8uow.js +0 -0
- package/dist/ogg-opus-decoder-YQVhl9MM.js +0 -0
- package/dist/ogg-vorbis-BR0Eshfr.js +0 -0
- package/dist/ogg-vorbis-CjKT7ppX.js +0 -0
- package/dist/ogg-vorbis-DOz1YQg1.js +0 -0
- package/dist/{onboard-channels-BSvehi-C.js → onboard-channels-B1dVcEVo.js} +11 -11
- package/dist/{onboard-channels-DDnJCc1P.js → onboard-channels-Cy225vbc.js} +10 -10
- package/dist/{onboard-skills-CeTN7owf.js → onboard-skills-C2JRzs-E.js} +21 -21
- package/dist/{onboard-skills-gzJeAKBp.js → onboard-skills-DZkTp02a.js} +19 -19
- package/dist/{onboarding-vHBmWfxx.js → onboarding-P840nAiE.js} +50 -50
- package/dist/opus-ml-BGnB0Qr9.js +0 -0
- package/dist/opus-ml-BZb-3z5o.js +0 -0
- package/dist/opus-ml-B_gHM9hM.js +0 -0
- package/dist/{pairing-cli-CmvE9eIF.js → pairing-cli-CY3veQVK.js} +15 -15
- package/dist/{pairing-cli-Cww0qX7n.js → pairing-cli-D98QF6b3.js} +17 -17
- package/dist/{pairing-labels-DZDUKMVe.js → pairing-labels-DxpfDscO.js} +1 -1
- package/dist/{pairing-labels-kr-LZ7Iv.js → pairing-labels-PIuwtPoI.js} +1 -1
- package/dist/{pairing-store-3EKEJ-wO.js → pairing-store-BQk2-5gz.js} +2 -2
- package/dist/{pairing-store-BzP-zlXS.js → pairing-store-D5pH_THY.js} +1 -1
- package/dist/{path-env-CW2YJL2d.js → path-env-CFR2r-B9.js} +4 -4
- package/dist/{path-env-C9kNtksu.js → path-env-DKuROk9X.js} +4 -4
- package/dist/{paths-DIgugNlf.js → paths-BKn8dZXk.js} +13 -5
- package/dist/{paths-3i01DqyU.js → paths-BP5k1v-m.js} +14 -6
- package/dist/{paths-DqczE7b5.js → paths-BRP11_63.js} +1 -1
- package/dist/{paths-Cn5vXlEi.js → paths-DPLOvGLU.js} +1 -1
- package/dist/{paths-DNYJDWUD.js → paths-Dx_DFiIu.js} +2 -2
- package/dist/{pi-embedded-helpers-BLT8pUGL.js → pi-embedded-helpers-Bpsyu8Kj.js} +4 -4
- package/dist/{pi-embedded-helpers-BccQ1hsl.js → pi-embedded-helpers-Bx18M5ks.js} +7 -7
- package/dist/{pi-embedded-helpers-CXrXpoUy.js → pi-embedded-helpers-CPaWNLp0.js} +49 -48
- package/dist/{pi-model-discovery-CV2V1HHz.js → pi-model-discovery-BowiL596.js} +1 -1
- package/dist/{pi-model-discovery-DzEIEgHL.js → pi-model-discovery-DIMWsfXu.js} +1 -1
- package/dist/{pi-model-discovery-EhM2JAQo.js → pi-model-discovery-DQcDii4Q.js} +1 -1
- package/dist/{pi-tools.policy-BT3_X5hC.js → pi-tools.policy-DdMitiOJ.js} +4 -4
- package/dist/{plugin-auto-enable-CaLaPfyz.js → plugin-auto-enable-BXjZ_pUL.js} +5 -5
- package/dist/{plugin-auto-enable-B4g3OAkw.js → plugin-auto-enable-CIHFDKgl.js} +6 -6
- package/dist/plugin-sdk/APEv2Parser-BzMnB23U.js +281 -0
- package/dist/plugin-sdk/AbstractID3Parser-mX_4_HBe.js +51 -0
- package/dist/plugin-sdk/AiffParser-Bg3MAng9.js +150 -0
- package/dist/plugin-sdk/AsfParser-B1ASnQXa.js +640 -0
- package/dist/plugin-sdk/BasicParser-BiZYE-KY.js +1582 -0
- package/dist/plugin-sdk/DsdiffParser-CoBV6M8u.js +154 -0
- package/dist/plugin-sdk/DsfParser-k6ySRPVQ.js +104 -0
- package/dist/plugin-sdk/FlacParser-RLX1JRur.js +374 -0
- package/dist/plugin-sdk/ID3v1Parser-BvpcxAfn.js +293 -0
- package/dist/plugin-sdk/ID3v2Parser-YiXv1H5b.js +659 -0
- package/dist/plugin-sdk/ID3v2Token-o_W0tgHj.js +147 -0
- package/dist/plugin-sdk/MP4Parser-BZ1ayXHS.js +1066 -0
- package/dist/plugin-sdk/MatroskaParser-PTQJnWWB.js +914 -0
- package/dist/plugin-sdk/MpegParser-DHlEJLR5.js +749 -0
- package/dist/plugin-sdk/MusepackParser-UoNvfbd2.js +293 -0
- package/dist/plugin-sdk/OggParser-CpTGi8k4.js +400 -0
- package/dist/plugin-sdk/Util-Bx1_1IGi.js +173 -0
- package/dist/plugin-sdk/WavPackParser-x4uITtSL.js +172 -0
- package/dist/plugin-sdk/WaveParser-D15dnWFP.js +279 -0
- package/dist/plugin-sdk/audio-decode-DOKQCWuJ.js +184 -0
- package/dist/plugin-sdk/chunk-BXK9XSlF.js +45 -0
- package/dist/plugin-sdk/flac-hG9eHc5C.js +0 -0
- package/dist/plugin-sdk/index.js +99994 -536
- package/dist/plugin-sdk/lib-D-lL5eAr.js +1965 -0
- package/dist/plugin-sdk/lib-otGquoAU.js +509 -0
- package/dist/plugin-sdk/mpg123-decoder-E3KQfw3S.js +0 -0
- package/dist/plugin-sdk/node-wav-BSnuf3Oq.js +232 -0
- package/dist/plugin-sdk/ogg-opus-decoder-BmjjPx6R.js +0 -0
- package/dist/plugin-sdk/ogg-vorbis-DOZkYRDh.js +3049 -0
- package/dist/plugin-sdk/opus-ml-CHujQZQJ.js +0 -0
- package/dist/plugin-sdk/{pi-model-discovery-Dw3A6oXH.js → pi-model-discovery-CL0x9CpO.js} +1 -18
- package/dist/plugin-sdk/qoa-format-BSovnHxc.js +256 -0
- package/dist/plugin-sdk/types-wnlxSmkO.js +31 -0
- package/dist/{plugins-njK_epvi.js → plugins-Czjx5qei.js} +3 -3
- package/dist/{plugins-GKGgxE5t.js → plugins-DsFDopoj.js} +4 -4
- package/dist/{plugins-cli-Chvh9j2R.js → plugins-cli-DG9O99yi.js} +47 -47
- package/dist/{plugins-cli-lYBYpfMl.js → plugins-cli-pQ3Lt11k.js} +46 -46
- package/dist/{ports-KQoPI6qA.js → ports-Bc_X7vVa.js} +2 -2
- package/dist/{program-CjNzuUPK.js → program-Cb_XTekc.js} +91 -91
- package/dist/{progress-DXkwieg_.js → progress-RqIRAMUO.js} +1 -1
- package/dist/{prompt-style-LrI4wrff.js → prompt-style-CnGSEFh0.js} +1 -1
- package/dist/{pw-ai-BNrEe8iK.js → pw-ai-CM6GHEUW.js} +12 -12
- package/dist/{pw-ai-DTPSxyYq.js → pw-ai-DbAx6e1v.js} +10 -10
- package/dist/{pw-ai-uXwwWogH.js → pw-ai-DzgG6D7d.js} +13 -13
- package/dist/{qmd-manager-BRInTFIN.js → qmd-manager-CpliINnL.js} +7 -7
- package/dist/{qmd-manager-CsRVpnPk.js → qmd-manager-EBPmcRe1.js} +20 -20
- package/dist/{qmd-manager-PlJXhRln.js → qmd-manager-_Iww2k8L.js} +5 -5
- package/dist/qoa-format-BSovnHxc.js +256 -0
- package/dist/qoa-format-CpeDyL2r.js +256 -0
- package/dist/qoa-format-Dg-pRdWw.js +256 -0
- package/dist/{register.subclis-Q2OZdfsr.js → register.subclis-DSDynk08.js} +30 -30
- package/dist/{reply-CWnTy9DP.js → reply-B5dY4gXb.js} +159 -179
- package/dist/{routes-CeV52PS-.js → routes-MhfRrAmB.js} +24 -24
- package/dist/{routes-CbHFaMB6.js → routes-hJd6VixZ.js} +10 -10
- package/dist/{rpc-Mg_kN01g.js → rpc-UOroZhpN.js} +3 -3
- package/dist/{rpc-zPKcaOPs.js → rpc-mc9OFC-u.js} +3 -3
- package/dist/{run-main-oUMnrjy0.js → run-main-3jWzz7CS.js} +86 -86
- package/dist/{sandbox-DUnXybLw.js → sandbox-DSyCgHwX.js} +42 -42
- package/dist/{sandbox-cli-i4BGjVdR.js → sandbox-cli-DXfZ5K-P.js} +40 -40
- package/dist/{sandbox-cli-BcX3UNaC.js → sandbox-cli-E_oOdISO.js} +39 -39
- package/dist/{sandbox-BAKrAQJm.js → sandbox-ev6yGaED.js} +29 -29
- package/dist/{security-cli-Bpf-Qepk.js → security-cli-CfPpnnRg.js} +29 -29
- package/dist/{security-cli-C5tONGzJ.js → security-cli-Cl2oCzwR.js} +35 -35
- package/dist/{server-context-D-hq6gbi.js → server-context-Bdeie10d.js} +14 -14
- package/dist/{server-context-DthBWsuh.js → server-context-Cbebhh74.js} +15 -15
- package/dist/{server-node-events-Bqxi5LWb.js → server-node-events-CT7D2wOY.js} +44 -44
- package/dist/{server-node-events-C7RhxEfE.js → server-node-events-CXvj5ron.js} +44 -44
- package/dist/{service-CgwRT3N2.js → service-C1Hbmeqp.js} +16 -16
- package/dist/{service-F5BEDQpe.js → service-WG1x2OSQ.js} +3 -3
- package/dist/{service-audit-DG9j_qzZ.js → service-audit-dD2s6rYk.js} +12 -12
- package/dist/{service-audit-CCorT0US.js → service-audit-upiYbaf_.js} +22 -22
- package/dist/{session-cost-usage-XwMY4gn6.js → session-cost-usage-BR5ASC0b.js} +2 -2
- package/dist/{session-cost-usage-lYVH5MAy.js → session-cost-usage-Ceehob2Z.js} +3 -3
- package/dist/{shared-DT5rnBex.js → shared-BVqcu6Df.js} +4 -4
- package/dist/{shared-wEhs_YC6.js → shared-CKKIXImM.js} +3 -3
- package/dist/{shared-B8KNBCPn.js → shared-Cqlq5soB.js} +4 -4
- package/dist/{shared-2obeQe6S.js → shared-DT19TjiI.js} +5 -5
- package/dist/{skill-scanner-aOkYeEO4.js → skill-scanner-BAxRMq-1.js} +5 -5
- package/dist/{skills-BJmL9G5L.js → skills-BxO5Ecx5.js} +12 -12
- package/dist/{skills-CdkMUrvl.js → skills-CCunBWnn.js} +11 -11
- package/dist/{skills-cli-B19BI487.js → skills-cli-D3tiER5c.js} +16 -16
- package/dist/{skills-cli-C2ezyVpE.js → skills-cli-DsIX-fbt.js} +13 -13
- package/dist/{skills-status-DH_vL1oK.js → skills-status-C4wmQlJW.js} +4 -4
- package/dist/{skills-status-yJBOK7p_.js → skills-status-H6bA88MV.js} +5 -5
- package/dist/{sqlite-CtiUzPmK.js → sqlite-CBI1pJqV.js} +1 -1
- package/dist/{sqlite-BGsQl84h.js → sqlite-DKK1V89f.js} +8 -8
- package/dist/{sqlite-C_5n8NZI.js → sqlite-DRGmFCyY.js} +1 -1
- package/dist/{status-qmxEpx0Y.js → status-Bj5uV6E3.js} +4 -4
- package/dist/{status-DbHoWTdL.js → status-DvPSfpxU.js} +5 -5
- package/dist/{status-BiKRGibW.js → status-UGNosayn.js} +57 -57
- package/dist/{subsystem-Bn-Knx2Q.js → subsystem-B6KC_eUM.js} +5 -5
- package/dist/{system-cli-Dmh-QQ4h.js → system-cli-BMGVf7ec.js} +16 -16
- package/dist/{system-cli-hGiiO2xj.js → system-cli-oQm8pGPh.js} +13 -13
- package/dist/{systemd-D0c9E7A9.js → systemd-DQvm8tRB.js} +8 -8
- package/dist/{systemd-D1yEPZpQ.js → systemd-DyrxDxSB.js} +4 -4
- package/dist/{systemd-hints-DMk8z28R.js → systemd-hints-C_XVx08a.js} +1 -1
- package/dist/{systemd-hints-Ds4nmNMK.js → systemd-hints-DiosV8jd.js} +1 -1
- package/dist/{systemd-linger-uQ6a86xp.js → systemd-linger-C5NE1TWa.js} +3 -3
- package/dist/{systemd-linger-G42wYOWf.js → systemd-linger-CEreLGmo.js} +3 -3
- package/dist/{table-C6xP5U7w.js → table-BOthYYmp.js} +2 -2
- package/dist/{table-DKkcJVTl.js → table-Kzsd53ks.js} +1 -1
- package/dist/{tailscale-Dv6sZxfi.js → tailscale-C9oNI3cv.js} +2 -2
- package/dist/{tailscale-9MusRvOi.js → tailscale-DPwNB3iM.js} +1 -1
- package/dist/{tool-display-DOXnpL7M.js → tool-display-BhorItjT.js} +1 -1
- package/dist/{tool-display-vnkUT5fb.js → tool-display-Bi4RVFbR.js} +2 -2
- package/dist/{tui-8xMe1QpO.js → tui-DYDLeQUC.js} +13 -13
- package/dist/{tui-C4l4UJQZ.js → tui-Diudkvd5.js} +13 -13
- package/dist/{tui-cli-CiILiJro.js → tui-cli-BcVeal9Q.js} +26 -26
- package/dist/{tui-cli-DIFHrgzU.js → tui-cli-J5lEzvs1.js} +26 -26
- package/dist/types-36i9W9h4.js +31 -0
- package/dist/types-DFmrbRdj.js +31 -0
- package/dist/types-wnlxSmkO.js +31 -0
- package/dist/{update-CB1s6436.js → update-BM7DEuEF.js} +4 -4
- package/dist/{update-DJou--bz.js → update-NeXgYicE.js} +6 -6
- package/dist/{update-cli-ByZHadFO.js → update-cli-DBZC7RZ3.js} +96 -96
- package/dist/{update-cli-B6j8WQeZ.js → update-cli-D_R7KCI6.js} +104 -104
- package/dist/{update-runner-C7t9yEh9.js → update-runner-DX4PkME_.js} +37 -37
- package/dist/{update-runner-C-xWSrwR.js → update-runner-cJE7Mg_v.js} +19 -19
- package/dist/utilities-B6KNfojb.js +544 -0
- package/dist/utilities-BMOdFyqL.js +544 -0
- package/dist/utilities-MEewneDe.js +544 -0
- package/dist/{utils-Dq030IDo.js → utils-CV3CeN0V.js} +2 -2
- package/dist/{webhooks-cli-DNjOhFaU.js → webhooks-cli-DFNUtQz3.js} +13 -13
- package/dist/{webhooks-cli-CYnUjeTW.js → webhooks-cli-DZwQ9crg.js} +16 -16
- package/dist/{widearea-dns-bdiHwdn3.js → widearea-dns-Cr9yVcsB.js} +7 -7
- package/dist/{widearea-dns-vPa3VRwl.js → widearea-dns-DHSIgmLp.js} +7 -7
- package/dist/{ws-log-vBkmxf4_.js → ws-log-C4lXq6b4.js} +2 -2
- package/dist/{ws-log-CqjxtHs1.js → ws-log-DQL_wvbk.js} +1 -1
- package/dist/{wsl-BZr_5_f3.js → wsl-DsSY3cxu.js} +3 -3
- package/package.json +8 -3
- package/dist/cli-BcZrwB7B.js +0 -86
- package/dist/cli-D5fhMpeN.js +0 -89
- package/dist/login-qr-BTxvjeP2.js +0 -478
- package/dist/login-qr-D14yUuqm.js +0 -475
- package/dist/login-qr-Dmtjim0W.js +0 -478
- package/dist/rolldown-runtime-Cbj13DAv.js +0 -20
- /package/dist/{brew-CcZV0dSS.js → brew-Cpx31iqo.js} +0 -0
- /package/dist/{cli-utils-DzrdzskQ.js → cli-utils-CQTTNUIq.js} +0 -0
- /package/dist/{exec-B8JKbXKW.js → exec-CUWUdKmp.js} +0 -0
- /package/dist/{format-tlvh4-cQ.js → format-BPATbSa4.js} +0 -0
- /package/dist/{help-format-DuMTLWZ-.js → help-format-tZizD4BR.js} +0 -0
- /package/dist/{helpers-azbX_hrI.js → helpers-CEFiyjZQ.js} +0 -0
- /package/dist/{is-main-PYGa3tDA.js → is-main-DopiqU5A.js} +0 -0
- /package/dist/{logging-pqyrk15z.js → logging-6RmrnEvA.js} +0 -0
- /package/dist/{parse-DqAvJRIf.js → parse-CQc2Wki1.js} +0 -0
- /package/dist/{parse-log-line-BnB7770k.js → parse-log-line-BqMD3os9.js} +0 -0
- /package/dist/{parse-log-line-DSvJi17i.js → parse-log-line-j84FWlT5.js} +0 -0
- /package/dist/{parse-timeout-DV8NQQWk.js → parse-timeout-D4Vew-aj.js} +0 -0
- /package/dist/{progress-Bcjniu7m.js → progress-BUjAoXj8.js} +0 -0
- /package/dist/{prompt-style-CFsleyxV.js → prompt-style-CLfdE1ZE.js} +0 -0
- /package/dist/{prompts-CudpZgTI.js → prompts-Bt9fwsg2.js} +0 -0
- /package/dist/{redact-Bt-krp_b.js → redact-DL7khirP.js} +0 -0
- /package/dist/{session-key-n2HVbrj0.js → session-key-BmNnF5dG.js} +0 -0
- /package/dist/{status-BF8IVV7c.js → status-CaPZ8xx2.js} +0 -0
- /package/dist/{status-CWDof7Cn.js → status-t7_XFd6z.js} +0 -0
- /package/dist/{tailnet-Byp3obcc.js → tailnet-DdlcUdSm.js} +0 -0
- /package/dist/{transcript-events-Bv_eRVym.js → transcript-events-CpdW3XtR.js} +0 -0
- /package/dist/{usage-format-BcU1flOY.js → usage-format-byZKzM9f.js} +0 -0
- /package/dist/{utils-DPjbasLh.js → utils-BMYqLzNy.js} +0 -0
- /package/dist/{ws-D091yo4M.js → ws-0itoIRvF.js} +0 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { i as __toESM, n as __exportAll } from "./chunk-BXK9XSlF.js";
|
|
2
|
+
import { A as textDecode, O as Uint8ArrayType, b as UINT16_LE, c as require_src, i as InternalParserError, j as textEncode, r as FieldDecodingError, s as makeUnexpectedFileContentError, t as BasicParser, v as StringType, w as UINT32_LE } from "./BasicParser-BiZYE-KY.js";
|
|
3
|
+
import { r as fromBuffer } from "./lib-otGquoAU.js";
|
|
4
|
+
import { i as findZero, t as a2hex } from "./Util-Bx1_1IGi.js";
|
|
5
|
+
|
|
6
|
+
//#region node_modules/.pnpm/music-metadata@11.11.2/node_modules/music-metadata/lib/common/FourCC.js
|
|
7
|
+
const validFourCC = /^[\x21-\x7e©][\x20-\x7e\x00()]{3}/;
|
|
8
|
+
/**
|
|
9
|
+
* Token for read FourCC
|
|
10
|
+
* Ref: https://en.wikipedia.org/wiki/FourCC
|
|
11
|
+
*/
|
|
12
|
+
const FourCcToken = {
|
|
13
|
+
len: 4,
|
|
14
|
+
get: (buf, off) => {
|
|
15
|
+
const id = textDecode(buf.subarray(off, off + FourCcToken.len), "latin1");
|
|
16
|
+
if (!id.match(validFourCC)) throw new FieldDecodingError(`FourCC contains invalid characters: ${a2hex(id)} "${id}"`);
|
|
17
|
+
return id;
|
|
18
|
+
},
|
|
19
|
+
put: (buffer, offset, id) => {
|
|
20
|
+
const str = textEncode(id, "latin1");
|
|
21
|
+
if (str.length !== 4) throw new InternalParserError("Invalid length");
|
|
22
|
+
buffer.set(str, offset);
|
|
23
|
+
return offset + 4;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region node_modules/.pnpm/music-metadata@11.11.2/node_modules/music-metadata/lib/apev2/APEv2Token.js
|
|
29
|
+
const DataType = {
|
|
30
|
+
text_utf8: 0,
|
|
31
|
+
binary: 1,
|
|
32
|
+
external_info: 2,
|
|
33
|
+
reserved: 3
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* APE_DESCRIPTOR: defines the sizes (and offsets) of all the pieces, as well as the MD5 checksum
|
|
37
|
+
*/
|
|
38
|
+
const DescriptorParser = {
|
|
39
|
+
len: 52,
|
|
40
|
+
get: (buf, off) => {
|
|
41
|
+
return {
|
|
42
|
+
ID: FourCcToken.get(buf, off),
|
|
43
|
+
version: UINT32_LE.get(buf, off + 4) / 1e3,
|
|
44
|
+
descriptorBytes: UINT32_LE.get(buf, off + 8),
|
|
45
|
+
headerBytes: UINT32_LE.get(buf, off + 12),
|
|
46
|
+
seekTableBytes: UINT32_LE.get(buf, off + 16),
|
|
47
|
+
headerDataBytes: UINT32_LE.get(buf, off + 20),
|
|
48
|
+
apeFrameDataBytes: UINT32_LE.get(buf, off + 24),
|
|
49
|
+
apeFrameDataBytesHigh: UINT32_LE.get(buf, off + 28),
|
|
50
|
+
terminatingDataBytes: UINT32_LE.get(buf, off + 32),
|
|
51
|
+
fileMD5: new Uint8ArrayType(16).get(buf, off + 36)
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* APE_HEADER: describes all of the necessary information about the APE file
|
|
57
|
+
*/
|
|
58
|
+
const Header = {
|
|
59
|
+
len: 24,
|
|
60
|
+
get: (buf, off) => {
|
|
61
|
+
return {
|
|
62
|
+
compressionLevel: UINT16_LE.get(buf, off),
|
|
63
|
+
formatFlags: UINT16_LE.get(buf, off + 2),
|
|
64
|
+
blocksPerFrame: UINT32_LE.get(buf, off + 4),
|
|
65
|
+
finalFrameBlocks: UINT32_LE.get(buf, off + 8),
|
|
66
|
+
totalFrames: UINT32_LE.get(buf, off + 12),
|
|
67
|
+
bitsPerSample: UINT16_LE.get(buf, off + 16),
|
|
68
|
+
channel: UINT16_LE.get(buf, off + 18),
|
|
69
|
+
sampleRate: UINT32_LE.get(buf, off + 20)
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* APE Tag Header/Footer Version 2.0
|
|
75
|
+
* TAG: describes all the properties of the file [optional]
|
|
76
|
+
*/
|
|
77
|
+
const TagFooter = {
|
|
78
|
+
len: 32,
|
|
79
|
+
get: (buf, off) => {
|
|
80
|
+
return {
|
|
81
|
+
ID: new StringType(8, "ascii").get(buf, off),
|
|
82
|
+
version: UINT32_LE.get(buf, off + 8),
|
|
83
|
+
size: UINT32_LE.get(buf, off + 12),
|
|
84
|
+
fields: UINT32_LE.get(buf, off + 16),
|
|
85
|
+
flags: parseTagFlags(UINT32_LE.get(buf, off + 20))
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* APE Tag v2.0 Item Header
|
|
91
|
+
*/
|
|
92
|
+
const TagItemHeader = {
|
|
93
|
+
len: 8,
|
|
94
|
+
get: (buf, off) => {
|
|
95
|
+
return {
|
|
96
|
+
size: UINT32_LE.get(buf, off),
|
|
97
|
+
flags: parseTagFlags(UINT32_LE.get(buf, off + 4))
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
function parseTagFlags(flags) {
|
|
102
|
+
return {
|
|
103
|
+
containsHeader: isBitSet(flags, 31),
|
|
104
|
+
containsFooter: isBitSet(flags, 30),
|
|
105
|
+
isHeader: isBitSet(flags, 29),
|
|
106
|
+
readOnly: isBitSet(flags, 0),
|
|
107
|
+
dataType: (flags & 6) >> 1
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* @param num {number}
|
|
112
|
+
* @param bit 0 is least significant bit (LSB)
|
|
113
|
+
* @return {boolean} true if bit is 1; otherwise false
|
|
114
|
+
*/
|
|
115
|
+
function isBitSet(num, bit) {
|
|
116
|
+
return (num & 1 << bit) !== 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region node_modules/.pnpm/music-metadata@11.11.2/node_modules/music-metadata/lib/apev2/APEv2Parser.js
|
|
121
|
+
var APEv2Parser_exports = /* @__PURE__ */ __exportAll({
|
|
122
|
+
APEv2Parser: () => APEv2Parser,
|
|
123
|
+
ApeContentError: () => ApeContentError,
|
|
124
|
+
tryParseApeHeader: () => tryParseApeHeader
|
|
125
|
+
});
|
|
126
|
+
var import_src = /* @__PURE__ */ __toESM(require_src(), 1);
|
|
127
|
+
const debug = (0, import_src.default)("music-metadata:parser:APEv2");
|
|
128
|
+
const tagFormat = "APEv2";
|
|
129
|
+
const preamble = "APETAGEX";
|
|
130
|
+
var ApeContentError = class extends makeUnexpectedFileContentError("APEv2") {};
|
|
131
|
+
function tryParseApeHeader(metadata, tokenizer, options) {
|
|
132
|
+
return new APEv2Parser(metadata, tokenizer, options).tryParseApeHeader();
|
|
133
|
+
}
|
|
134
|
+
var APEv2Parser = class APEv2Parser extends BasicParser {
|
|
135
|
+
constructor() {
|
|
136
|
+
super(...arguments);
|
|
137
|
+
this.ape = {};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Calculate the media file duration
|
|
141
|
+
* @param ah ApeHeader
|
|
142
|
+
* @return {number} duration in seconds
|
|
143
|
+
*/
|
|
144
|
+
static calculateDuration(ah) {
|
|
145
|
+
let duration = ah.totalFrames > 1 ? ah.blocksPerFrame * (ah.totalFrames - 1) : 0;
|
|
146
|
+
duration += ah.finalFrameBlocks;
|
|
147
|
+
return duration / ah.sampleRate;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Calculates the APEv1 / APEv2 first field offset
|
|
151
|
+
* @param tokenizer
|
|
152
|
+
* @param offset
|
|
153
|
+
*/
|
|
154
|
+
static async findApeFooterOffset(tokenizer, offset) {
|
|
155
|
+
const apeBuf = new Uint8Array(TagFooter.len);
|
|
156
|
+
const position = tokenizer.position;
|
|
157
|
+
if (offset <= TagFooter.len) {
|
|
158
|
+
debug(`Offset is too small to read APE footer: offset=${offset}`);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (offset > TagFooter.len) {
|
|
162
|
+
await tokenizer.readBuffer(apeBuf, { position: offset - TagFooter.len });
|
|
163
|
+
tokenizer.setPosition(position);
|
|
164
|
+
const tagFooter = TagFooter.get(apeBuf, 0);
|
|
165
|
+
if (tagFooter.ID === "APETAGEX") {
|
|
166
|
+
if (tagFooter.flags.isHeader) debug(`APE Header found at offset=${offset - TagFooter.len}`);
|
|
167
|
+
else {
|
|
168
|
+
debug(`APE Footer found at offset=${offset - TagFooter.len}`);
|
|
169
|
+
offset -= tagFooter.size;
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
footer: tagFooter,
|
|
173
|
+
offset
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
static parseTagFooter(metadata, buffer, options) {
|
|
179
|
+
const footer = TagFooter.get(buffer, buffer.length - TagFooter.len);
|
|
180
|
+
if (footer.ID !== preamble) throw new ApeContentError("Unexpected APEv2 Footer ID preamble value");
|
|
181
|
+
fromBuffer(buffer);
|
|
182
|
+
return new APEv2Parser(metadata, fromBuffer(buffer), options).parseTags(footer);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Parse APEv1 / APEv2 header if header signature found
|
|
186
|
+
*/
|
|
187
|
+
async tryParseApeHeader() {
|
|
188
|
+
if (this.tokenizer.fileInfo.size && this.tokenizer.fileInfo.size - this.tokenizer.position < TagFooter.len) {
|
|
189
|
+
debug("No APEv2 header found, end-of-file reached");
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const footer = await this.tokenizer.peekToken(TagFooter);
|
|
193
|
+
if (footer.ID === preamble) {
|
|
194
|
+
await this.tokenizer.ignore(TagFooter.len);
|
|
195
|
+
return this.parseTags(footer);
|
|
196
|
+
}
|
|
197
|
+
debug(`APEv2 header not found at offset=${this.tokenizer.position}`);
|
|
198
|
+
if (this.tokenizer.fileInfo.size) {
|
|
199
|
+
const remaining = this.tokenizer.fileInfo.size - this.tokenizer.position;
|
|
200
|
+
const buffer = new Uint8Array(remaining);
|
|
201
|
+
await this.tokenizer.readBuffer(buffer);
|
|
202
|
+
return APEv2Parser.parseTagFooter(this.metadata, buffer, this.options);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async parse() {
|
|
206
|
+
const descriptor = await this.tokenizer.readToken(DescriptorParser);
|
|
207
|
+
if (descriptor.ID !== "MAC ") throw new ApeContentError("Unexpected descriptor ID");
|
|
208
|
+
this.ape.descriptor = descriptor;
|
|
209
|
+
const lenExp = descriptor.descriptorBytes - DescriptorParser.len;
|
|
210
|
+
const header = await (lenExp > 0 ? this.parseDescriptorExpansion(lenExp) : this.parseHeader());
|
|
211
|
+
this.metadata.setAudioOnly();
|
|
212
|
+
await this.tokenizer.ignore(header.forwardBytes);
|
|
213
|
+
return this.tryParseApeHeader();
|
|
214
|
+
}
|
|
215
|
+
async parseTags(footer) {
|
|
216
|
+
const keyBuffer = new Uint8Array(256);
|
|
217
|
+
let bytesRemaining = footer.size - TagFooter.len;
|
|
218
|
+
debug(`Parse APE tags at offset=${this.tokenizer.position}, size=${bytesRemaining}`);
|
|
219
|
+
for (let i = 0; i < footer.fields; i++) {
|
|
220
|
+
if (bytesRemaining < TagItemHeader.len) {
|
|
221
|
+
this.metadata.addWarning(`APEv2 Tag-header: ${footer.fields - i} items remaining, but no more tag data to read.`);
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
const tagItemHeader = await this.tokenizer.readToken(TagItemHeader);
|
|
225
|
+
bytesRemaining -= TagItemHeader.len + tagItemHeader.size;
|
|
226
|
+
await this.tokenizer.peekBuffer(keyBuffer, { length: Math.min(keyBuffer.length, bytesRemaining) });
|
|
227
|
+
let zero = findZero(keyBuffer);
|
|
228
|
+
const key = await this.tokenizer.readToken(new StringType(zero, "ascii"));
|
|
229
|
+
await this.tokenizer.ignore(1);
|
|
230
|
+
bytesRemaining -= key.length + 1;
|
|
231
|
+
switch (tagItemHeader.flags.dataType) {
|
|
232
|
+
case DataType.text_utf8: {
|
|
233
|
+
const values = (await this.tokenizer.readToken(new StringType(tagItemHeader.size, "utf8"))).split(/\x00/g);
|
|
234
|
+
await Promise.all(values.map((val) => this.metadata.addTag(tagFormat, key, val)));
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
case DataType.binary:
|
|
238
|
+
if (this.options.skipCovers) await this.tokenizer.ignore(tagItemHeader.size);
|
|
239
|
+
else {
|
|
240
|
+
const picData = new Uint8Array(tagItemHeader.size);
|
|
241
|
+
await this.tokenizer.readBuffer(picData);
|
|
242
|
+
zero = findZero(picData);
|
|
243
|
+
const description = textDecode(picData.subarray(0, zero), "utf-8");
|
|
244
|
+
const data = picData.subarray(zero + 1);
|
|
245
|
+
await this.metadata.addTag(tagFormat, key, {
|
|
246
|
+
description,
|
|
247
|
+
data
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
break;
|
|
251
|
+
case DataType.external_info:
|
|
252
|
+
debug(`Ignore external info ${key}`);
|
|
253
|
+
await this.tokenizer.ignore(tagItemHeader.size);
|
|
254
|
+
break;
|
|
255
|
+
case DataType.reserved:
|
|
256
|
+
debug(`Ignore external info ${key}`);
|
|
257
|
+
this.metadata.addWarning(`APEv2 header declares a reserved datatype for "${key}"`);
|
|
258
|
+
await this.tokenizer.ignore(tagItemHeader.size);
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async parseDescriptorExpansion(lenExp) {
|
|
264
|
+
await this.tokenizer.ignore(lenExp);
|
|
265
|
+
return this.parseHeader();
|
|
266
|
+
}
|
|
267
|
+
async parseHeader() {
|
|
268
|
+
const header = await this.tokenizer.readToken(Header);
|
|
269
|
+
this.metadata.setFormat("lossless", true);
|
|
270
|
+
this.metadata.setFormat("container", "Monkey's Audio");
|
|
271
|
+
this.metadata.setFormat("bitsPerSample", header.bitsPerSample);
|
|
272
|
+
this.metadata.setFormat("sampleRate", header.sampleRate);
|
|
273
|
+
this.metadata.setFormat("numberOfChannels", header.channel);
|
|
274
|
+
this.metadata.setFormat("duration", APEv2Parser.calculateDuration(header));
|
|
275
|
+
if (!this.ape.descriptor) throw new ApeContentError("Missing APE descriptor");
|
|
276
|
+
return { forwardBytes: this.ape.descriptor.seekTableBytes + this.ape.descriptor.headerDataBytes + this.ape.descriptor.apeFrameDataBytes + this.ape.descriptor.terminatingDataBytes };
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
//#endregion
|
|
281
|
+
export { FourCcToken as i, APEv2Parser_exports as n, tryParseApeHeader as r, APEv2Parser as t };
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { i as __toESM, n as __exportAll } from "./chunk-BXK9XSlF.js";
|
|
2
|
+
import { A as textDecode, O as Uint8ArrayType, b as UINT16_LE, c as require_src, i as InternalParserError, j as textEncode, r as FieldDecodingError, s as makeUnexpectedFileContentError, t as BasicParser, v as StringType, w as UINT32_LE } from "./BasicParser-C4NikQiO.js";
|
|
3
|
+
import { r as fromBuffer } from "./lib-cO2jri71.js";
|
|
4
|
+
import { i as findZero, t as a2hex } from "./Util-BSeBJ8g_.js";
|
|
5
|
+
|
|
6
|
+
//#region node_modules/.pnpm/music-metadata@11.11.2/node_modules/music-metadata/lib/common/FourCC.js
|
|
7
|
+
const validFourCC = /^[\x21-\x7e©][\x20-\x7e\x00()]{3}/;
|
|
8
|
+
/**
|
|
9
|
+
* Token for read FourCC
|
|
10
|
+
* Ref: https://en.wikipedia.org/wiki/FourCC
|
|
11
|
+
*/
|
|
12
|
+
const FourCcToken = {
|
|
13
|
+
len: 4,
|
|
14
|
+
get: (buf, off) => {
|
|
15
|
+
const id = textDecode(buf.subarray(off, off + FourCcToken.len), "latin1");
|
|
16
|
+
if (!id.match(validFourCC)) throw new FieldDecodingError(`FourCC contains invalid characters: ${a2hex(id)} "${id}"`);
|
|
17
|
+
return id;
|
|
18
|
+
},
|
|
19
|
+
put: (buffer, offset, id) => {
|
|
20
|
+
const str = textEncode(id, "latin1");
|
|
21
|
+
if (str.length !== 4) throw new InternalParserError("Invalid length");
|
|
22
|
+
buffer.set(str, offset);
|
|
23
|
+
return offset + 4;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region node_modules/.pnpm/music-metadata@11.11.2/node_modules/music-metadata/lib/apev2/APEv2Token.js
|
|
29
|
+
const DataType = {
|
|
30
|
+
text_utf8: 0,
|
|
31
|
+
binary: 1,
|
|
32
|
+
external_info: 2,
|
|
33
|
+
reserved: 3
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* APE_DESCRIPTOR: defines the sizes (and offsets) of all the pieces, as well as the MD5 checksum
|
|
37
|
+
*/
|
|
38
|
+
const DescriptorParser = {
|
|
39
|
+
len: 52,
|
|
40
|
+
get: (buf, off) => {
|
|
41
|
+
return {
|
|
42
|
+
ID: FourCcToken.get(buf, off),
|
|
43
|
+
version: UINT32_LE.get(buf, off + 4) / 1e3,
|
|
44
|
+
descriptorBytes: UINT32_LE.get(buf, off + 8),
|
|
45
|
+
headerBytes: UINT32_LE.get(buf, off + 12),
|
|
46
|
+
seekTableBytes: UINT32_LE.get(buf, off + 16),
|
|
47
|
+
headerDataBytes: UINT32_LE.get(buf, off + 20),
|
|
48
|
+
apeFrameDataBytes: UINT32_LE.get(buf, off + 24),
|
|
49
|
+
apeFrameDataBytesHigh: UINT32_LE.get(buf, off + 28),
|
|
50
|
+
terminatingDataBytes: UINT32_LE.get(buf, off + 32),
|
|
51
|
+
fileMD5: new Uint8ArrayType(16).get(buf, off + 36)
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* APE_HEADER: describes all of the necessary information about the APE file
|
|
57
|
+
*/
|
|
58
|
+
const Header = {
|
|
59
|
+
len: 24,
|
|
60
|
+
get: (buf, off) => {
|
|
61
|
+
return {
|
|
62
|
+
compressionLevel: UINT16_LE.get(buf, off),
|
|
63
|
+
formatFlags: UINT16_LE.get(buf, off + 2),
|
|
64
|
+
blocksPerFrame: UINT32_LE.get(buf, off + 4),
|
|
65
|
+
finalFrameBlocks: UINT32_LE.get(buf, off + 8),
|
|
66
|
+
totalFrames: UINT32_LE.get(buf, off + 12),
|
|
67
|
+
bitsPerSample: UINT16_LE.get(buf, off + 16),
|
|
68
|
+
channel: UINT16_LE.get(buf, off + 18),
|
|
69
|
+
sampleRate: UINT32_LE.get(buf, off + 20)
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* APE Tag Header/Footer Version 2.0
|
|
75
|
+
* TAG: describes all the properties of the file [optional]
|
|
76
|
+
*/
|
|
77
|
+
const TagFooter = {
|
|
78
|
+
len: 32,
|
|
79
|
+
get: (buf, off) => {
|
|
80
|
+
return {
|
|
81
|
+
ID: new StringType(8, "ascii").get(buf, off),
|
|
82
|
+
version: UINT32_LE.get(buf, off + 8),
|
|
83
|
+
size: UINT32_LE.get(buf, off + 12),
|
|
84
|
+
fields: UINT32_LE.get(buf, off + 16),
|
|
85
|
+
flags: parseTagFlags(UINT32_LE.get(buf, off + 20))
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* APE Tag v2.0 Item Header
|
|
91
|
+
*/
|
|
92
|
+
const TagItemHeader = {
|
|
93
|
+
len: 8,
|
|
94
|
+
get: (buf, off) => {
|
|
95
|
+
return {
|
|
96
|
+
size: UINT32_LE.get(buf, off),
|
|
97
|
+
flags: parseTagFlags(UINT32_LE.get(buf, off + 4))
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
function parseTagFlags(flags) {
|
|
102
|
+
return {
|
|
103
|
+
containsHeader: isBitSet(flags, 31),
|
|
104
|
+
containsFooter: isBitSet(flags, 30),
|
|
105
|
+
isHeader: isBitSet(flags, 29),
|
|
106
|
+
readOnly: isBitSet(flags, 0),
|
|
107
|
+
dataType: (flags & 6) >> 1
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* @param num {number}
|
|
112
|
+
* @param bit 0 is least significant bit (LSB)
|
|
113
|
+
* @return {boolean} true if bit is 1; otherwise false
|
|
114
|
+
*/
|
|
115
|
+
function isBitSet(num, bit) {
|
|
116
|
+
return (num & 1 << bit) !== 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region node_modules/.pnpm/music-metadata@11.11.2/node_modules/music-metadata/lib/apev2/APEv2Parser.js
|
|
121
|
+
var APEv2Parser_exports = /* @__PURE__ */ __exportAll({
|
|
122
|
+
APEv2Parser: () => APEv2Parser,
|
|
123
|
+
ApeContentError: () => ApeContentError,
|
|
124
|
+
tryParseApeHeader: () => tryParseApeHeader
|
|
125
|
+
});
|
|
126
|
+
var import_src = /* @__PURE__ */ __toESM(require_src(), 1);
|
|
127
|
+
const debug = (0, import_src.default)("music-metadata:parser:APEv2");
|
|
128
|
+
const tagFormat = "APEv2";
|
|
129
|
+
const preamble = "APETAGEX";
|
|
130
|
+
var ApeContentError = class extends makeUnexpectedFileContentError("APEv2") {};
|
|
131
|
+
function tryParseApeHeader(metadata, tokenizer, options) {
|
|
132
|
+
return new APEv2Parser(metadata, tokenizer, options).tryParseApeHeader();
|
|
133
|
+
}
|
|
134
|
+
var APEv2Parser = class APEv2Parser extends BasicParser {
|
|
135
|
+
constructor() {
|
|
136
|
+
super(...arguments);
|
|
137
|
+
this.ape = {};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Calculate the media file duration
|
|
141
|
+
* @param ah ApeHeader
|
|
142
|
+
* @return {number} duration in seconds
|
|
143
|
+
*/
|
|
144
|
+
static calculateDuration(ah) {
|
|
145
|
+
let duration = ah.totalFrames > 1 ? ah.blocksPerFrame * (ah.totalFrames - 1) : 0;
|
|
146
|
+
duration += ah.finalFrameBlocks;
|
|
147
|
+
return duration / ah.sampleRate;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Calculates the APEv1 / APEv2 first field offset
|
|
151
|
+
* @param tokenizer
|
|
152
|
+
* @param offset
|
|
153
|
+
*/
|
|
154
|
+
static async findApeFooterOffset(tokenizer, offset) {
|
|
155
|
+
const apeBuf = new Uint8Array(TagFooter.len);
|
|
156
|
+
const position = tokenizer.position;
|
|
157
|
+
if (offset <= TagFooter.len) {
|
|
158
|
+
debug(`Offset is too small to read APE footer: offset=${offset}`);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (offset > TagFooter.len) {
|
|
162
|
+
await tokenizer.readBuffer(apeBuf, { position: offset - TagFooter.len });
|
|
163
|
+
tokenizer.setPosition(position);
|
|
164
|
+
const tagFooter = TagFooter.get(apeBuf, 0);
|
|
165
|
+
if (tagFooter.ID === "APETAGEX") {
|
|
166
|
+
if (tagFooter.flags.isHeader) debug(`APE Header found at offset=${offset - TagFooter.len}`);
|
|
167
|
+
else {
|
|
168
|
+
debug(`APE Footer found at offset=${offset - TagFooter.len}`);
|
|
169
|
+
offset -= tagFooter.size;
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
footer: tagFooter,
|
|
173
|
+
offset
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
static parseTagFooter(metadata, buffer, options) {
|
|
179
|
+
const footer = TagFooter.get(buffer, buffer.length - TagFooter.len);
|
|
180
|
+
if (footer.ID !== preamble) throw new ApeContentError("Unexpected APEv2 Footer ID preamble value");
|
|
181
|
+
fromBuffer(buffer);
|
|
182
|
+
return new APEv2Parser(metadata, fromBuffer(buffer), options).parseTags(footer);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Parse APEv1 / APEv2 header if header signature found
|
|
186
|
+
*/
|
|
187
|
+
async tryParseApeHeader() {
|
|
188
|
+
if (this.tokenizer.fileInfo.size && this.tokenizer.fileInfo.size - this.tokenizer.position < TagFooter.len) {
|
|
189
|
+
debug("No APEv2 header found, end-of-file reached");
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const footer = await this.tokenizer.peekToken(TagFooter);
|
|
193
|
+
if (footer.ID === preamble) {
|
|
194
|
+
await this.tokenizer.ignore(TagFooter.len);
|
|
195
|
+
return this.parseTags(footer);
|
|
196
|
+
}
|
|
197
|
+
debug(`APEv2 header not found at offset=${this.tokenizer.position}`);
|
|
198
|
+
if (this.tokenizer.fileInfo.size) {
|
|
199
|
+
const remaining = this.tokenizer.fileInfo.size - this.tokenizer.position;
|
|
200
|
+
const buffer = new Uint8Array(remaining);
|
|
201
|
+
await this.tokenizer.readBuffer(buffer);
|
|
202
|
+
return APEv2Parser.parseTagFooter(this.metadata, buffer, this.options);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async parse() {
|
|
206
|
+
const descriptor = await this.tokenizer.readToken(DescriptorParser);
|
|
207
|
+
if (descriptor.ID !== "MAC ") throw new ApeContentError("Unexpected descriptor ID");
|
|
208
|
+
this.ape.descriptor = descriptor;
|
|
209
|
+
const lenExp = descriptor.descriptorBytes - DescriptorParser.len;
|
|
210
|
+
const header = await (lenExp > 0 ? this.parseDescriptorExpansion(lenExp) : this.parseHeader());
|
|
211
|
+
this.metadata.setAudioOnly();
|
|
212
|
+
await this.tokenizer.ignore(header.forwardBytes);
|
|
213
|
+
return this.tryParseApeHeader();
|
|
214
|
+
}
|
|
215
|
+
async parseTags(footer) {
|
|
216
|
+
const keyBuffer = new Uint8Array(256);
|
|
217
|
+
let bytesRemaining = footer.size - TagFooter.len;
|
|
218
|
+
debug(`Parse APE tags at offset=${this.tokenizer.position}, size=${bytesRemaining}`);
|
|
219
|
+
for (let i = 0; i < footer.fields; i++) {
|
|
220
|
+
if (bytesRemaining < TagItemHeader.len) {
|
|
221
|
+
this.metadata.addWarning(`APEv2 Tag-header: ${footer.fields - i} items remaining, but no more tag data to read.`);
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
const tagItemHeader = await this.tokenizer.readToken(TagItemHeader);
|
|
225
|
+
bytesRemaining -= TagItemHeader.len + tagItemHeader.size;
|
|
226
|
+
await this.tokenizer.peekBuffer(keyBuffer, { length: Math.min(keyBuffer.length, bytesRemaining) });
|
|
227
|
+
let zero = findZero(keyBuffer);
|
|
228
|
+
const key = await this.tokenizer.readToken(new StringType(zero, "ascii"));
|
|
229
|
+
await this.tokenizer.ignore(1);
|
|
230
|
+
bytesRemaining -= key.length + 1;
|
|
231
|
+
switch (tagItemHeader.flags.dataType) {
|
|
232
|
+
case DataType.text_utf8: {
|
|
233
|
+
const values = (await this.tokenizer.readToken(new StringType(tagItemHeader.size, "utf8"))).split(/\x00/g);
|
|
234
|
+
await Promise.all(values.map((val) => this.metadata.addTag(tagFormat, key, val)));
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
case DataType.binary:
|
|
238
|
+
if (this.options.skipCovers) await this.tokenizer.ignore(tagItemHeader.size);
|
|
239
|
+
else {
|
|
240
|
+
const picData = new Uint8Array(tagItemHeader.size);
|
|
241
|
+
await this.tokenizer.readBuffer(picData);
|
|
242
|
+
zero = findZero(picData);
|
|
243
|
+
const description = textDecode(picData.subarray(0, zero), "utf-8");
|
|
244
|
+
const data = picData.subarray(zero + 1);
|
|
245
|
+
await this.metadata.addTag(tagFormat, key, {
|
|
246
|
+
description,
|
|
247
|
+
data
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
break;
|
|
251
|
+
case DataType.external_info:
|
|
252
|
+
debug(`Ignore external info ${key}`);
|
|
253
|
+
await this.tokenizer.ignore(tagItemHeader.size);
|
|
254
|
+
break;
|
|
255
|
+
case DataType.reserved:
|
|
256
|
+
debug(`Ignore external info ${key}`);
|
|
257
|
+
this.metadata.addWarning(`APEv2 header declares a reserved datatype for "${key}"`);
|
|
258
|
+
await this.tokenizer.ignore(tagItemHeader.size);
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async parseDescriptorExpansion(lenExp) {
|
|
264
|
+
await this.tokenizer.ignore(lenExp);
|
|
265
|
+
return this.parseHeader();
|
|
266
|
+
}
|
|
267
|
+
async parseHeader() {
|
|
268
|
+
const header = await this.tokenizer.readToken(Header);
|
|
269
|
+
this.metadata.setFormat("lossless", true);
|
|
270
|
+
this.metadata.setFormat("container", "Monkey's Audio");
|
|
271
|
+
this.metadata.setFormat("bitsPerSample", header.bitsPerSample);
|
|
272
|
+
this.metadata.setFormat("sampleRate", header.sampleRate);
|
|
273
|
+
this.metadata.setFormat("numberOfChannels", header.channel);
|
|
274
|
+
this.metadata.setFormat("duration", APEv2Parser.calculateDuration(header));
|
|
275
|
+
if (!this.ape.descriptor) throw new ApeContentError("Missing APE descriptor");
|
|
276
|
+
return { forwardBytes: this.ape.descriptor.seekTableBytes + this.ape.descriptor.headerDataBytes + this.ape.descriptor.apeFrameDataBytes + this.ape.descriptor.terminatingDataBytes };
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
//#endregion
|
|
281
|
+
export { FourCcToken as i, APEv2Parser_exports as n, tryParseApeHeader as r, APEv2Parser as t };
|