@maycombhq/atticus 2.0.0-beta.26 → 2.0.0-beta.27
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/bin.js +3 -3
- package/dist/chunk-22A2K555.js +653 -0
- package/dist/{chunk-UTZMF5CV.js → chunk-23TTURB2.js} +1 -1
- package/dist/{chunk-XIGVTH24.js → chunk-2666BPJE.js} +19 -19
- package/dist/{chunk-KFZ5IXEZ.js → chunk-2ALBHI4Q.js} +28 -27
- package/dist/chunk-2ANBMA74.js +107 -0
- package/dist/{chunk-UIYPX2BA.js → chunk-2HCW6HXK.js} +27 -26
- package/dist/{chunk-DJBXXYYA.js → chunk-2ISR6MWD.js} +15 -15
- package/dist/{chunk-ZDA72732.js → chunk-2MRYL45Z.js} +50 -9
- package/dist/{chunk-DB3NWAU3.js → chunk-3GNUHLAN.js} +4 -4
- package/dist/chunk-3GURU22K.js +44 -0
- package/dist/{chunk-UFIQ5FWY.js → chunk-3M3MDBOG.js} +1 -1
- package/dist/{chunk-DHQXCP2X.js → chunk-3PBIZBWN.js} +1 -1
- package/dist/{chunk-7IWMRZRI.js → chunk-3PWXVBCB.js} +83 -40
- package/dist/chunk-3W2QX6TT.js +58 -0
- package/dist/{chunk-H7CSCA73.js → chunk-3Z7ATALI.js} +5 -5
- package/dist/{chunk-ZGULQAPZ.js → chunk-44SWXDD7.js} +8 -5
- package/dist/{chunk-IEIHVMM6.js → chunk-46N5O5H7.js} +5 -5
- package/dist/{chunk-4DHYXODN.js → chunk-4D4DNTFE.js} +4 -4
- package/dist/{chunk-B3JHERXM.js → chunk-4EAT7HOX.js} +7 -5
- package/dist/{chunk-OH2OHNB5.js → chunk-4FLIW5PJ.js} +4 -4
- package/dist/{chunk-PGDVJWCI.js → chunk-4LWA5VMJ.js} +52 -37
- package/dist/{chunk-YWQZ7CCW.js → chunk-4ODVHNA6.js} +18 -17
- package/dist/{chunk-IH6BYFMH.js → chunk-4POSAXNC.js} +6 -6
- package/dist/{chunk-D5H3RZNE.js → chunk-4PQ4KDOA.js} +16 -15
- package/dist/{chunk-RQM5Y3HJ.js → chunk-4UVTNHA6.js} +1 -1
- package/dist/{chunk-KVVNAUIG.js → chunk-4XK3HLOH.js} +1 -0
- package/dist/{chunk-ZQGFZJH5.js → chunk-523NRKHF.js} +4 -4
- package/dist/{chunk-GJSLO2E2.js → chunk-5GCCG3GJ.js} +11 -5
- package/dist/{chunk-VGGSHDQU.js → chunk-5XW6RUDV.js} +8 -8
- package/dist/{chunk-K35VNKJH.js → chunk-5YEUAZZE.js} +8 -8
- package/dist/{chunk-YEHSJY6B.js → chunk-62LD7CSY.js} +13 -13
- package/dist/{chunk-DB6TDJ4T.js → chunk-67Y2J55V.js} +22 -21
- package/dist/{chunk-KL7UHAOR.js → chunk-6DSZ4CL7.js} +36 -21
- package/dist/{chunk-WM4EMP7T.js → chunk-6G67LSBG.js} +283 -61
- package/dist/{chunk-TLBPTUFU.js → chunk-6OEB4FTC.js} +20 -19
- package/dist/{chunk-GXJ2PSDW.js → chunk-6OTGCKYH.js} +9 -9
- package/dist/{chunk-EQMNMG6X.js → chunk-6XLCMDIP.js} +13 -13
- package/dist/chunk-76DZJTU7.js +190 -0
- package/dist/chunk-7764GVJK.js +37 -0
- package/dist/{chunk-KS2IQYTZ.js → chunk-7BOGXFZ3.js} +11 -11
- package/dist/{chunk-ZA2PWNR3.js → chunk-7CVHKNAF.js} +16 -15
- package/dist/{chunk-LBBI5P5G.js → chunk-7FEIS3KV.js} +25 -24
- package/dist/{chunk-OXCHO2QS.js → chunk-7GXM45T5.js} +26 -23
- package/dist/{chunk-YLXPJWNO.js → chunk-7YMAMNMT.js} +17 -16
- package/dist/chunk-7YWS47SE.js +56 -0
- package/dist/{chunk-LZFKJ2BR.js → chunk-A3LVMCA5.js} +1 -1
- package/dist/{chunk-PXDAGXQN.js → chunk-A7ZJKLFC.js} +11 -11
- package/dist/chunk-AANQC5QP.js +47 -0
- package/dist/{chunk-HV6PXXK7.js → chunk-AIQLTDC3.js} +3 -3
- package/dist/{chunk-PFWP624T.js → chunk-AKZTCZ6F.js} +4 -4
- package/dist/{chunk-KAWWXCPI.js → chunk-ALCSTVWQ.js} +3 -3
- package/dist/{chunk-7ZBYRMWK.js → chunk-ALUHO7SE.js} +26 -25
- package/dist/{chunk-3KP7OOJ4.js → chunk-AMZ4XMES.js} +8 -8
- package/dist/{chunk-V5ZKGBYL.js → chunk-AOQG37K4.js} +8 -6
- package/dist/{chunk-CNT6T2JM.js → chunk-ARXZTHEI.js} +16 -15
- package/dist/{chunk-KFJMQUSK.js → chunk-AS4CTARY.js} +16 -15
- package/dist/{chunk-MM7JSMLW.js → chunk-AVUPW23W.js} +18 -17
- package/dist/{chunk-NQDVD2YR.js → chunk-B56FCIEJ.js} +12 -12
- package/dist/{chunk-CPE7HLIK.js → chunk-BABATPOZ.js} +18 -17
- package/dist/{chunk-63572EFC.js → chunk-BIOKDLLX.js} +21 -19
- package/dist/{chunk-D4TW3PUO.js → chunk-BUBKKEUV.js} +5 -5
- package/dist/{chunk-FOOU5OJE.js → chunk-CDC6VECU.js} +3 -3
- package/dist/chunk-CHEFUNZ4.js +425 -0
- package/dist/{chunk-IL7PVMUO.js → chunk-CIFR3DPV.js} +6 -6
- package/dist/{chunk-DS5M2J2H.js → chunk-CLBVKD4P.js} +16 -15
- package/dist/{chunk-2FTHLB2H.js → chunk-CLM5Z3R5.js} +5 -5
- package/dist/{chunk-CFK6CFXM.js → chunk-CLYV5MB6.js} +9 -9
- package/dist/{chunk-KZ4I5M2X.js → chunk-CRYIBCGP.js} +37 -19
- package/dist/{chunk-PLSCWC2V.js → chunk-D3L5SO27.js} +5 -5
- package/dist/chunk-DAZM2INZ.js +34 -0
- package/dist/{chunk-I72PEROE.js → chunk-DF4BXBB2.js} +6 -6
- package/dist/{chunk-PZFZPHCT.js → chunk-E7Q52EOO.js} +11 -11
- package/dist/{chunk-R2FUFBHW.js → chunk-EFDUC35B.js} +3 -3
- package/dist/{chunk-43OWNS5N.js → chunk-EHXEJFHD.js} +5 -5
- package/dist/{chunk-HQMLY2R6.js → chunk-ELJ5Q4J2.js} +2 -2
- package/dist/{chunk-F4EGHECF.js → chunk-EM6DKBTJ.js} +3 -3
- package/dist/{chunk-UZBLVNW6.js → chunk-EMC46SU4.js} +38 -17
- package/dist/{chunk-F6GRBF5L.js → chunk-EQEDIWFQ.js} +25 -24
- package/dist/chunk-EW574EZI.js +57 -0
- package/dist/{chunk-HSJKYDHI.js → chunk-EYINWNXL.js} +5 -5
- package/dist/{chunk-KUEG2Y7M.js → chunk-EYVYHYCA.js} +8 -8
- package/dist/{chunk-ELR7DEQM.js → chunk-F66542M6.js} +34 -9
- package/dist/{chunk-RCLBIJRN.js → chunk-F74OMLNU.js} +6 -6
- package/dist/{chunk-PBDIVTFL.js → chunk-FADIWOA5.js} +3 -3
- package/dist/{chunk-LHN5UCXD.js → chunk-FC3ZVD3O.js} +3 -3
- package/dist/{chunk-DXLWZ3BJ.js → chunk-FG65LXED.js} +8 -8
- package/dist/{chunk-V5FT3MZG.js → chunk-FKAUBC4Y.js} +8 -8
- package/dist/{chunk-RBO4A7TC.js → chunk-FM3EEDS2.js} +15 -15
- package/dist/{chunk-TYN5SG5H.js → chunk-FS4E7F6O.js} +403 -148
- package/dist/{chunk-HVWPN2RY.js → chunk-FSYJPYLE.js} +16 -15
- package/dist/{chunk-IBIIKUC7.js → chunk-G33UIUG3.js} +46 -20
- package/dist/{chunk-4NWE2KY3.js → chunk-G3F4BYML.js} +15 -14
- package/dist/{chunk-2GT47PWU.js → chunk-GBJRFFDW.js} +5 -5
- package/dist/{chunk-NMURRF5F.js → chunk-GF6GBHFN.js} +13 -11
- package/dist/{chunk-C3TBDX7Y.js → chunk-GLHOUT5E.js} +26 -25
- package/dist/{chunk-ZWMHL346.js → chunk-GM6GXO2A.js} +20 -19
- package/dist/{chunk-MKUBDKE2.js → chunk-GSJ2RXE7.js} +29 -28
- package/dist/{chunk-YJBD5NDV.js → chunk-GT72FDER.js} +6 -6
- package/dist/{chunk-BEEHCL5O.js → chunk-GW6ZH77P.js} +37 -36
- package/dist/{chunk-BABRMZET.js → chunk-GZILYRGC.js} +3 -3
- package/dist/{chunk-5JGRF53S.js → chunk-GZSOZYEP.js} +3 -3
- package/dist/{chunk-IP6ARMZU.js → chunk-H25QNDKK.js} +58 -36
- package/dist/{chunk-BIAQ6NQS.js → chunk-H3RKW4RF.js} +7 -7
- package/dist/chunk-H7M7ZH6H.js +52 -0
- package/dist/chunk-H7NRWSMP.js +55 -0
- package/dist/{chunk-2JT4QV3Q.js → chunk-HDWVR5KD.js} +4 -4
- package/dist/{chunk-UAYU6K24.js → chunk-HG24EF5S.js} +16 -15
- package/dist/chunk-HPNYSY5M.js +1068 -0
- package/dist/{chunk-JJEXMHNZ.js → chunk-HUMM4S5I.js} +6 -6
- package/dist/{chunk-DARX3ATP.js → chunk-HVPS2YCW.js} +11 -11
- package/dist/{chunk-IGOE6KPG.js → chunk-I34CXV2C.js} +185 -11
- package/dist/{chunk-6U65YB54.js → chunk-I57IH5X6.js} +360 -271
- package/dist/{chunk-WYO4L4NU.js → chunk-I5X4WU7U.js} +6 -6
- package/dist/chunk-IAVVJ34R.js +55 -0
- package/dist/chunk-IBJE2E2S.js +51 -0
- package/dist/{chunk-HNNMT5L2.js → chunk-IF3X6FMO.js} +1 -1
- package/dist/{chunk-CUTMM4NY.js → chunk-IJHJIL6T.js} +154 -25
- package/dist/chunk-IM435QAM.js +72 -0
- package/dist/{chunk-MQ6HP2TU.js → chunk-IMBJ7WAO.js} +6 -6
- package/dist/{chunk-5A4RHEEL.js → chunk-INCFIDCB.js} +2 -2
- package/dist/{chunk-RTCZKKG7.js → chunk-IPMPLTEG.js} +3 -3
- package/dist/{chunk-QAFQLILX.js → chunk-IPSZDVLI.js} +12 -12
- package/dist/{chunk-JLTJAOO4.js → chunk-IX2EOYOU.js} +50 -13
- package/dist/{chunk-DOU52XFZ.js → chunk-IXNMGPF7.js} +61 -28
- package/dist/{chunk-XT3ZW7C7.js → chunk-J6GO3K7G.js} +19 -18
- package/dist/chunk-JBLM6IUA.js +42 -0
- package/dist/{chunk-CSHJZFOE.js → chunk-JL2VOYSL.js} +91 -93
- package/dist/{chunk-ACY3U2RD.js → chunk-JRXFZB6J.js} +8 -8
- package/dist/{chunk-P6EJNPFF.js → chunk-JTOLBS7R.js} +951 -409
- package/dist/{chunk-FYCN2Y5P.js → chunk-K73BHPTQ.js} +19 -18
- package/dist/{chunk-EVKDWJ5Y.js → chunk-KF7KVUNJ.js} +5 -5
- package/dist/{chunk-SRB54QGX.js → chunk-KKUCBKJE.js} +20 -19
- package/dist/{chunk-LTOBNBJ6.js → chunk-KLFFHBWG.js} +27 -26
- package/dist/{chunk-DXBXZNKV.js → chunk-KMYB2XO7.js} +21 -13
- package/dist/chunk-KNYQUWFN.js +52 -0
- package/dist/{chunk-6EMJ4XFC.js → chunk-KOAJPMU2.js} +31 -20
- package/dist/chunk-KRTSE73S.js +55 -0
- package/dist/{chunk-GAJBMPWC.js → chunk-L3AM5YRP.js} +28 -9
- package/dist/{chunk-YYV276DM.js → chunk-LCIIFAID.js} +22 -21
- package/dist/{chunk-SZDOBIWE.js → chunk-LCQIRCOT.js} +55 -10
- package/dist/{chunk-OI32KTDM.js → chunk-LFHBAWIM.js} +13 -13
- package/dist/chunk-LIHEMWIT.js +39 -0
- package/dist/{chunk-CG6MG7SE.js → chunk-LJLYWILK.js} +14 -14
- package/dist/{chunk-6SIGGA37.js → chunk-LNJKDS5C.js} +26 -25
- package/dist/{chunk-3GEAUW62.js → chunk-LTHY7E2P.js} +16 -15
- package/dist/{chunk-RO6BE7ZS.js → chunk-LTVOQJKT.js} +7 -7
- package/dist/{chunk-BD7HBZLP.js → chunk-LZO3JABE.js} +6 -6
- package/dist/{chunk-PXMV2LLY.js → chunk-M65AZ4ZE.js} +3 -5
- package/dist/chunk-MPNTEWNY.js +492 -0
- package/dist/chunk-MQGQ3AWK.js +58 -0
- package/dist/{chunk-ZNYSBQIA.js → chunk-MUXYUIBV.js} +6 -6
- package/dist/{chunk-CNEOKSTO.js → chunk-MWRRJDXQ.js} +34 -31
- package/dist/{chunk-VJO7M34N.js → chunk-MZDHFWTN.js} +2 -2
- package/dist/chunk-N2XCT5OX.js +68 -0
- package/dist/{chunk-2IO6XH37.js → chunk-N3JGYAMD.js} +15 -15
- package/dist/{chunk-K3QKOVZN.js → chunk-N5DLB74D.js} +367 -71
- package/dist/{chunk-H5BIVULF.js → chunk-NC3Q7RIB.js} +10 -10
- package/dist/{chunk-HVOE7ZW2.js → chunk-NCNLX4DL.js} +19 -18
- package/dist/{chunk-3D74UADA.js → chunk-NGSGJLKW.js} +2 -2
- package/dist/{chunk-B7KGNEFI.js → chunk-NN7K2LLN.js} +25 -24
- package/dist/{chunk-76AHTJVY.js → chunk-NNURP7VO.js} +15 -15
- package/dist/chunk-NSQB24WR.js +56 -0
- package/dist/{chunk-GFFTVQ7R.js → chunk-NV5S63YK.js} +7 -7
- package/dist/{chunk-CTJHEG6A.js → chunk-NWMFVPEP.js} +2 -0
- package/dist/{chunk-7JZONWAA.js → chunk-NYT6QGZA.js} +22 -18
- package/dist/chunk-OB2DAIJX.js +62 -0
- package/dist/{chunk-IZIGZ7KY.js → chunk-OC3OXDTG.js} +13 -8
- package/dist/{chunk-2XIIUXGX.js → chunk-OD6RNYMQ.js} +16 -16
- package/dist/{chunk-723OQZ3N.js → chunk-OFYBRMRG.js} +6 -6
- package/dist/chunk-OGTELPDN.js +43 -0
- package/dist/{chunk-E5NHFHGC.js → chunk-OQ7SBQ2Z.js} +7 -7
- package/dist/{chunk-6TZ4YRGJ.js → chunk-OUDGBJC2.js} +16 -9
- package/dist/{chunk-W4SMKUAK.js → chunk-OUGTAOGA.js} +2 -2
- package/dist/chunk-OWP5FCYM.js +60 -0
- package/dist/{chunk-ET7SPOBA.js → chunk-P36PTWBM.js} +8 -8
- package/dist/{chunk-64LSDT3D.js → chunk-P6Y2J2QY.js} +12 -12
- package/dist/{chunk-ANFBBJEV.js → chunk-PDJL2HO5.js} +24 -22
- package/dist/{chunk-UXVKFOMC.js → chunk-PPKH6ULR.js} +152 -20
- package/dist/{chunk-WLA2JZ2K.js → chunk-Q4PFF2ZE.js} +8 -8
- package/dist/chunk-Q7EUPQEG.js +5 -0
- package/dist/{chunk-2HDNOUJU.js → chunk-QC6GSNIK.js} +7055 -3456
- package/dist/chunk-QCRQNYGI.js +211 -0
- package/dist/chunk-QDF533AW.js +90 -0
- package/dist/chunk-QDGNDNBG.js +50 -0
- package/dist/{chunk-HWPX3T55.js → chunk-QGMD3PYL.js} +31 -24
- package/dist/{chunk-VCXFMXMX.js → chunk-QLT3WYTD.js} +6 -6
- package/dist/{chunk-ZFLBWL2G.js → chunk-QNDMAKQS.js} +11 -3
- package/dist/{chunk-UWBPC5XH.js → chunk-QNXMVJMA.js} +8 -8
- package/dist/{chunk-XDLMQL5A.js → chunk-QPAANKUR.js} +7 -7
- package/dist/{chunk-BGOAJFPB.js → chunk-QS4VX3HZ.js} +1 -1
- package/dist/{chunk-YIOYKA4V.js → chunk-QSM4K6LI.js} +7 -7
- package/dist/{chunk-TPKJD42W.js → chunk-QUFZDWPC.js} +8 -8
- package/dist/{chunk-QXCGRQGO.js → chunk-QXXEOH3A.js} +18 -6
- package/dist/{chunk-QA4O2GGC.js → chunk-R4TUWD4C.js} +17 -1
- package/dist/{chunk-UJ5ZJS4B.js → chunk-ROI64BAI.js} +22 -21
- package/dist/{chunk-LCRQPWTC.js → chunk-RPVL3RTX.js} +19 -18
- package/dist/{chunk-QQAWI5LD.js → chunk-RUNHVUCW.js} +16 -15
- package/dist/{chunk-7AEB74KW.js → chunk-RWYPLODE.js} +9 -9
- package/dist/{chunk-VTR4AC2U.js → chunk-RZYRUXSU.js} +4 -4
- package/dist/{chunk-CWLXVRFH.js → chunk-S6TLXRBR.js} +7 -7
- package/dist/{chunk-Z33UNTHI.js → chunk-SCOP3J6X.js} +7 -7
- package/dist/{chunk-XEWFVHOT.js → chunk-SCP24MJX.js} +24 -23
- package/dist/{chunk-MCORC2LG.js → chunk-SF3HXNXR.js} +6 -6
- package/dist/{chunk-BSZII65X.js → chunk-SFCFL7Y5.js} +1 -1
- package/dist/{chunk-LY7DOYX2.js → chunk-SHFY73RI.js} +53 -112
- package/dist/{chunk-IERXBWQU.js → chunk-SHIARIEZ.js} +20 -19
- package/dist/chunk-SMFFUFMN.js +1876 -0
- package/dist/{chunk-WH3ZFLXT.js → chunk-SVOGRJO6.js} +197 -124
- package/dist/chunk-SVZAAOHJ.js +46 -0
- package/dist/{chunk-NCZS2BN2.js → chunk-SZOU32VF.js} +21 -20
- package/dist/{chunk-MTIRNHRJ.js → chunk-T2MN24LZ.js} +1 -1
- package/dist/{chunk-KZH5YV6J.js → chunk-TD5WWJLN.js} +6 -6
- package/dist/{chunk-UBEFT3MQ.js → chunk-TFN2N227.js} +6 -6
- package/dist/{chunk-BIKMME4S.js → chunk-TFXNOQEU.js} +28 -27
- package/dist/{chunk-6P67IUET.js → chunk-TMETWJFO.js} +11 -11
- package/dist/chunk-TNSAIISO.js +50 -0
- package/dist/{chunk-SDHGFMES.js → chunk-TRJO2I4S.js} +3 -3
- package/dist/{chunk-NVVEVP5O.js → chunk-TRSNIJNM.js} +7 -7
- package/dist/{chunk-VIQHZA53.js → chunk-U3Z2QZE3.js} +6 -6
- package/dist/{chunk-TQG2DDWH.js → chunk-U7L3ORPK.js} +22 -21
- package/dist/{chunk-3KIMLBGZ.js → chunk-UDM6HGF4.js} +6 -6
- package/dist/{chunk-NMCPIYTF.js → chunk-UDM7LXNJ.js} +7 -7
- package/dist/chunk-UDTO3U6E.js +35 -0
- package/dist/{chunk-ZFEOIYK5.js → chunk-UEUPEUZX.js} +3 -3
- package/dist/chunk-UWBODTY7.js +514 -0
- package/dist/{chunk-BIWNRS5I.js → chunk-UYYYQTPD.js} +78 -47
- package/dist/{chunk-IDRCBMJF.js → chunk-V34N6JAN.js} +32 -31
- package/dist/{chunk-EY3OVHNC.js → chunk-V3Y5P7OS.js} +24 -23
- package/dist/chunk-V6MLVGTP.js +89 -0
- package/dist/{chunk-EECFUQP3.js → chunk-VC2XHC7P.js} +184 -46
- package/dist/{chunk-H26T2LQL.js → chunk-VCYE4MUD.js} +29 -28
- package/dist/{chunk-EUTZTJIO.js → chunk-VN2VJ6BV.js} +19 -15
- package/dist/{chunk-P6DM2EFI.js → chunk-VVLWEM2Y.js} +6 -6
- package/dist/{chunk-YXKCE5BA.js → chunk-VWCNMDMZ.js} +5 -5
- package/dist/{chunk-BV2BZIUF.js → chunk-W2A4NHQD.js} +25 -24
- package/dist/{chunk-VPQUFIE7.js → chunk-W6OY2PMB.js} +10 -10
- package/dist/{chunk-FIZ5LYL2.js → chunk-WC6DHBVG.js} +16 -15
- package/dist/{chunk-GHST3KAB.js → chunk-WCA3WIGG.js} +5 -5
- package/dist/{chunk-6ZDAEUKB.js → chunk-WJWSB65O.js} +1602 -452
- package/dist/{chunk-IFQJ3YQE.js → chunk-WNPGLGCJ.js} +5 -5
- package/dist/chunk-WTOVWEY3.js +67 -0
- package/dist/{chunk-XIJBQM45.js → chunk-X5B7KYPD.js} +507 -20
- package/dist/{chunk-ZLBUFK7L.js → chunk-X73WLHSN.js} +7 -7
- package/dist/{chunk-GNFZ227W.js → chunk-XIIT4PVT.js} +3 -3
- package/dist/{chunk-U3JXMY56.js → chunk-XLTT5QCX.js} +28 -25
- package/dist/{chunk-5UIGGXA5.js → chunk-XMIS25ZJ.js} +21 -20
- package/dist/{chunk-IYEET4VM.js → chunk-XPDQ4T6G.js} +27 -26
- package/dist/{chunk-WT6EXYEY.js → chunk-XRWUYOX3.js} +138 -22
- package/dist/{chunk-I2EWY3MG.js → chunk-XZY4GTCX.js} +14 -9
- package/dist/{chunk-2SCZZQNQ.js → chunk-Y2TVTI4P.js} +121 -15
- package/dist/{chunk-Q3RKXK5Z.js → chunk-Y2U4CSCA.js} +28 -27
- package/dist/chunk-Y2U63JKE.js +41 -0
- package/dist/{chunk-V3M4VFUB.js → chunk-Y6S7VCYN.js} +6 -6
- package/dist/{chunk-SAPX3PVK.js → chunk-YAPMGK7E.js} +11 -11
- package/dist/{chunk-MY3LDBMR.js → chunk-YAPVAYZN.js} +3 -3
- package/dist/{chunk-ZYLGEWTC.js → chunk-YCBDNWX3.js} +78 -57
- package/dist/{chunk-RK5P2DWD.js → chunk-YIGSUTW2.js} +1329 -92
- package/dist/{chunk-XI3GPYP4.js → chunk-YJTBE6AJ.js} +5 -5
- package/dist/chunk-YQ3IXQIH.js +185 -0
- package/dist/{chunk-MZXDSAKW.js → chunk-YRHKEXTP.js} +11 -11
- package/dist/{chunk-DPH4BS3F.js → chunk-YSSFS3YC.js} +17 -17
- package/dist/{chunk-ISCX25D7.js → chunk-YXG2VQJJ.js} +200 -56
- package/dist/{chunk-VUSYN4R4.js → chunk-Z4GLFTEH.js} +8 -8
- package/dist/{chunk-NP3PG6OI.js → chunk-Z65FWO6A.js} +157 -89
- package/dist/{chunk-KJD4DLRZ.js → chunk-ZDG637ZT.js} +22 -21
- package/dist/{chunk-DASVVML7.js → chunk-ZIAMPN7N.js} +6 -6
- package/dist/chunk-ZIIBQHCX.js +53 -0
- package/dist/{chunk-IJN5PSDU.js → chunk-ZJJMYPGZ.js} +57 -27
- package/dist/{chunk-NECDBPFP.js → chunk-ZOAX7W5S.js} +11 -11
- package/dist/chunk-ZSSR5GGB.js +48 -0
- package/dist/files.json +657 -553
- package/dist/fixtures/forge/expected/crosscheck.json +726 -0
- package/dist/fixtures/forge/slots/README.md +13 -0
- package/dist/fixtures/forge/slots/build.json +2686 -0
- package/dist/fixtures/forge/slots/crosscheck/forge-ledger.crosscheck.yaml +8 -0
- package/dist/fixtures/forge/slots/facts/forge-ledger.jsonl +17 -0
- package/dist/fixtures/forge/slots/facts/forge-ledger.meta.json +9 -0
- package/dist/fixtures/forge/slots/legacy/joins.json +113 -0
- package/dist/fixtures/forge/slots/readers/forge-events.json +306 -0
- package/dist/fixtures/forge/slots/readers/forge-gateway.json +238 -0
- package/dist/fixtures/forge/slots/readers/forge-infra.json +264 -0
- package/dist/fixtures/forge/slots/readers/forge-ledger.json +756 -0
- package/dist/fixtures/forge/slots/readers/forge-portal-bff.json +349 -0
- package/dist/fixtures/forge/slots/readers/forge-portal-ui.json +214 -0
- package/dist/fixtures/forge/slots/readers/forge-reports-job.json +258 -0
- package/dist/packages/sdk/npm/index.js +3788 -2939
- package/dist/packages/ui/dist/assets/{elk-api-BdXSPeBO.js → elk-api-CPE6PVL8.js} +2 -2
- package/dist/packages/ui/dist/assets/index-BYcVqj0l.js +65 -0
- package/dist/packages/ui/dist/assets/index-DF52Ejvz.css +1 -0
- package/dist/packages/ui/dist/index.html +2 -2
- package/package.json +4 -4
- package/dist/chunk-24OXGB3P.js +0 -82
- package/dist/chunk-3FFIDQQB.js +0 -42
- package/dist/chunk-4N5W7LYW.js +0 -41
- package/dist/chunk-7NVLGPER.js +0 -45
- package/dist/chunk-A6LGX56J.js +0 -52
- package/dist/chunk-AHACUPGL.js +0 -46
- package/dist/chunk-DG7KYZAL.js +0 -40
- package/dist/chunk-DWD6BKHG.js +0 -52
- package/dist/chunk-EEVSFGIU.js +0 -50
- package/dist/chunk-EN3N6LNU.js +0 -52
- package/dist/chunk-FWQDH5NK.js +0 -55
- package/dist/chunk-GHCFWIUW.js +0 -38
- package/dist/chunk-GSIJWDXH.js +0 -43
- package/dist/chunk-HCC5547C.js +0 -232
- package/dist/chunk-HLDUWEO7.js +0 -36
- package/dist/chunk-K2NQTROJ.js +0 -170
- package/dist/chunk-LH4WAJLC.js +0 -45
- package/dist/chunk-M5IQUWJR.js +0 -59
- package/dist/chunk-MEMEO7YO.js +0 -988
- package/dist/chunk-MGNO4Q6V.js +0 -51
- package/dist/chunk-MZ6GOFRF.js +0 -55
- package/dist/chunk-N2AW2DHF.js +0 -51
- package/dist/chunk-N35Y5HZO.js +0 -47
- package/dist/chunk-NHFMLMLN.js +0 -257
- package/dist/chunk-PR6Z5L7W.js +0 -67
- package/dist/chunk-STBJ6SVJ.js +0 -50
- package/dist/chunk-U3RGBYXE.js +0 -62
- package/dist/chunk-URZKIL37.js +0 -42
- package/dist/chunk-W7HNZDHB.js +0 -71
- package/dist/chunk-YYZWSVIS.js +0 -33
- package/dist/chunk-ZAMSF2DF.js +0 -54
- package/dist/packages/ui/dist/assets/index-DRSUhpFi.css +0 -1
- package/dist/packages/ui/dist/assets/index-RZe5iotJ.js +0 -63
package/dist/bin.js
CHANGED
|
@@ -6,7 +6,7 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
|
|
|
6
6
|
var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
|
|
7
7
|
import {
|
|
8
8
|
VERSION
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-T2MN24LZ.js";
|
|
10
10
|
import "./chunk-TV45EUGM.js";
|
|
11
11
|
|
|
12
12
|
// packages/cli/dist/bin.js
|
|
@@ -25,7 +25,7 @@ else if ((await import("./chunk-QBNWF5ZU.js")).nodeTooOld(process.versions.node)
|
|
|
25
25
|
process.exitCode = 1;
|
|
26
26
|
} else {
|
|
27
27
|
if (process.env.ATTICUS_MAX_OLD_SPACE) {
|
|
28
|
-
const { reExecForMemory } = await import("./chunk-
|
|
28
|
+
const { reExecForMemory } = await import("./chunk-VWCNMDMZ.js");
|
|
29
29
|
const again = reExecForMemory(process.env, process.execArgv);
|
|
30
30
|
if (again) {
|
|
31
31
|
const { spawnSync } = await import("node:child_process");
|
|
@@ -33,7 +33,7 @@ else if ((await import("./chunk-QBNWF5ZU.js")).nodeTooOld(process.versions.node)
|
|
|
33
33
|
process.exit(r.status ?? 1);
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
const { main } = await import("./chunk-
|
|
36
|
+
const { main } = await import("./chunk-FS4E7F6O.js");
|
|
37
37
|
await main(
|
|
38
38
|
argv,
|
|
39
39
|
{
|
|
@@ -0,0 +1,653 @@
|
|
|
1
|
+
import { createRequire as __atticusCreateRequire } from "node:module";
|
|
2
|
+
import { fileURLToPath as __atticusFileURLToPath } from "node:url";
|
|
3
|
+
var require = __atticusCreateRequire(import.meta.url);
|
|
4
|
+
var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
|
|
5
|
+
var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
|
|
6
|
+
import {
|
|
7
|
+
buildPlanOf,
|
|
8
|
+
pageChanged,
|
|
9
|
+
prunePlanHash,
|
|
10
|
+
undoPlanHash
|
|
11
|
+
} from "./chunk-QCRQNYGI.js";
|
|
12
|
+
import {
|
|
13
|
+
UPGRADE_UNDONE,
|
|
14
|
+
applyUndo,
|
|
15
|
+
baselineTarget,
|
|
16
|
+
buildAndWrite,
|
|
17
|
+
buildCatalog,
|
|
18
|
+
buildLines,
|
|
19
|
+
filesUnder,
|
|
20
|
+
generatedBeforeUpgradeDirOf,
|
|
21
|
+
guardBuild,
|
|
22
|
+
listUndo,
|
|
23
|
+
loadBuildInputs,
|
|
24
|
+
planUndo,
|
|
25
|
+
readBuildManifest,
|
|
26
|
+
takeUndoCopy,
|
|
27
|
+
undoDirOf,
|
|
28
|
+
undoHandEdits,
|
|
29
|
+
writeCuratedEdits
|
|
30
|
+
} from "./chunk-QC6GSNIK.js";
|
|
31
|
+
import "./chunk-YIGSUTW2.js";
|
|
32
|
+
import "./chunk-N5DLB74D.js";
|
|
33
|
+
import {
|
|
34
|
+
sha256Of
|
|
35
|
+
} from "./chunk-UWBODTY7.js";
|
|
36
|
+
import {
|
|
37
|
+
gitUser
|
|
38
|
+
} from "./chunk-X5B7KYPD.js";
|
|
39
|
+
import "./chunk-IPSZDVLI.js";
|
|
40
|
+
import "./chunk-2MRYL45Z.js";
|
|
41
|
+
import "./chunk-ELJ5Q4J2.js";
|
|
42
|
+
import "./chunk-XZY4GTCX.js";
|
|
43
|
+
import "./chunk-3M3MDBOG.js";
|
|
44
|
+
import {
|
|
45
|
+
catalogDirOf,
|
|
46
|
+
deserializeRecord,
|
|
47
|
+
parseRecord,
|
|
48
|
+
recordPath,
|
|
49
|
+
serializeRecord
|
|
50
|
+
} from "./chunk-WJWSB65O.js";
|
|
51
|
+
import {
|
|
52
|
+
LockHeldError,
|
|
53
|
+
acquireLock,
|
|
54
|
+
writeFileAtomic
|
|
55
|
+
} from "./chunk-SMFFUFMN.js";
|
|
56
|
+
import {
|
|
57
|
+
cmpText
|
|
58
|
+
} from "./chunk-A3LVMCA5.js";
|
|
59
|
+
import "./chunk-NWMFVPEP.js";
|
|
60
|
+
import "./chunk-BQGDB6ZL.js";
|
|
61
|
+
import "./chunk-R4TUWD4C.js";
|
|
62
|
+
import "./chunk-TV45EUGM.js";
|
|
63
|
+
|
|
64
|
+
// packages/cli/dist/catalog-build-commands.js
|
|
65
|
+
import { existsSync } from "node:fs";
|
|
66
|
+
import { mkdir, readdir, readFile, rm } from "node:fs/promises";
|
|
67
|
+
import { dirname, join, relative, sep } from "node:path";
|
|
68
|
+
var posix = (p) => p.split(sep).join("/");
|
|
69
|
+
var listHooks = {};
|
|
70
|
+
async function afterListed() {
|
|
71
|
+
const hook = listHooks.afterList;
|
|
72
|
+
listHooks.afterList = void 0;
|
|
73
|
+
await hook?.();
|
|
74
|
+
}
|
|
75
|
+
async function locked(root, what, io, run) {
|
|
76
|
+
await afterListed();
|
|
77
|
+
let lock;
|
|
78
|
+
try {
|
|
79
|
+
lock = await acquireLock(root, "scan", what);
|
|
80
|
+
} catch (e) {
|
|
81
|
+
if (e instanceof LockHeldError) {
|
|
82
|
+
io.err(e.message);
|
|
83
|
+
return 1;
|
|
84
|
+
}
|
|
85
|
+
throw e;
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
return await run();
|
|
89
|
+
} finally {
|
|
90
|
+
await lock.release();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function buildJson(r) {
|
|
94
|
+
return {
|
|
95
|
+
written: r.write !== void 0,
|
|
96
|
+
files: r.write ? { written: r.write.written, unchanged: r.write.unchanged, removed: r.write.removed } : null,
|
|
97
|
+
slots: r.write?.slots ?? [],
|
|
98
|
+
sources: r.build.sources,
|
|
99
|
+
removed: (r.write?.removals ?? []).map((x) => ({
|
|
100
|
+
kind: x.kind,
|
|
101
|
+
id: x.id,
|
|
102
|
+
repos: x.repos,
|
|
103
|
+
explainedBy: x.explainedBy,
|
|
104
|
+
reasons: x.reasons
|
|
105
|
+
})),
|
|
106
|
+
retired: r.build.retired,
|
|
107
|
+
orphaned: r.build.orphaned,
|
|
108
|
+
orphanedDecisions: r.build.orphanedDecisions,
|
|
109
|
+
...r.write?.undo !== void 0 ? { undo: r.write.undo } : {},
|
|
110
|
+
...r.guard.refused ? { refused: r.guard.refused } : {}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function refusalHint(r, command) {
|
|
114
|
+
if (r.reasons.includes("not-upgraded"))
|
|
115
|
+
return "This catalog was written before beta.27: run atticus upgrade (it shows what it would do; atticus upgrade --yes applies it).";
|
|
116
|
+
if (r.reasons.includes("hand-edits"))
|
|
117
|
+
return `Files under catalog/generated were changed by hand. Make them curated: atticus catalog edits --curate, or discard them: ${command} --discard-edits ${r.discardEdits ?? 0}.`;
|
|
118
|
+
if (r.reasons.includes("unexplained-removals"))
|
|
119
|
+
return "The build would remove records nothing explains (a bug): nothing was written. The list is in the command's output.";
|
|
120
|
+
if (r.reasons.includes("large-removals"))
|
|
121
|
+
return `The build would remove ${r.allowRemovals ?? 0} records, more than the limit: confirm exactly these with ${command} --allow-removals ${r.allowRemovals ?? 0}.`;
|
|
122
|
+
if (r.reasons.includes("empty"))
|
|
123
|
+
return "The build has no record from any repo's code, so the catalog is left as it was.";
|
|
124
|
+
return r.message.split("\n")[0] ?? "Nothing written.";
|
|
125
|
+
}
|
|
126
|
+
function refuseChanged(io, json, message) {
|
|
127
|
+
io.err(message);
|
|
128
|
+
if (json)
|
|
129
|
+
io.out(JSON.stringify({ refused: { reasons: ["changed"], message } }, null, 2));
|
|
130
|
+
return 1;
|
|
131
|
+
}
|
|
132
|
+
async function catalogBuild(root, o, io) {
|
|
133
|
+
const command = "atticus catalog build";
|
|
134
|
+
const run = async () => {
|
|
135
|
+
let build;
|
|
136
|
+
if (o.plan !== void 0 && !o.check) {
|
|
137
|
+
const listed = await buildAndWrite(root, { command, check: true });
|
|
138
|
+
if (buildPlanOf(listed.guard) !== o.plan)
|
|
139
|
+
return refuseChanged(io, o.json, pageChanged("what the build would remove or discard"));
|
|
140
|
+
build = listed.build;
|
|
141
|
+
}
|
|
142
|
+
const r = await buildAndWrite(root, {
|
|
143
|
+
command,
|
|
144
|
+
...build ? { build } : {},
|
|
145
|
+
...o.check ? { check: true } : {},
|
|
146
|
+
...o.allowRemovals !== void 0 ? { allowRemovals: o.allowRemovals } : {},
|
|
147
|
+
...o.discardEdits !== void 0 ? { discardEdits: o.discardEdits } : {}
|
|
148
|
+
});
|
|
149
|
+
if (o.check) {
|
|
150
|
+
if (o.json)
|
|
151
|
+
io.out(JSON.stringify({ upToDate: r.upToDate, sources: r.build.sources }, null, 2));
|
|
152
|
+
else
|
|
153
|
+
io.out(r.upToDate ? "catalog/generated is what the slots and inputs build." : "catalog/generated isn't what the slots and inputs build: run atticus catalog build.");
|
|
154
|
+
return r.upToDate ? 0 : 1;
|
|
155
|
+
}
|
|
156
|
+
if (o.json)
|
|
157
|
+
io.out(JSON.stringify(buildJson(r), null, 2));
|
|
158
|
+
else {
|
|
159
|
+
for (const s of r.build.sources)
|
|
160
|
+
io.out(`${s.repo}: ${s.source === "none" ? "no slot yet" : `${s.source}${s.commit ? ` at ${s.commit.slice(0, 7)}` : ""}`}`);
|
|
161
|
+
for (const l of buildLines(root, r))
|
|
162
|
+
(r.guard.refused ? io.err : io.out)(l);
|
|
163
|
+
}
|
|
164
|
+
for (const p of r.build.problems)
|
|
165
|
+
if (!o.json)
|
|
166
|
+
io.err(`${p.repo ? `${p.repo}: ` : ""}${p.source}: ${p.message}`);
|
|
167
|
+
return r.guard.refused ? 1 : 0;
|
|
168
|
+
};
|
|
169
|
+
const code = o.check ? await run() : await locked(root, command, io, run);
|
|
170
|
+
return code;
|
|
171
|
+
}
|
|
172
|
+
function undoneRenames(copies) {
|
|
173
|
+
return netRenames(copies.map((c) => c.command)).map(({ from, to }) => ({
|
|
174
|
+
from,
|
|
175
|
+
to,
|
|
176
|
+
message: renameUndone(from, to)
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
function netRenames(commandsNewestFirst) {
|
|
180
|
+
const chain = [];
|
|
181
|
+
for (const command of [...commandsNewestFirst].reverse()) {
|
|
182
|
+
const m = /^atticus repo rename (\S+) (\S+)(?: |$)/.exec(command);
|
|
183
|
+
if (!m)
|
|
184
|
+
continue;
|
|
185
|
+
const [, from, to] = m;
|
|
186
|
+
const was = chain.find((r) => r.to === from);
|
|
187
|
+
if (was)
|
|
188
|
+
was.to = to;
|
|
189
|
+
else
|
|
190
|
+
chain.push({ from, to });
|
|
191
|
+
}
|
|
192
|
+
return chain.filter((r) => r.from !== r.to);
|
|
193
|
+
}
|
|
194
|
+
var renameUndone = (from, to) => `This undoes the rename's build, not the rename: the manifest still names ${to}. Rename back with atticus repo rename ${to} ${from} to read the old slot again.`;
|
|
195
|
+
async function catalogUndo(root, o, io) {
|
|
196
|
+
const undoDir = await undoDirOf(root);
|
|
197
|
+
const list = await listUndo(undoDir);
|
|
198
|
+
const plan = await planUndo(undoDir, o.n);
|
|
199
|
+
if ("problem" in plan) {
|
|
200
|
+
if (o.json)
|
|
201
|
+
io.out(JSON.stringify({ copies: list, problem: plan.problem }, null, 2));
|
|
202
|
+
else
|
|
203
|
+
io.err(plan.problem);
|
|
204
|
+
return 1;
|
|
205
|
+
}
|
|
206
|
+
const renames = undoneRenames(plan.copies);
|
|
207
|
+
if (!o.yes) {
|
|
208
|
+
if (o.json)
|
|
209
|
+
io.out(JSON.stringify({ copies: list, plan, renames }, null, 2));
|
|
210
|
+
else {
|
|
211
|
+
io.out(`The last ${list.length} builds kept here, newest first:`);
|
|
212
|
+
list.forEach((c, i) => io.out(` ${i + 1}: ${c.command} (${c.at}, ${c.files.length} files)`));
|
|
213
|
+
io.out(`atticus catalog undo${o.n !== void 0 ? ` ${o.n}` : ""} --yes would put back ${plan.files.length} ${plan.files.length === 1 ? "file" : "files"} as they were before ${plan.copies.length === 1 ? `the latest build (${plan.copies[0].command})` : `the ${plan.copies.length} latest builds`}:`);
|
|
214
|
+
for (const f of plan.files.slice(0, 30))
|
|
215
|
+
io.out(` ${f.to === "absent" ? "remove" : "restore"} ${f.path}`);
|
|
216
|
+
if (plan.files.length > 30)
|
|
217
|
+
io.out(` and ${plan.files.length - 30} more`);
|
|
218
|
+
for (const x of renames)
|
|
219
|
+
io.out(x.message);
|
|
220
|
+
}
|
|
221
|
+
return 0;
|
|
222
|
+
}
|
|
223
|
+
return locked(root, "atticus catalog undo", io, async () => {
|
|
224
|
+
const again = await planUndo(undoDir, o.n);
|
|
225
|
+
if ("problem" in again || JSON.stringify(again) !== JSON.stringify(plan)) {
|
|
226
|
+
const why = changedMeanwhile("atticus catalog undo");
|
|
227
|
+
io.err(why);
|
|
228
|
+
if (o.json)
|
|
229
|
+
io.out(JSON.stringify({ refused: { reasons: ["changed"], message: why } }, null, 2));
|
|
230
|
+
return 1;
|
|
231
|
+
}
|
|
232
|
+
if (o.plan !== void 0 && undoPlanHash(again) !== o.plan)
|
|
233
|
+
return refuseChanged(io, o.json, pageChanged("what the undo puts back"));
|
|
234
|
+
const b = await buildCatalog(await loadBuildInputs(root));
|
|
235
|
+
const g = await guardBuild(b, { undoDir, command: "atticus catalog build" });
|
|
236
|
+
if (g.refused?.reasons.includes("hand-edits")) {
|
|
237
|
+
io.err("Nothing undone: files under catalog/generated were changed by hand since the last build. Make them curated (atticus catalog edits --curate) or discard them (atticus catalog build --discard-edits <count>) first.");
|
|
238
|
+
if (o.json)
|
|
239
|
+
io.out(JSON.stringify({ refused: { reasons: ["hand-edits"], edits: g.refused.edits } }, null, 2));
|
|
240
|
+
return 1;
|
|
241
|
+
}
|
|
242
|
+
if (g.refused?.reasons.includes("not-upgraded")) {
|
|
243
|
+
const edited = await undoHandEdits(root, plan);
|
|
244
|
+
if (edited.length) {
|
|
245
|
+
io.err(`Nothing undone: ${edited.length} ${edited.length === 1 ? "file was" : "files were"} changed since ${plan.copies[0].command} wrote ${edited.length === 1 ? "it" : "them"}: ${edited.slice(0, 10).join(", ")}${edited.length > 10 ? ` and ${edited.length - 10} more` : ""}. Put ${edited.length === 1 ? "it" : "them"} back as ${edited.length === 1 ? "it was" : "they were"}, or keep ${edited.length === 1 ? "it" : "them"} and run atticus upgrade --yes.`);
|
|
246
|
+
if (o.json)
|
|
247
|
+
io.out(JSON.stringify({ refused: { reasons: ["hand-edits"], edits: edited.map((path) => ({ path })) } }, null, 2));
|
|
248
|
+
return 1;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
const r = await applyUndo(root, undoDir, plan, `atticus catalog undo${o.n !== void 0 ? ` ${o.n}` : ""}`);
|
|
252
|
+
const m = await readBuildManifest(baselineTarget(root).manifest);
|
|
253
|
+
const bad = [];
|
|
254
|
+
for (const f of m.manifest?.files ?? []) {
|
|
255
|
+
const text = await readFile(join(root, ...f.path.split("/")), "utf8").catch(() => void 0);
|
|
256
|
+
if (text === void 0 || sha256Of(text.replace(/\r\n?/g, "\n")) !== f.sha256)
|
|
257
|
+
bad.push(f.path);
|
|
258
|
+
}
|
|
259
|
+
if (o.json)
|
|
260
|
+
io.out(JSON.stringify({ restored: r.restored, undo: r.undo, handEdits: bad, renames }, null, 2));
|
|
261
|
+
else {
|
|
262
|
+
io.out(`Put back ${r.restored.length} ${r.restored.length === 1 ? "file" : "files"} as ${r.restored.length === 1 ? "it was" : "they were"} before ${plan.copies.map((c) => c.command).join(", then ")}.`);
|
|
263
|
+
if (r.undo !== void 0)
|
|
264
|
+
io.out(`This undo can be undone too: atticus catalog undo --yes (copy ${r.undo}).`);
|
|
265
|
+
if (plan.copies.some((c) => c.command.startsWith("atticus upgrade")))
|
|
266
|
+
io.out(UPGRADE_UNDONE);
|
|
267
|
+
for (const x of renames)
|
|
268
|
+
io.out(x.message);
|
|
269
|
+
if (bad.length)
|
|
270
|
+
io.out(`${bad.length} restored ${bad.length === 1 ? "file is a hand edit" : "files are hand edits"} again, as before (the next build lists ${bad.length === 1 ? "it" : "them"}: atticus catalog edits --curate keeps ${bad.length === 1 ? "it" : "them"}): ${bad.join(", ")}`);
|
|
271
|
+
}
|
|
272
|
+
return 0;
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
var changedMeanwhile = (command) => `Nothing written: what ${command} would change isn't what it listed any more (another command wrote meanwhile). Run it again to list it.`;
|
|
276
|
+
async function pruneList(root) {
|
|
277
|
+
const b = await buildCatalog(await loadBuildInputs(root));
|
|
278
|
+
return [
|
|
279
|
+
...b.orphaned.flatMap((x) => x.files.map((f) => ({
|
|
280
|
+
path: f,
|
|
281
|
+
why: x.why === "archived" ? `${x.repo} is archived` : `${x.repo} isn't in the manifests`
|
|
282
|
+
}))),
|
|
283
|
+
...(await filesUnder(generatedBeforeUpgradeDirOf(root))).map((p) => ({
|
|
284
|
+
path: posix(relative(root, p)),
|
|
285
|
+
why: "the copy the upgrade kept of the catalog before it"
|
|
286
|
+
}))
|
|
287
|
+
].sort((a, x) => cmpText(a.path, x.path));
|
|
288
|
+
}
|
|
289
|
+
async function catalogPrune(root, o, io) {
|
|
290
|
+
const files = await pruneList(root);
|
|
291
|
+
if (!files.length) {
|
|
292
|
+
if (o.json)
|
|
293
|
+
io.out(JSON.stringify({ files: [], removed: [] }, null, 2));
|
|
294
|
+
else
|
|
295
|
+
io.out("Nothing to prune: every slot file is one a build reads.");
|
|
296
|
+
return 0;
|
|
297
|
+
}
|
|
298
|
+
if (!o.yes) {
|
|
299
|
+
if (o.json)
|
|
300
|
+
io.out(JSON.stringify({ files, removed: [] }, null, 2));
|
|
301
|
+
else {
|
|
302
|
+
io.out(`${files.length} ${files.length === 1 ? "file" : "files"} no build reads:`);
|
|
303
|
+
for (const f of files)
|
|
304
|
+
io.out(` ${f.path} (${f.why})`);
|
|
305
|
+
io.out("Nothing removed. atticus catalog prune --yes removes exactly these (atticus catalog undo and git keep them).");
|
|
306
|
+
}
|
|
307
|
+
return 0;
|
|
308
|
+
}
|
|
309
|
+
return locked(root, "atticus catalog prune", io, async () => {
|
|
310
|
+
const again = await pruneList(root);
|
|
311
|
+
if (o.plan !== void 0 && prunePlanHash(again) !== o.plan)
|
|
312
|
+
return refuseChanged(io, o.json, pageChanged("what prune removes"));
|
|
313
|
+
if (JSON.stringify(again) !== JSON.stringify(files)) {
|
|
314
|
+
const why = changedMeanwhile("atticus catalog prune");
|
|
315
|
+
io.err(why);
|
|
316
|
+
if (o.json)
|
|
317
|
+
io.out(JSON.stringify({ files, removed: [], refused: { reasons: ["changed"], message: why } }, null, 2));
|
|
318
|
+
return 1;
|
|
319
|
+
}
|
|
320
|
+
const undoDir = await undoDirOf(root);
|
|
321
|
+
const touched = files.map((f) => ({ path: join(root, ...f.path.split("/")), text: null }));
|
|
322
|
+
const undo = await takeUndoCopy(root, undoDir, "atticus catalog prune", touched);
|
|
323
|
+
for (const t of touched)
|
|
324
|
+
await rm(t.path, { force: true });
|
|
325
|
+
if (o.json)
|
|
326
|
+
io.out(JSON.stringify({ files, removed: files.map((f) => f.path), undo }, null, 2));
|
|
327
|
+
else {
|
|
328
|
+
io.out(`Removed ${files.length} ${files.length === 1 ? "file" : "files"}:`);
|
|
329
|
+
for (const f of files)
|
|
330
|
+
io.out(` ${f.path}`);
|
|
331
|
+
if (undo !== void 0)
|
|
332
|
+
io.out(`atticus catalog undo --yes puts them back (copy ${undo}).`);
|
|
333
|
+
}
|
|
334
|
+
return 0;
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
var slug = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 100);
|
|
338
|
+
var PROTECTED = /* @__PURE__ */ new Set(["kind", "id", "schemaVersion", "confidence", "evidence"]);
|
|
339
|
+
function cantSay(p) {
|
|
340
|
+
const removed = p.removed ?? [];
|
|
341
|
+
const changed = (p.fields ?? []).filter((f) => !removed.includes(f));
|
|
342
|
+
const what = [
|
|
343
|
+
...changed.length ? [`changes ${changed.join(", ")}`] : [],
|
|
344
|
+
...removed.length ? [`removes ${removed.join(", ")}`] : []
|
|
345
|
+
].join(" and ");
|
|
346
|
+
const verb = changed.length && removed.length ? "set or remove" : removed.length ? "remove" : "set";
|
|
347
|
+
return `${what}, which a curated decision can't ${verb}`;
|
|
348
|
+
}
|
|
349
|
+
async function planEdits(root, undoDir) {
|
|
350
|
+
const inputs = await loadBuildInputs(root);
|
|
351
|
+
const b = await buildCatalog(inputs);
|
|
352
|
+
const g = await guardBuild(b, { undoDir, command: "atticus catalog build" });
|
|
353
|
+
const edits = g.refused?.reasons.includes("hand-edits") ? g.refused.edits ?? [] : [];
|
|
354
|
+
const built = new Map(b.records.map((r) => [recordPath(r), r]));
|
|
355
|
+
const genRel = posix(relative(root, join(catalogDirOf(root), "generated")));
|
|
356
|
+
let restored;
|
|
357
|
+
const asLastBuilt = async (rel) => {
|
|
358
|
+
if (!restored) {
|
|
359
|
+
restored = /* @__PURE__ */ new Map();
|
|
360
|
+
const op = inputs.op;
|
|
361
|
+
const listed = new Set(op.profiles.flatMap((p) => (p.repos?.repos ?? []).map((r) => r.id)));
|
|
362
|
+
const archived = new Set(op.profiles.flatMap((p) => (p.repos?.repos ?? []).filter((r) => r.archived)));
|
|
363
|
+
const removed = [...inputs.slots.readers].filter(([repo]) => !listed.has(repo)).flatMap(([repo, x]) => {
|
|
364
|
+
const c = "slot" in x ? x.slot.records.find((r) => r.kind === "Component") : void 0;
|
|
365
|
+
return c && typeof c.type === "string" ? [
|
|
366
|
+
{
|
|
367
|
+
id: repo,
|
|
368
|
+
url: repo,
|
|
369
|
+
defaultBranch: "main",
|
|
370
|
+
branches: [],
|
|
371
|
+
type: c.type,
|
|
372
|
+
owner: "unknown",
|
|
373
|
+
component: c.id,
|
|
374
|
+
...typeof c.system === "string" ? { system: c.system } : {},
|
|
375
|
+
extractors: [],
|
|
376
|
+
dialects: [],
|
|
377
|
+
sparse: [],
|
|
378
|
+
archived: false,
|
|
379
|
+
hosts: [],
|
|
380
|
+
modules: []
|
|
381
|
+
}
|
|
382
|
+
] : [];
|
|
383
|
+
});
|
|
384
|
+
const at = op.profiles.findIndex((p) => p.repos);
|
|
385
|
+
if ((archived.size || removed.length) && at >= 0) {
|
|
386
|
+
const back = {
|
|
387
|
+
...op,
|
|
388
|
+
profiles: op.profiles.map((p, k) => p.repos ? {
|
|
389
|
+
...p,
|
|
390
|
+
repos: {
|
|
391
|
+
...p.repos,
|
|
392
|
+
repos: [
|
|
393
|
+
...p.repos.repos.map((r) => r.archived ? { ...r, archived: false } : r),
|
|
394
|
+
...k === at ? removed : []
|
|
395
|
+
]
|
|
396
|
+
}
|
|
397
|
+
} : p)
|
|
398
|
+
};
|
|
399
|
+
const a = await buildCatalog({ ...inputs, op: back });
|
|
400
|
+
const m = await readBuildManifest(baselineTarget(root).manifest);
|
|
401
|
+
const shas = new Map((m.manifest?.files ?? []).map((f) => [f.path, f.sha256]));
|
|
402
|
+
const fromRemoved = new Set(removed.map((r) => r.id));
|
|
403
|
+
for (const r of a.records) {
|
|
404
|
+
const p = recordPath(r);
|
|
405
|
+
const ev = new Set((r.evidence ?? []).map((e) => e.repo).filter(Boolean));
|
|
406
|
+
if ([...ev].some((x) => fromRemoved.has(String(x)))) {
|
|
407
|
+
const text = a.files.get(p);
|
|
408
|
+
const want = shas.get(`${genRel}/${p}`);
|
|
409
|
+
if (text === void 0 || want === void 0 || sha256Of(text) !== want)
|
|
410
|
+
continue;
|
|
411
|
+
}
|
|
412
|
+
restored.set(p, r);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return restored.get(rel);
|
|
417
|
+
};
|
|
418
|
+
const out = [];
|
|
419
|
+
Object.defineProperty(out, "buildPlan", {
|
|
420
|
+
value: buildPlanOf(g),
|
|
421
|
+
enumerable: false
|
|
422
|
+
});
|
|
423
|
+
for (const e of edits) {
|
|
424
|
+
const rel = e.path.startsWith(`${genRel}/`) ? e.path.slice(genRel.length + 1) : e.path;
|
|
425
|
+
const derivedNow = built.get(rel);
|
|
426
|
+
const plan = (x) => out.push({ path: e.path, how: e.how, ...x });
|
|
427
|
+
if (e.how === "deleted") {
|
|
428
|
+
const id = derivedNow?.id ?? (rel.split("/").pop() ?? "").replace(/\.ya?ml$/, "");
|
|
429
|
+
plan({ decision: { action: "suppress", target: id, value: null } });
|
|
430
|
+
continue;
|
|
431
|
+
}
|
|
432
|
+
if (e.how === "added") {
|
|
433
|
+
plan({
|
|
434
|
+
why: derivedNow ? "the build makes a record of its id: change that record instead" : "an added record can't be a curated decision (a decision changes or suppresses a record the build makes); discard it, or say it where the build reads it: a fact in facts/<repo>.jsonl that verify --write checks, or a rule in the org pack"
|
|
435
|
+
});
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
const text = await readFile(join(root, ...e.path.split("/")), "utf8").catch(() => "");
|
|
439
|
+
const p = deserializeRecord(text);
|
|
440
|
+
const fromSlot = () => {
|
|
441
|
+
if (!p.ok)
|
|
442
|
+
return void 0;
|
|
443
|
+
const { kind, id } = p.record;
|
|
444
|
+
const held = [
|
|
445
|
+
...[...inputs.slots.readers.values()].flatMap((x) => "slot" in x ? x.slot.records : []),
|
|
446
|
+
...inputs.slots.legacy && "slot" in inputs.slots.legacy ? inputs.slots.legacy.slot.records : []
|
|
447
|
+
];
|
|
448
|
+
return held.find((r) => r.kind === kind && r.id === id);
|
|
449
|
+
};
|
|
450
|
+
const derived = derivedNow ?? await asLastBuilt(rel) ?? fromSlot();
|
|
451
|
+
if (!p.ok || !derived) {
|
|
452
|
+
plan({ why: "it doesn't read as a record, or the build no longer makes it" });
|
|
453
|
+
continue;
|
|
454
|
+
}
|
|
455
|
+
const now = p.record;
|
|
456
|
+
const was = derived;
|
|
457
|
+
const value = {};
|
|
458
|
+
const bad = [];
|
|
459
|
+
const removed = [];
|
|
460
|
+
for (const k of [.../* @__PURE__ */ new Set([...Object.keys(now), ...Object.keys(was)])].sort(cmpText)) {
|
|
461
|
+
if (JSON.stringify(now[k]) === JSON.stringify(was[k]))
|
|
462
|
+
continue;
|
|
463
|
+
if (!(k in now))
|
|
464
|
+
removed.push(k);
|
|
465
|
+
if (PROTECTED.has(k) || !(k in now))
|
|
466
|
+
bad.push(k);
|
|
467
|
+
else
|
|
468
|
+
value[k] = now[k];
|
|
469
|
+
}
|
|
470
|
+
const said = { fields: bad, ...removed.length ? { removed } : {} };
|
|
471
|
+
if (bad.length && !Object.keys(value).length) {
|
|
472
|
+
plan({ why: `it only ${cantSay(said)}`, ...said });
|
|
473
|
+
continue;
|
|
474
|
+
}
|
|
475
|
+
if (!Object.keys(value).length) {
|
|
476
|
+
plan({
|
|
477
|
+
why: "its record says the same as the build's (a comment or the layout): discard it"
|
|
478
|
+
});
|
|
479
|
+
continue;
|
|
480
|
+
}
|
|
481
|
+
plan({
|
|
482
|
+
decision: { action: "assert", target: derived.id, value },
|
|
483
|
+
...bad.length ? said : {}
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
return out;
|
|
487
|
+
}
|
|
488
|
+
async function catalogEdits(root, o, io) {
|
|
489
|
+
const undoDir = await undoDirOf(root);
|
|
490
|
+
const listed = await planEdits(root, undoDir);
|
|
491
|
+
const edits = listed.map((p) => ({ path: p.path, how: p.how }));
|
|
492
|
+
if (!edits.length) {
|
|
493
|
+
if (o.json)
|
|
494
|
+
io.out(JSON.stringify({ edits: [], decisions: [] }, null, 2));
|
|
495
|
+
else
|
|
496
|
+
io.out("No file under catalog/generated was changed by hand since the last build.");
|
|
497
|
+
return 0;
|
|
498
|
+
}
|
|
499
|
+
const dropping = listed.filter((p) => p.decision && p.fields?.length);
|
|
500
|
+
if (!o.curate) {
|
|
501
|
+
if (o.json)
|
|
502
|
+
io.out(JSON.stringify({
|
|
503
|
+
edits,
|
|
504
|
+
decisions: [],
|
|
505
|
+
...dropping.length ? { dropFields: dropping.length, fields: dropping.map((p) => pick(p)) } : {}
|
|
506
|
+
}, null, 2));
|
|
507
|
+
else {
|
|
508
|
+
io.out(`${edits.length} ${edits.length === 1 ? "file was" : "files were"} changed by hand since the last build:`);
|
|
509
|
+
for (const e of listed)
|
|
510
|
+
io.out(` ${e.how}: ${e.path}${e.fields?.length ? ` (${cantSay(e)})` : ""}`);
|
|
511
|
+
io.out(`Make them curated decisions: atticus catalog edits --curate${dropping.length ? ` --drop-fields ${dropping.length}` : ""}. Or discard them: atticus catalog build --discard-edits ${edits.length}.`);
|
|
512
|
+
}
|
|
513
|
+
return 1;
|
|
514
|
+
}
|
|
515
|
+
return locked(root, "atticus catalog edits --curate", io, async () => {
|
|
516
|
+
const plans = await planEdits(root, undoDir);
|
|
517
|
+
if (JSON.stringify(plans) !== JSON.stringify(listed)) {
|
|
518
|
+
const why = "Nothing written: the hand edits changed while this ran (another command wrote meanwhile). Run atticus catalog edits again to list them.";
|
|
519
|
+
io.err(why);
|
|
520
|
+
if (o.json)
|
|
521
|
+
io.out(JSON.stringify({ edits, decisions: [], refused: { message: why } }, null, 2));
|
|
522
|
+
return 1;
|
|
523
|
+
}
|
|
524
|
+
if (o.plan !== void 0 && plans.buildPlan !== o.plan)
|
|
525
|
+
return refuseChanged(io, o.json, pageChanged("the hand edits"));
|
|
526
|
+
const by = o.by ?? (await gitUser(root)).handle;
|
|
527
|
+
const at = (o.now ?? /* @__PURE__ */ new Date()).toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
528
|
+
const curatedDir = join(catalogDirOf(root), "curated");
|
|
529
|
+
const written = [];
|
|
530
|
+
const curated = [];
|
|
531
|
+
const left = [];
|
|
532
|
+
const kept = [];
|
|
533
|
+
const confirmed = o.dropFields === dropping.length;
|
|
534
|
+
for (const p of plans) {
|
|
535
|
+
if (!p.decision) {
|
|
536
|
+
left.push({ path: p.path, why: p.why ?? "it can't be made curated" });
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
if (p.fields?.length && !confirmed) {
|
|
540
|
+
left.push({
|
|
541
|
+
path: p.path,
|
|
542
|
+
why: `it also ${cantSay(p)} (the next build would put ${p.fields.length === 1 ? "it" : "them"} back): make it curated without ${p.fields.length === 1 ? "it" : "them"} with atticus catalog edits --curate --drop-fields ${dropping.length}`,
|
|
543
|
+
fields: p.fields
|
|
544
|
+
});
|
|
545
|
+
continue;
|
|
546
|
+
}
|
|
547
|
+
const placed = await decisionFor(curatedDir, slug(`cd-edit-${String(p.decision.action)}-${String(p.decision.target)}`), p.decision, at);
|
|
548
|
+
if ("keep" in placed) {
|
|
549
|
+
kept.push({
|
|
550
|
+
path: p.path,
|
|
551
|
+
decision: `${posix(relative(root, curatedDir))}/curateddecision/${placed.keep}`
|
|
552
|
+
});
|
|
553
|
+
curated.push(p.path);
|
|
554
|
+
continue;
|
|
555
|
+
}
|
|
556
|
+
const record = parseRecord({
|
|
557
|
+
kind: "CuratedDecision",
|
|
558
|
+
id: placed.id,
|
|
559
|
+
schemaVersion: 2,
|
|
560
|
+
status: "current",
|
|
561
|
+
confidence: "asserted",
|
|
562
|
+
...p.decision,
|
|
563
|
+
reason: `A hand edit to ${p.path}, made curated (atticus catalog edits --curate).`,
|
|
564
|
+
by,
|
|
565
|
+
at: placed.at
|
|
566
|
+
});
|
|
567
|
+
if (!record.ok) {
|
|
568
|
+
left.push({ path: p.path, why: record.issues.map((i) => i.message).join("; ") });
|
|
569
|
+
continue;
|
|
570
|
+
}
|
|
571
|
+
const full = join(curatedDir, ...recordPath(record.record).split("/"));
|
|
572
|
+
await mkdir(dirname(full), { recursive: true });
|
|
573
|
+
await writeFileAtomic(full, serializeRecord(record.record));
|
|
574
|
+
written.push(posix(relative(root, full)));
|
|
575
|
+
curated.push(p.path);
|
|
576
|
+
}
|
|
577
|
+
if (o.dropFields !== void 0 && !confirmed)
|
|
578
|
+
left.push({
|
|
579
|
+
path: "--drop-fields",
|
|
580
|
+
why: `${o.dropFields} doesn't name the ${dropping.length} listed`
|
|
581
|
+
});
|
|
582
|
+
await writeCuratedEdits(root, undoDir, curated);
|
|
583
|
+
if (o.json)
|
|
584
|
+
io.out(JSON.stringify({
|
|
585
|
+
edits,
|
|
586
|
+
decisions: written,
|
|
587
|
+
...kept.length ? { kept } : {},
|
|
588
|
+
left,
|
|
589
|
+
...dropping.length ? { dropFields: dropping.length } : {},
|
|
590
|
+
...confirmed && dropping.length ? { dropped: dropping.map((p) => pick(p)) } : {}
|
|
591
|
+
}, null, 2));
|
|
592
|
+
else {
|
|
593
|
+
for (const w of written)
|
|
594
|
+
io.out(`Wrote ${w}: propose it in a pull request so every build keeps the edit.`);
|
|
595
|
+
for (const k of kept)
|
|
596
|
+
io.out(`${k.path}: ${k.decision} already says this edit (left as it is).`);
|
|
597
|
+
if (confirmed)
|
|
598
|
+
for (const d of dropping)
|
|
599
|
+
io.out(`${d.path}: made curated without ${d.fields.join(", ")}, which the next build puts back as it makes ${d.fields.length === 1 ? "it" : "them"}.`);
|
|
600
|
+
for (const l of left)
|
|
601
|
+
io.err(`${l.path}: not made curated: ${l.why}.`);
|
|
602
|
+
if (written.length)
|
|
603
|
+
io.out("atticus catalog build (or the next scan) builds with them, and replaces the edited files; their bytes are kept for atticus catalog undo.");
|
|
604
|
+
if (left.length)
|
|
605
|
+
io.err(`What isn't curated stays a hand edit: discard it with atticus catalog build --discard-edits <count> (a copy is kept for undo).`);
|
|
606
|
+
}
|
|
607
|
+
return left.length ? 1 : 0;
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
var pick = (p) => ({
|
|
611
|
+
path: p.path,
|
|
612
|
+
fields: p.fields ?? [],
|
|
613
|
+
...p.removed?.length ? { removed: p.removed } : {}
|
|
614
|
+
});
|
|
615
|
+
async function decisionFor(curatedDir, id, decision, now) {
|
|
616
|
+
const dir = join(curatedDir, "curateddecision");
|
|
617
|
+
const held = [];
|
|
618
|
+
for (const n of (await readdir(dir).catch(() => [])).sort(cmpText)) {
|
|
619
|
+
if (!/\.ya?ml$/.test(n))
|
|
620
|
+
continue;
|
|
621
|
+
const p = deserializeRecord(await readFile(join(dir, n), "utf8").catch(() => ""));
|
|
622
|
+
const d = p.ok ? p.record : void 0;
|
|
623
|
+
if (d?.kind === "CuratedDecision" && d.target === decision.target)
|
|
624
|
+
held.push({ file: n, d });
|
|
625
|
+
}
|
|
626
|
+
const same = held.find(({ d }) => decision.action === "suppress" && d.action === "suppress" && d.status === "current" && (d.value ?? null) === null);
|
|
627
|
+
if (same)
|
|
628
|
+
return { keep: same.file };
|
|
629
|
+
let at = now;
|
|
630
|
+
const latest = held.map(({ d }) => typeof d.at === "string" ? Date.parse(d.at) : NaN).filter((x) => !Number.isNaN(x)).reduce((m, x) => Math.max(m, x), -Infinity);
|
|
631
|
+
if (latest !== -Infinity && Date.parse(at) <= latest)
|
|
632
|
+
at = new Date(Math.floor(latest / 1e3) * 1e3 + 1e3).toISOString().replace(/\.\d{3}Z$/, "Z");
|
|
633
|
+
const fileOf = (x) => join(dir, `${x}.yaml`);
|
|
634
|
+
if (!existsSync(fileOf(id)))
|
|
635
|
+
return { id, at };
|
|
636
|
+
for (let n = 2; ; n++)
|
|
637
|
+
if (!existsSync(fileOf(`${id}-${n}`)))
|
|
638
|
+
return { id: `${id}-${n}`, at };
|
|
639
|
+
}
|
|
640
|
+
export {
|
|
641
|
+
afterListed,
|
|
642
|
+
buildJson,
|
|
643
|
+
catalogBuild,
|
|
644
|
+
catalogEdits,
|
|
645
|
+
catalogPrune,
|
|
646
|
+
catalogUndo,
|
|
647
|
+
listHooks,
|
|
648
|
+
netRenames,
|
|
649
|
+
pruneList,
|
|
650
|
+
refusalHint,
|
|
651
|
+
renameUndone,
|
|
652
|
+
undoneRenames
|
|
653
|
+
};
|
|
@@ -5,7 +5,7 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
|
|
|
5
5
|
var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
|
|
6
6
|
import {
|
|
7
7
|
external_exports
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-A3LVMCA5.js";
|
|
9
9
|
import {
|
|
10
10
|
require_dist
|
|
11
11
|
} from "./chunk-BQGDB6ZL.js";
|