@maycombhq/atticus 2.0.0-beta.10 → 2.0.0-beta.12
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-AY2IUF4K.js → chunk-22GLUHGE.js} +659 -73
- package/dist/{chunk-CIUHAHM6.js → chunk-2A24BNRZ.js} +8 -8
- package/dist/{chunk-2RX7PI2Y.js → chunk-2ELFEKOO.js} +4 -4
- package/dist/{chunk-QKEFZRHS.js → chunk-2P6IHSRO.js} +17 -17
- package/dist/chunk-2Q2YBAR5.js +40 -0
- package/dist/{chunk-7DUDLVFJ.js → chunk-2VQLFNBO.js} +20 -20
- package/dist/{chunk-E3Z67HRK.js → chunk-3256EDLL.js} +4 -4
- package/dist/{chunk-OIU657QQ.js → chunk-34BCKMBS.js} +4 -4
- package/dist/{chunk-UR7RMZ3R.js → chunk-34NWVIBC.js} +2 -2
- package/dist/{chunk-6VBXAGJX.js → chunk-36KD4OGC.js} +14 -14
- package/dist/{chunk-I7IWQIEB.js → chunk-3CFBU2O6.js} +4 -4
- package/dist/{chunk-OSGQW2Z6.js → chunk-3JLTN3Y7.js} +8 -8
- package/dist/{chunk-FOGG4AUR.js → chunk-3M7QBKKG.js} +25 -7
- package/dist/{chunk-UF7TAFJM.js → chunk-3RP34PYV.js} +18 -18
- package/dist/{chunk-YLAJAI2W.js → chunk-3ZKLWM5Y.js} +11 -11
- package/dist/{chunk-LTQANUDH.js → chunk-47HPZ34V.js} +25 -25
- package/dist/chunk-4BPROPGG.js +45 -0
- package/dist/{chunk-Y4BRGOJR.js → chunk-4G56W6H7.js} +13 -10
- package/dist/{chunk-YXJ4XOHF.js → chunk-4HIQ2FTI.js} +4 -4
- package/dist/{chunk-AJJK7GLO.js → chunk-4HTILEXW.js} +3 -3
- package/dist/{chunk-OJLRFGBP.js → chunk-4Q2PGM5T.js} +78 -15
- package/dist/{chunk-GR6YKM55.js → chunk-4RDW2X43.js} +108 -14
- package/dist/{chunk-23M2LUYM.js → chunk-4VOG5H2K.js} +1 -1
- package/dist/chunk-5CSZTVXH.js +34 -0
- package/dist/{chunk-65C57N7P.js → chunk-5FFMJMVH.js} +19 -19
- package/dist/{chunk-XNYNEEBR.js → chunk-5GGGAI5C.js} +18 -18
- package/dist/{chunk-IUD3ME4E.js → chunk-5H46QFSL.js} +4 -4
- package/dist/{chunk-KIHOIVST.js → chunk-5ION6STH.js} +3 -3
- package/dist/chunk-5M3CLAOV.js +39 -0
- package/dist/chunk-5OACMWWI.js +886 -0
- package/dist/{chunk-2HMWX4T6.js → chunk-6ENDKY52.js} +11 -11
- package/dist/{chunk-OS7PQ35Z.js → chunk-6FG7QKJC.js} +22 -22
- package/dist/{chunk-FEZE6NIA.js → chunk-6JV3YHRR.js} +18 -18
- package/dist/{chunk-WGZWR4RF.js → chunk-6ROZRBWH.js} +5 -5
- package/dist/{chunk-WARBF2KY.js → chunk-6S27MUQQ.js} +10 -6
- package/dist/{chunk-TZDSDDSV.js → chunk-72DY5NCN.js} +2 -2
- package/dist/chunk-76QVBNEM.js +37 -0
- package/dist/{chunk-N4QZJJVB.js → chunk-77UOXZVM.js} +5 -5
- package/dist/{chunk-LVGBKKSM.js → chunk-7AXMUE2U.js} +15 -15
- package/dist/{chunk-FJCFYKVO.js → chunk-7TEQF64E.js} +196 -76
- package/dist/{chunk-IDGSU7JF.js → chunk-7TH6I6TL.js} +9 -9
- package/dist/{chunk-ZONE6E3Z.js → chunk-7UKETVPW.js} +2 -2
- package/dist/{chunk-XKS6THI5.js → chunk-7VNEDDCC.js} +2 -2
- package/dist/{chunk-BMHGA7WD.js → chunk-A5GY2EWH.js} +12 -12
- package/dist/{chunk-E3JYO547.js → chunk-AEZ3EICK.js} +20 -20
- package/dist/{chunk-7F2RUWPU.js → chunk-ARLH2ZMD.js} +1 -1
- package/dist/{chunk-VKMTFIWS.js → chunk-AYVLEB55.js} +18 -18
- package/dist/chunk-B6X5PJSA.js +320 -0
- package/dist/{chunk-JMSEEBN4.js → chunk-BRCDEGNE.js} +1 -1
- package/dist/{chunk-67J3VZBA.js → chunk-BSVTNNUK.js} +5 -5
- package/dist/{chunk-3GTZ2OON.js → chunk-BTOGAUWX.js} +20 -11
- package/dist/{chunk-4SVJNVEE.js → chunk-BXBCMGIQ.js} +2 -0
- package/dist/chunk-BXP2Q4TD.js +48 -0
- package/dist/{chunk-XPEEICAO.js → chunk-BZRWJUB4.js} +15 -15
- package/dist/{chunk-MH5OCRUM.js → chunk-CH6LUQLD.js} +2 -2
- package/dist/{chunk-T6USVBEJ.js → chunk-CIIRPLI6.js} +5 -5
- package/dist/chunk-CJXM6SG4.js +339 -0
- package/dist/{chunk-5XDNUJ4P.js → chunk-CQD26SMZ.js} +4 -2
- package/dist/{chunk-7TGYNOXD.js → chunk-CW5SEPUT.js} +7 -7
- package/dist/{chunk-5KTOPOEP.js → chunk-CWSZP2LU.js} +25 -25
- package/dist/chunk-CXK27ZUY.js +32 -0
- package/dist/{chunk-YGKYFMSL.js → chunk-CXY4YDXS.js} +3 -3
- package/dist/{chunk-R64GLVBO.js → chunk-DDZZXVQ5.js} +10 -10
- package/dist/{chunk-7YYEKTYF.js → chunk-DGZXJO5I.js} +8 -8
- package/dist/{chunk-IV7BCWWN.js → chunk-DONCF2XC.js} +3 -3
- package/dist/{chunk-RRVT4MPS.js → chunk-DPNCAFMB.js} +18 -18
- package/dist/{chunk-UBWCUP3G.js → chunk-DQKNOHUZ.js} +2 -2
- package/dist/{chunk-NGPU2ARF.js → chunk-DW4BM73R.js} +1 -1
- package/dist/{chunk-PEF5OEMB.js → chunk-DWN7RSNQ.js} +4 -4
- package/dist/{chunk-KC5DROFC.js → chunk-DWYPYVPJ.js} +14 -14
- package/dist/{chunk-B7434AE2.js → chunk-E73QLYK7.js} +24 -3
- package/dist/{chunk-EX6ZXS5K.js → chunk-EE3UNC44.js} +4 -4
- package/dist/chunk-EJDZEK22.js +53 -0
- package/dist/{chunk-ISNZYKAS.js → chunk-ENZWVTTN.js} +21 -21
- package/dist/{chunk-ROTY5J2L.js → chunk-EREL3TQG.js} +1 -1
- package/dist/{chunk-ZZXF6OOJ.js → chunk-ESGIBN3S.js} +2 -2
- package/dist/{chunk-YGR6OCHQ.js → chunk-EU7VTBAI.js} +8 -14
- package/dist/chunk-F5GA6G3U.js +48 -0
- package/dist/{chunk-JAA53T23.js → chunk-F6FGIYPT.js} +20 -20
- package/dist/{chunk-NPCD54I7.js → chunk-FAET4BB6.js} +8 -5
- package/dist/{chunk-YPBQNJHA.js → chunk-FBFSTYAB.js} +8 -8
- package/dist/{chunk-OEI7LVRP.js → chunk-FEBYMFZA.js} +24 -24
- package/dist/chunk-FMV6IZ3P.js +54 -0
- package/dist/{chunk-F7UQR4ZX.js → chunk-FQ6IBYFC.js} +3 -3
- package/dist/{chunk-J5LHDJU4.js → chunk-FSJMFPA3.js} +7 -7
- package/dist/chunk-GFZ5MIQG.js +47 -0
- package/dist/{chunk-LK44ULGI.js → chunk-GHSVJNVL.js} +104 -11
- package/dist/{chunk-LRS573EX.js → chunk-GKPOCUQR.js} +12 -7
- package/dist/{chunk-LDKUC2QJ.js → chunk-GLSNVC67.js} +17 -17
- package/dist/{chunk-47QE246J.js → chunk-GMDOXWIS.js} +5 -5
- package/dist/{chunk-5MI2SEV5.js → chunk-GN5ZLSLD.js} +3 -3
- package/dist/{chunk-JQ7XQPQS.js → chunk-GUNBOZ75.js} +4 -4
- package/dist/{chunk-HHUFVJF7.js → chunk-GYS64N6F.js} +6 -6
- package/dist/{chunk-AKJTKMXU.js → chunk-HIQWJ6JZ.js} +5 -5
- package/dist/{chunk-6GNS32SI.js → chunk-HJ52XDST.js} +4 -4
- package/dist/{chunk-2KDSXJFJ.js → chunk-HJUEQERG.js} +34 -7
- package/dist/chunk-HKGQUOQ3.js +88 -0
- package/dist/chunk-HP32HUWR.js +41 -0
- package/dist/{chunk-R4TBNKKC.js → chunk-HY2VVVFZ.js} +1249 -610
- package/dist/{chunk-G5SFOH7P.js → chunk-I2PNEG3M.js} +38 -23
- package/dist/{chunk-Y5PZHS4K.js → chunk-INCECZ2E.js} +5 -5
- package/dist/{chunk-RK6MKKKP.js → chunk-ISXNWUG7.js} +1 -1
- package/dist/{chunk-73VPWF5R.js → chunk-ITJ7ST5E.js} +4 -4
- package/dist/{chunk-5IALSMZ2.js → chunk-J3VAFDEX.js} +14 -14
- package/dist/chunk-JGLZUQVN.js +29 -0
- package/dist/{chunk-5XN76FTF.js → chunk-JLIEAQP4.js} +5 -5
- package/dist/{chunk-MGVYVW7Q.js → chunk-JQG4VO47.js} +1 -1
- package/dist/chunk-JXXQHETS.js +130 -0
- package/dist/{chunk-APSVL2AI.js → chunk-KNGESBFW.js} +15 -15
- package/dist/{chunk-7UKVYFQ2.js → chunk-KUYA2E7M.js} +8 -8
- package/dist/{chunk-WLIIQ2A4.js → chunk-KY2ZHTBJ.js} +7 -7
- package/dist/{chunk-YPIEYQF4.js → chunk-L4UIKAWD.js} +6 -6
- package/dist/chunk-LDUJ6NIT.js +247 -0
- package/dist/{chunk-5YIBJXGB.js → chunk-LTLR4JZJ.js} +10 -10
- package/dist/{chunk-IZNSAEBX.js → chunk-MFRPLAOH.js} +2 -2
- package/dist/{chunk-6GWHKMQR.js → chunk-MH7UBG47.js} +4 -4
- package/dist/{chunk-4GZXS6S2.js → chunk-MLAACAES.js} +278 -17
- package/dist/{chunk-D3PO4DOZ.js → chunk-MMB2OHUY.js} +4 -2
- package/dist/{chunk-DDAHCPGA.js → chunk-MNCQ2GL7.js} +12 -12
- package/dist/{chunk-UYYN2IUZ.js → chunk-MNUZX67F.js} +6 -6
- package/dist/{chunk-YFSSNGLR.js → chunk-MQHYCS6A.js} +32 -29
- package/dist/{chunk-MKRBG5EF.js → chunk-MRLCNXXR.js} +1 -1
- package/dist/{chunk-BUYJL3GJ.js → chunk-NBQO75XT.js} +1 -1
- package/dist/{chunk-GXJVY6WT.js → chunk-NCONDPHH.js} +5 -5
- package/dist/{chunk-ZP4FJHR4.js → chunk-NHS55U7T.js} +18 -18
- package/dist/{chunk-CRE4BJHM.js → chunk-NL6XQZSV.js} +23 -23
- package/dist/{chunk-YVLMBAYE.js → chunk-NSJ6ZR2A.js} +3 -3
- package/dist/{chunk-XRO65C7V.js → chunk-NTNJNRHW.js} +8 -6
- package/dist/{chunk-FTV6I76U.js → chunk-NTTXTLCQ.js} +25 -25
- package/dist/chunk-NWL7XEQ4.js +37 -0
- package/dist/{chunk-CNKGYDMG.js → chunk-NWXY3B4R.js} +23 -23
- package/dist/{chunk-52R2YXP5.js → chunk-O5W4ECUY.js} +16 -16
- package/dist/{chunk-OGRWQ562.js → chunk-O6ILVBYB.js} +2 -2
- package/dist/{chunk-BJPMKJTL.js → chunk-OJAJXU65.js} +102 -2
- package/dist/{chunk-FZL2HNWP.js → chunk-OMH3I5BH.js} +3 -3
- package/dist/{chunk-MF7QH4AX.js → chunk-P6UJ22XR.js} +5 -5
- package/dist/{chunk-HE4ZQXZM.js → chunk-P76AW3PA.js} +309 -15
- package/dist/{chunk-GZ4TKR3Q.js → chunk-PCCPXWJC.js} +48 -139
- package/dist/{chunk-6TJCUYC5.js → chunk-PGFRXGHA.js} +3 -3
- package/dist/{chunk-NIXVDQVO.js → chunk-PJRMMWU4.js} +2 -2
- package/dist/{chunk-X4W4XXWP.js → chunk-PKJ3K3GM.js} +5 -5
- package/dist/{chunk-KM2FBM3T.js → chunk-PVW2N63M.js} +302 -55
- package/dist/{chunk-Y7KBQ4BD.js → chunk-Q55UP5EZ.js} +22 -22
- package/dist/{chunk-7URGP4DD.js → chunk-QAFMLBPF.js} +12 -12
- package/dist/{chunk-KIAI6PWL.js → chunk-QEZSA2O7.js} +17 -17
- package/dist/{chunk-PKCMRPPB.js → chunk-QJ3OX7OC.js} +33 -27
- package/dist/{chunk-6EDQE7GO.js → chunk-QL4VNY4U.js} +2 -2
- package/dist/{chunk-6JLPXDWN.js → chunk-QR65C3DV.js} +5 -5
- package/dist/{chunk-ILFKECGI.js → chunk-QXGOEP44.js} +4 -4
- package/dist/chunk-QY7RGTUP.js +326 -0
- package/dist/{chunk-PGKHJYOB.js → chunk-RA64IK43.js} +1 -1
- package/dist/{chunk-XB5RFZHH.js → chunk-RLJDYLID.js} +12 -12
- package/dist/{chunk-AWECWW5Y.js → chunk-RMLUZYEA.js} +13 -11
- package/dist/chunk-RSVBX6A3.js +54 -0
- package/dist/chunk-RZWZO2JQ.js +42 -0
- package/dist/chunk-S5LSDXV4.js +40 -0
- package/dist/{chunk-TM7LC37P.js → chunk-SAC6FNKR.js} +181 -117
- package/dist/{chunk-DPHCFZ7W.js → chunk-SCBU46AJ.js} +3 -3
- package/dist/{chunk-EZIUFEN6.js → chunk-SGNHNN3G.js} +12 -12
- package/dist/{chunk-XKZHAD6Y.js → chunk-SHAAGH3T.js} +15 -15
- package/dist/chunk-SK5OYWIY.js +122 -0
- package/dist/{chunk-FR7JPYBD.js → chunk-SNSFQ47W.js} +12 -12
- package/dist/{chunk-FV5YFR6I.js → chunk-SSL6JMPA.js} +9 -9
- package/dist/{chunk-XEG3FE2R.js → chunk-TA2ZNDYD.js} +1 -1
- package/dist/{chunk-JF2NSTFO.js → chunk-TEHH47TG.js} +3 -3
- package/dist/{chunk-W5OYJMBT.js → chunk-TEZSZ24W.js} +5 -5
- package/dist/{chunk-SS66Q4VE.js → chunk-TH526O6E.js} +12 -12
- package/dist/{chunk-R6B6XAKK.js → chunk-TIAPEYWI.js} +4 -4
- package/dist/chunk-TLCRIAU3.js +44 -0
- package/dist/{chunk-FMKKVWZD.js → chunk-TQYBXDVH.js} +2 -2
- package/dist/chunk-TV4CGNEY.js +43 -0
- package/dist/{chunk-QICFHVRW.js → chunk-TVSNWIAM.js} +8 -6
- package/dist/{chunk-CHC5FKTU.js → chunk-TWHZU36X.js} +1 -1
- package/dist/{chunk-BMCKL3VQ.js → chunk-TXV2AYZB.js} +24 -24
- package/dist/{chunk-577AJVRS.js → chunk-U25OX22K.js} +2039 -289
- package/dist/{chunk-7EKESFWV.js → chunk-U4NNG3ES.js} +11 -11
- package/dist/{chunk-XQ3YIV5R.js → chunk-U5T4A2QV.js} +6 -6
- package/dist/{chunk-2XM6PYQQ.js → chunk-UT5OA7KA.js} +43 -11
- package/dist/{chunk-BXIX7S7O.js → chunk-V3VCUSQ6.js} +15 -15
- package/dist/{chunk-4QUQEBFT.js → chunk-V5XV3JSP.js} +6 -6
- package/dist/{chunk-F7YL2RZ4.js → chunk-VF4VOPMB.js} +23 -23
- package/dist/{chunk-3QAKDIEU.js → chunk-VLDM4QZM.js} +23 -23
- package/dist/chunk-VP5H6DII.js +34 -0
- package/dist/{chunk-N3NBWIYQ.js → chunk-VRYQJZFL.js} +10 -9
- package/dist/{chunk-FQSRHTTC.js → chunk-VS6FS472.js} +15 -15
- package/dist/{chunk-YMOJD5BO.js → chunk-VTMIRRIZ.js} +3 -3
- package/dist/{chunk-4PJADZRR.js → chunk-VXSJKWB7.js} +16 -16
- package/dist/{chunk-MTAUZW2Z.js → chunk-WE5VMPUP.js} +216 -106
- package/dist/{chunk-ZE3P35DA.js → chunk-WEG7DY5K.js} +9 -9
- package/dist/{chunk-V2TH46ZY.js → chunk-WIF7A6JU.js} +12 -12
- package/dist/{chunk-GFXLPJWY.js → chunk-WM4N2L4T.js} +2 -2
- package/dist/{chunk-XIWYUQZQ.js → chunk-X64BFQ3R.js} +9 -9
- package/dist/{chunk-QWVBEK4P.js → chunk-XJRC3ZDI.js} +13 -13
- package/dist/{chunk-F2FOQLJ7.js → chunk-XVIVWG7B.js} +6 -6
- package/dist/{chunk-XTVDAHH2.js → chunk-Y3ZKT6IF.js} +5 -5
- package/dist/{chunk-62YMDXY6.js → chunk-YURIUFKF.js} +16 -16
- package/dist/{chunk-HKTUIMH4.js → chunk-YY2WGL6S.js} +3 -3
- package/dist/{chunk-BDEKREZH.js → chunk-Z2BA4NNR.js} +3 -3
- package/dist/{chunk-MTEBM4Y4.js → chunk-Z47YGBUY.js} +19 -12
- package/dist/chunk-Z4JSRKNR.js +41 -0
- package/dist/{chunk-G2E5MNYP.js → chunk-Z53ZB34U.js} +7 -7
- package/dist/{chunk-NNUASOAA.js → chunk-ZBOPIYOY.js} +12 -12
- package/dist/{chunk-7GB4ZRE2.js → chunk-ZBQCLKTH.js} +12 -12
- package/dist/chunk-ZGI7DNJ6.js +38 -0
- package/dist/{chunk-P3TKKBAH.js → chunk-ZPT4QX3J.js} +4 -4
- package/dist/chunk-ZS47PQ3O.js +41 -0
- package/dist/{chunk-PIVKU64W.js → chunk-ZTIMXVV5.js} +2 -2
- package/dist/{chunk-T4RTWMJD.js → chunk-ZYASEL7K.js} +5 -5
- package/dist/files.json +469 -417
- package/dist/packages/sdk/npm/index.js +2309 -1983
- package/dist/packages/ui/dist/assets/{elk-api-Mo5w5xCa.js → elk-api-D2NcYpUJ.js} +2 -2
- package/dist/packages/ui/dist/assets/{index-Bp3XhPHX.css → index-C0JEkXyN.css} +1 -1
- package/dist/packages/ui/dist/assets/index-CT7skl01.js +29 -0
- package/dist/packages/ui/dist/index.html +2 -2
- package/package.json +4 -4
- package/dist/chunk-26PLPSQW.js +0 -48
- package/dist/chunk-2G4DFUWJ.js +0 -43
- package/dist/chunk-2M6WXO73.js +0 -38
- package/dist/chunk-5F3RJCHB.js +0 -45
- package/dist/chunk-B2VSVN4P.js +0 -34
- package/dist/chunk-B3O52AUQ.js +0 -275
- package/dist/chunk-CITDNDIZ.js +0 -53
- package/dist/chunk-DAQBIK5G.js +0 -47
- package/dist/chunk-DZRQDNPT.js +0 -34
- package/dist/chunk-FLOEZA6K.js +0 -29
- package/dist/chunk-FNHSVBRA.js +0 -48
- package/dist/chunk-FPGVOSOG.js +0 -41
- package/dist/chunk-FZ2E5LGK.js +0 -54
- package/dist/chunk-HB6XSGI6.js +0 -131
- package/dist/chunk-HUZQDKQK.js +0 -48
- package/dist/chunk-L4VJ4ETL.js +0 -41
- package/dist/chunk-XPCWQXTY.js +0 -37
- package/dist/chunk-YIEOFHOL.js +0 -30
- package/dist/packages/ui/dist/assets/index-DM212ZbV.js +0 -29
|
@@ -5,11 +5,12 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
|
|
|
5
5
|
var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
|
|
6
6
|
import {
|
|
7
7
|
readOpenApiDocument
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-34NWVIBC.js";
|
|
9
9
|
import {
|
|
10
10
|
globToRegExp
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-MRLCNXXR.js";
|
|
12
12
|
import {
|
|
13
|
+
DECLARED_TOPIC,
|
|
13
14
|
DEFAULT_CONVENTIONS,
|
|
14
15
|
Fact,
|
|
15
16
|
FactId,
|
|
@@ -29,6 +30,7 @@ import {
|
|
|
29
30
|
isSecretPath,
|
|
30
31
|
lineNamesClaim,
|
|
31
32
|
normalizePath,
|
|
33
|
+
noteProblem,
|
|
32
34
|
partsBuildWord,
|
|
33
35
|
partsNamePath,
|
|
34
36
|
plainPathPrefix,
|
|
@@ -38,7 +40,7 @@ import {
|
|
|
38
40
|
staleCite,
|
|
39
41
|
toCanonicalYaml,
|
|
40
42
|
underFolders
|
|
41
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-U25OX22K.js";
|
|
42
44
|
|
|
43
45
|
// packages/verify/dist/source.js
|
|
44
46
|
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
@@ -136,8 +138,11 @@ var FRAMEWORKS = [
|
|
|
136
138
|
var KNOWN = [
|
|
137
139
|
// Java and Kotlin
|
|
138
140
|
["spring-boot*", { name: "spring-boot", topic: "spring", shape: "rest" }],
|
|
139
|
-
// the
|
|
141
|
+
// the annotations a Spring Boot app's main class carries, which a reader may cite instead
|
|
142
|
+
// (matched by `annotationKey`, so bare, qualified or with arguments)
|
|
140
143
|
["@springbootapplication", { name: "spring-boot", topic: "spring", shape: "rest" }],
|
|
144
|
+
["@enableautoconfiguration", { name: "spring-boot", topic: "spring", shape: "rest" }],
|
|
145
|
+
["@quarkusmain", { name: "quarkus", topic: "quarkus" }],
|
|
141
146
|
["spring-webmvc", { name: "spring", topic: "spring", shape: "rest" }],
|
|
142
147
|
["spring-webflux", { name: "spring", topic: "spring", shape: "rest" }],
|
|
143
148
|
["spring-web", { name: "spring", topic: "spring", shape: "rest" }],
|
|
@@ -189,6 +194,10 @@ function declarationKey(declared) {
|
|
|
189
194
|
const name = colon.split(/[=<>~!,\s[]/)[0] ?? colon;
|
|
190
195
|
return name.replace(/^['"]|['"]$/g, "");
|
|
191
196
|
}
|
|
197
|
+
function annotationKey(declared) {
|
|
198
|
+
const m = /^@?(?:[a-z_$][\w$]*\.)*([A-Z][\w$]*)\s*(?:\(.*)?$/s.exec(declared.trim());
|
|
199
|
+
return m ? `@${m[1].toLowerCase()}` : void 0;
|
|
200
|
+
}
|
|
192
201
|
function houseKnown(extra) {
|
|
193
202
|
return extra.map((e) => [
|
|
194
203
|
e.declares.toLowerCase(),
|
|
@@ -203,19 +212,27 @@ function frameworkOf(declared, extra = []) {
|
|
|
203
212
|
const key = declarationKey(declared);
|
|
204
213
|
if (!key)
|
|
205
214
|
return void 0;
|
|
206
|
-
|
|
215
|
+
const table = extra.length ? [...houseKnown(extra), ...KNOWN] : KNOWN;
|
|
216
|
+
for (const [pattern, known] of table) {
|
|
207
217
|
const star = pattern.endsWith("*");
|
|
208
218
|
const p = star ? pattern.slice(0, -1) : pattern;
|
|
209
219
|
if (star ? key.startsWith(p) : key === p)
|
|
210
220
|
return known;
|
|
211
221
|
}
|
|
222
|
+
const ann = annotationKey(declared);
|
|
223
|
+
if (ann) {
|
|
224
|
+
for (const [pattern, known] of table)
|
|
225
|
+
if (pattern === ann)
|
|
226
|
+
return known;
|
|
227
|
+
}
|
|
212
228
|
return void 0;
|
|
213
229
|
}
|
|
214
230
|
function frameworkNameProblem(f, extra = []) {
|
|
215
231
|
const known = frameworkOf(f.cite.value, extra);
|
|
216
232
|
const name = f.name.trim().toLowerCase();
|
|
217
233
|
if (known) {
|
|
218
|
-
|
|
234
|
+
const legacy = annotationKey(f.cite.value) === `@${name}`;
|
|
235
|
+
return name === known.name.toLowerCase() || legacy ? void 0 : `names the framework "${f.name}", but ${f.cite.file}:${f.cite.line} declares ${f.cite.value}, which is ${known.name}`;
|
|
219
236
|
}
|
|
220
237
|
const key = declarationKey(f.cite.value);
|
|
221
238
|
if (declarationKey(name) === key || name === key)
|
|
@@ -405,6 +422,54 @@ function authPolicyMismatch(auth, file, policy, lines) {
|
|
|
405
422
|
}
|
|
406
423
|
var authChecks = (auth) => CHECKS[auth] ?? auth;
|
|
407
424
|
|
|
425
|
+
// packages/verify/dist/call-security-lines.js
|
|
426
|
+
var CLIENT_CERT = /client[-_ .]?cert|keystore|key[-_ .]?store|ssl[-_ .]?bundle|\.pfx\b|\.p12\b|pkcs12|\bpfx\b|\bp12\b/i;
|
|
427
|
+
var CERT_AND_KEY = (l) => /\bcert\b/i.test(l) && /\bkey\b/i.test(l);
|
|
428
|
+
var KINDS = {
|
|
429
|
+
"tls mtls": {
|
|
430
|
+
test: (l) => CLIENT_CERT.test(l) || CERT_AND_KEY(l),
|
|
431
|
+
needs: "a client certificate, a key store or an SSL bundle"
|
|
432
|
+
},
|
|
433
|
+
"tls tls": { test: (l) => /https|ssl|tls/i.test(l), needs: "https, SSL or TLS" },
|
|
434
|
+
"tls none": {
|
|
435
|
+
test: (l) => !/https:\/\//i.test(l) && (/http:\/\//i.test(l) || /\b(false|disabled?|insecure|plain-?text|off)\b/i.test(l)),
|
|
436
|
+
needs: "a plain http:// URL or a TLS switch set off"
|
|
437
|
+
},
|
|
438
|
+
"auth oauth2": {
|
|
439
|
+
test: (l) => /oauth|token|bearer|jwt|authori[sz]|client[-_ ]?credentials|access[-_ ]?token/i.test(l),
|
|
440
|
+
needs: "a token (OAuth, bearer, JWT or an Authorization header)"
|
|
441
|
+
},
|
|
442
|
+
"auth api-key": {
|
|
443
|
+
test: (l) => /api[-_ ]?key|apikey|x-api|subscription[-_ ]?key|[a-z0-9][-_]key\b/i.test(l),
|
|
444
|
+
needs: "a key"
|
|
445
|
+
},
|
|
446
|
+
"auth basic": {
|
|
447
|
+
test: (l) => /basic|password|passwd|username|credential/i.test(l),
|
|
448
|
+
needs: "a password or basic credentials"
|
|
449
|
+
},
|
|
450
|
+
"auth mtls": {
|
|
451
|
+
test: (l) => CLIENT_CERT.test(l) || CERT_AND_KEY(l),
|
|
452
|
+
needs: "a client certificate, a key store or an SSL bundle"
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
function securityLineKind(what, claim, lines) {
|
|
456
|
+
const k = KINDS[`${what} ${claim}`];
|
|
457
|
+
if (!k)
|
|
458
|
+
return void 0;
|
|
459
|
+
return lines.some((l) => k.test(l)) ? void 0 : k.needs;
|
|
460
|
+
}
|
|
461
|
+
function lineOfValue(lines, line, value) {
|
|
462
|
+
if (!lines)
|
|
463
|
+
return void 0;
|
|
464
|
+
const v = value.toLowerCase();
|
|
465
|
+
for (const n of [line, line - 1, line + 1]) {
|
|
466
|
+
const l = lines[n - 1];
|
|
467
|
+
if (l !== void 0 && l.toLowerCase().includes(v))
|
|
468
|
+
return l;
|
|
469
|
+
}
|
|
470
|
+
return lines[line - 1];
|
|
471
|
+
}
|
|
472
|
+
|
|
408
473
|
// packages/verify/dist/corrections.js
|
|
409
474
|
function correctionFor(f, corrections) {
|
|
410
475
|
const at = (c) => c.target.kind === f.kind && c.target.file === f.cite.file && c.target.line === f.cite.line;
|
|
@@ -1445,6 +1510,17 @@ var topicContext = (line) => {
|
|
|
1445
1510
|
const w = wordsOf2(line);
|
|
1446
1511
|
return w.some((x) => TOPIC_WORDS.has(x)) || w.join(" ").includes("routing key");
|
|
1447
1512
|
};
|
|
1513
|
+
var BUILD_KEY_WORDS = new Set("scm git gitlab github bitbucket repository repositories repo registry mirror mirrors nexus artifactory snapshot snapshots distribution maven npm nuget pypi sonar sonarqube jenkins ci".split(" "));
|
|
1514
|
+
var BUILD_BLOCK_TAG = /<(\/?)(repositories|repository|pluginRepositories|pluginRepository|snapshotRepository|distributionManagement|scm|mirrors|mirror|site)\b[^>]*?(\/?)>/gi;
|
|
1515
|
+
var BUILD_BLOCK_OPEN = /\b(repositories|publishing|pluginManagement|dependencyResolutionManagement)\s*\{/;
|
|
1516
|
+
var keysBefore = (prefix) => [
|
|
1517
|
+
...[...prefix.matchAll(/<([A-Za-z][\w:.-]*)/g)].map((m) => m[1]),
|
|
1518
|
+
...[...prefix.matchAll(/["']?([A-Za-z][\w.-]*)["']?\s*[:=]/g)].map((m) => m[1]),
|
|
1519
|
+
...[...prefix.matchAll(/\b([A-Za-z]\w*)\s*\{/g)].map((m) => m[1])
|
|
1520
|
+
];
|
|
1521
|
+
var isBuildUrl = (u, prefix) => /\.git\/?$/i.test(u) || /\bscm:\w+:$/i.test(prefix) || keysBefore(prefix).some((k) => wordsOf2(k).some((w) => BUILD_KEY_WORDS.has(w)));
|
|
1522
|
+
var HEADER_ARG = /header\w*\s*(?:\.\s*\w+\s*)?\(\s*(?:(?:value|name)\s*=\s*)?$/i;
|
|
1523
|
+
var isHeaderName = (s, prefix) => /^x-/i.test(s) || HEADER_ARG.test(prefix.replace(/["'`]$/, ""));
|
|
1448
1524
|
var cleanUrl = (u) => u.replace(/[.:]+$/, "").replace(/^([a-z0-9+.-]+:\/\/)[^/@\s]+@/i, "$1<redacted>@");
|
|
1449
1525
|
var hostOf = (u) => /^[a-z0-9+.-]+:\/\/([^/:?#]+)/i.exec(u)?.[1] ?? "";
|
|
1450
1526
|
function pathOf(s) {
|
|
@@ -1494,9 +1570,19 @@ function codeOf(raw, state) {
|
|
|
1494
1570
|
function candidatesIn(path, lines) {
|
|
1495
1571
|
const out = [];
|
|
1496
1572
|
const state = {};
|
|
1573
|
+
let xmlDepth = 0;
|
|
1574
|
+
let braceDepth = 0;
|
|
1497
1575
|
lines.forEach((raw, i) => {
|
|
1498
1576
|
const wasBlock = state.block !== void 0;
|
|
1499
1577
|
let code2 = codeOf(raw, state);
|
|
1578
|
+
const inBuild = xmlDepth > 0 || braceDepth > 0;
|
|
1579
|
+
for (const m of code2.matchAll(BUILD_BLOCK_TAG))
|
|
1580
|
+
if (!m[3])
|
|
1581
|
+
xmlDepth = Math.max(0, xmlDepth + (m[1] ? -1 : 1));
|
|
1582
|
+
if (braceDepth > 0 || BUILD_BLOCK_OPEN.test(code2)) {
|
|
1583
|
+
const from = braceDepth > 0 ? code2 : code2.slice(BUILD_BLOCK_OPEN.exec(code2).index);
|
|
1584
|
+
braceDepth = Math.max(0, braceDepth + (from.match(/\{/g)?.length ?? 0) - (from.match(/\}/g)?.length ?? 0));
|
|
1585
|
+
}
|
|
1500
1586
|
if (!code2.trim())
|
|
1501
1587
|
return;
|
|
1502
1588
|
if (!wasBlock && isCommentLine(raw))
|
|
@@ -1515,19 +1601,24 @@ function candidatesIn(path, lines) {
|
|
|
1515
1601
|
};
|
|
1516
1602
|
const context = topicContext(code2);
|
|
1517
1603
|
const urls = [];
|
|
1604
|
+
const opened = inBuild || xmlDepth > 0 || braceDepth > 0;
|
|
1518
1605
|
for (const m of code2.matchAll(URL_RE)) {
|
|
1519
1606
|
const u = cleanUrl(m[0]);
|
|
1520
|
-
|
|
1607
|
+
const build = opened || isBuildUrl(u, code2.slice(0, m.index));
|
|
1608
|
+
if (!build && !STANDARD_HOST.test(hostOf(u)))
|
|
1521
1609
|
add("url", u);
|
|
1522
1610
|
urls.push(m[0]);
|
|
1523
1611
|
}
|
|
1524
|
-
const strings2 = [...code2.matchAll(QUOTED)].map((m) =>
|
|
1612
|
+
const strings2 = [...code2.matchAll(QUOTED)].map((m) => ({
|
|
1613
|
+
s: m[2],
|
|
1614
|
+
before: code2.slice(0, m.index + 1)
|
|
1615
|
+
}));
|
|
1525
1616
|
const kv = KEY_VALUE.exec(code2);
|
|
1526
1617
|
if (kv)
|
|
1527
|
-
strings2.push(kv[2]);
|
|
1618
|
+
strings2.push({ s: kv[2], before: "" });
|
|
1528
1619
|
for (const m of code2.matchAll(ELEMENT_TEXT))
|
|
1529
|
-
strings2.push(m[2]);
|
|
1530
|
-
for (const s of strings2) {
|
|
1620
|
+
strings2.push({ s: m[2], before: "" });
|
|
1621
|
+
for (const { s, before } of strings2) {
|
|
1531
1622
|
if (urls.some((u) => s.includes(u) || u.includes(s)))
|
|
1532
1623
|
continue;
|
|
1533
1624
|
const p = pathOf(s);
|
|
@@ -1536,7 +1627,7 @@ function candidatesIn(path, lines) {
|
|
|
1536
1627
|
continue;
|
|
1537
1628
|
}
|
|
1538
1629
|
const t = topicOf(s, context);
|
|
1539
|
-
if (t)
|
|
1630
|
+
if (t && !isHeaderName(t, before))
|
|
1540
1631
|
add("topic", t);
|
|
1541
1632
|
}
|
|
1542
1633
|
});
|
|
@@ -1740,6 +1831,9 @@ function claimsOf(f) {
|
|
|
1740
1831
|
}
|
|
1741
1832
|
case "flow":
|
|
1742
1833
|
return [routeOrWord(f.cite.value)];
|
|
1834
|
+
// ADR 0163: the value as written, on its line.
|
|
1835
|
+
case "term":
|
|
1836
|
+
return [{ kind: "word", value: f.value }];
|
|
1743
1837
|
}
|
|
1744
1838
|
}
|
|
1745
1839
|
var sameCommit = (a, b) => a.startsWith(b) || b.startsWith(a);
|
|
@@ -1970,6 +2064,40 @@ async function verifyFacts(o) {
|
|
|
1970
2064
|
if (f.exposes === void 0 && !serves2)
|
|
1971
2065
|
problem(f, "exposure-component", `${label} says where a component is reached and names none: this repo's facts serve nothing, so its routes reach another repo's component; name it in exposes (one of the estate's components), or write a question when no file says which`);
|
|
1972
2066
|
}
|
|
2067
|
+
if (f.kind === "call") {
|
|
2068
|
+
for (const [what, claim, at] of [
|
|
2069
|
+
["auth", f.auth, f.authCite],
|
|
2070
|
+
["tls", f.tls, f.tlsCite]
|
|
2071
|
+
]) {
|
|
2072
|
+
if (claim !== void 0 && !at && f.by !== "person")
|
|
2073
|
+
problem(f, "security-uncited", `${label} claims ${what} ${claim} and cites no line for it: give ${what}Cite, the line that sets it (a client certificate, a token, an https URL) and what it writes there, or leave ${what} out`);
|
|
2074
|
+
if (!at)
|
|
2075
|
+
continue;
|
|
2076
|
+
const bad = checkCite({ ...at }, [{ kind: "word", value: at.value }], `${label} ${what}Cite${claim ? ` (${what} ${claim})` : ""}`, false);
|
|
2077
|
+
add(f, bad);
|
|
2078
|
+
if (bad || claim === void 0)
|
|
2079
|
+
continue;
|
|
2080
|
+
const lines = [at, ...at.with ?? []].flatMap((p) => {
|
|
2081
|
+
const l = lineOfValue(linesOf2(p.file), p.line, p.value);
|
|
2082
|
+
return l === void 0 ? [] : [l];
|
|
2083
|
+
});
|
|
2084
|
+
const needs = securityLineKind(what, claim, lines);
|
|
2085
|
+
if (needs)
|
|
2086
|
+
problem(f, "security-line-kind", `${label} claims ${what} ${claim} at ${at.file}:${at.line}${at.with?.length ? " and its parts" : ""}, which write${at.with?.length ? "" : "s"} no ${needs}: cite the line that sets it (with the line that builds it in ${what}Cite.with), or write the ${what} the line sets`);
|
|
2087
|
+
}
|
|
2088
|
+
}
|
|
2089
|
+
if (f.kind === "term") {
|
|
2090
|
+
const m = f.meaning;
|
|
2091
|
+
if (m && m.file !== f.cite.file)
|
|
2092
|
+
problem(f, "term-meaning", `${label} says ${m.file}:${m.line} gives "${f.value}" its meaning, and the value is in ${f.cite.file}: cite the line of the same file (the list's or the block's key) that does`);
|
|
2093
|
+
else if (m && m.line > f.cite.line)
|
|
2094
|
+
problem(f, "term-meaning", `${label} says line ${m.line} gives "${f.value}" its meaning, below the value's line ${f.cite.line}: cite the line above it (the list's or the block's key) that does`);
|
|
2095
|
+
else if (m)
|
|
2096
|
+
add(f, checkCite({ ...m }, [{ kind: "word", value: m.value }], `${label} meaning`, false));
|
|
2097
|
+
const bad = f.note !== void 0 && o.notes ? noteProblem(f.note, o.notes) : void 0;
|
|
2098
|
+
if (bad)
|
|
2099
|
+
problem(f, bad.code, `${label} ${bad.message}`);
|
|
2100
|
+
}
|
|
1973
2101
|
if (f.kind === "framework") {
|
|
1974
2102
|
const bad = frameworkNameProblem(f, rules.frameworks);
|
|
1975
2103
|
if (bad)
|
|
@@ -3922,6 +4050,8 @@ var HOW_OF_FLAG = {
|
|
|
3922
4050
|
"joined-by-repo": "repo",
|
|
3923
4051
|
"joined-by-host": "host",
|
|
3924
4052
|
"declared-caller": "declared",
|
|
4053
|
+
// ADR 0162 §6 (F8): a topic or queue the profile names as an outside system's: a person's word.
|
|
4054
|
+
[DECLARED_TOPIC]: "declared",
|
|
3925
4055
|
// ADR 0160 (O3): answered by an entry of another team's shared map.
|
|
3926
4056
|
[JOINED_TO_SHARED_MAP]: "shared"
|
|
3927
4057
|
};
|
|
@@ -4123,6 +4253,7 @@ function buildEstate(records2) {
|
|
|
4123
4253
|
add(fromRecord(c, `component:${c.id}`, "component", c.id, parent, { type: c.type, runtime: c.runtime, repo: c.repo, path: c.path }, gaps));
|
|
4124
4254
|
}
|
|
4125
4255
|
const endpointNode = /* @__PURE__ */ new Map();
|
|
4256
|
+
const topicByPath = /* @__PURE__ */ new Map();
|
|
4126
4257
|
for (const e of all(records2, "Endpoint")) {
|
|
4127
4258
|
const topic = TOPIC_TYPES.has(e.endpointType);
|
|
4128
4259
|
const id = `${topic ? "topic" : "endpoint"}:${e.id}`;
|
|
@@ -4139,7 +4270,30 @@ function buildEstate(records2) {
|
|
|
4139
4270
|
auth: e.auth
|
|
4140
4271
|
}, gaps));
|
|
4141
4272
|
endpointNode.set(e.id, id);
|
|
4273
|
+
if (topic)
|
|
4274
|
+
topicByPath.set(e.pathOrTopic, id);
|
|
4142
4275
|
}
|
|
4276
|
+
const busTopic = (name, parent, ev = []) => {
|
|
4277
|
+
const known = topicByPath.get(name);
|
|
4278
|
+
if (known)
|
|
4279
|
+
return known;
|
|
4280
|
+
const id = add({
|
|
4281
|
+
id: `topic:bus.${slug2(name)}`,
|
|
4282
|
+
kind: "topic",
|
|
4283
|
+
label: name,
|
|
4284
|
+
parent,
|
|
4285
|
+
state: "current",
|
|
4286
|
+
gaps: [],
|
|
4287
|
+
evidence: ev,
|
|
4288
|
+
properties: { pathOrTopic: name },
|
|
4289
|
+
next: {
|
|
4290
|
+
command: `atticus query "${name}"`,
|
|
4291
|
+
why: "List the records that name this topic or queue."
|
|
4292
|
+
}
|
|
4293
|
+
});
|
|
4294
|
+
topicByPath.set(name, id);
|
|
4295
|
+
return id;
|
|
4296
|
+
};
|
|
4143
4297
|
const storeNode = /* @__PURE__ */ new Map();
|
|
4144
4298
|
for (const d of all(records2, "DataStore")) {
|
|
4145
4299
|
const owner = d.ownerComponent && components.has(d.ownerComponent);
|
|
@@ -4190,6 +4344,29 @@ function buildEstate(records2) {
|
|
|
4190
4344
|
atoms.push({ from: to, to: target, type: "subscribes", evidence: ev, gaps, join: join2 });
|
|
4191
4345
|
continue;
|
|
4192
4346
|
}
|
|
4347
|
+
if (!i.endpoint && (i.via === "event-bus" || i.via === "mq") && i.normalizedPath) {
|
|
4348
|
+
const isSystem = (n) => n.startsWith("system:") || n.startsWith("unknown:");
|
|
4349
|
+
const [home, homeRef] = !isSystem(to) && isSystem(from) ? [from, i.from] : [to, i.to];
|
|
4350
|
+
const t = busTopic(i.normalizedPath, home);
|
|
4351
|
+
const owner = nodes.get(t);
|
|
4352
|
+
if (owner.parent === home && isSystem(home)) {
|
|
4353
|
+
owner.properties = { ...owner.properties, owner: nodes.get(home)?.label ?? home };
|
|
4354
|
+
const b = nodes.get(home)?.properties.boundary;
|
|
4355
|
+
if (outside.has(homeRef) || b === "vendor" || b === "outside")
|
|
4356
|
+
owner.properties.ownerOutside = true;
|
|
4357
|
+
}
|
|
4358
|
+
if (join2.shared)
|
|
4359
|
+
owner.properties = { ...owner.properties, owner: join2.shared.team, ownerOutside: true };
|
|
4360
|
+
if (i.flags?.includes(DECLARED_TOPIC)) {
|
|
4361
|
+
owner.properties = { ...owner.properties, declared: true };
|
|
4362
|
+
owner.gaps = [.../* @__PURE__ */ new Set([...owner.gaps, DECLARED_TOPIC])];
|
|
4363
|
+
owner.evidence = mergeEvidence(owner.evidence, evidenceOf(i.evidence.filter((e) => e.source === "manual")));
|
|
4364
|
+
}
|
|
4365
|
+
atoms.push({ from, to: t, type: "publishes", evidence: ev, gaps, join: join2 });
|
|
4366
|
+
if (to.startsWith("component:"))
|
|
4367
|
+
atoms.push({ from: to, to: t, type: "subscribes", evidence: ev, gaps, join: join2 });
|
|
4368
|
+
continue;
|
|
4369
|
+
}
|
|
4193
4370
|
let caller = from;
|
|
4194
4371
|
if (from.startsWith("component:")) {
|
|
4195
4372
|
caller = add({
|
|
@@ -4222,6 +4399,22 @@ function buildEstate(records2) {
|
|
|
4222
4399
|
join: join2
|
|
4223
4400
|
});
|
|
4224
4401
|
}
|
|
4402
|
+
for (const u of all(records2, "Unresolved")) {
|
|
4403
|
+
if (u.unresolvedKind !== "event-publish" && u.unresolvedKind !== "event-subscribe")
|
|
4404
|
+
continue;
|
|
4405
|
+
if (!u.raw || u.raw.includes("${"))
|
|
4406
|
+
continue;
|
|
4407
|
+
const owner = u.owner ? partNode(u.owner) : "estate";
|
|
4408
|
+
const ev = evidenceOf(u.evidence);
|
|
4409
|
+
const t = busTopic(u.raw, u.unresolvedKind === "event-subscribe" ? owner : "estate", ev);
|
|
4410
|
+
atoms.push({
|
|
4411
|
+
from: owner,
|
|
4412
|
+
to: t,
|
|
4413
|
+
type: u.unresolvedKind === "event-publish" ? "publishes" : "subscribes",
|
|
4414
|
+
evidence: ev,
|
|
4415
|
+
gaps: recordGaps(u)
|
|
4416
|
+
});
|
|
4417
|
+
}
|
|
4225
4418
|
for (const c of components.values())
|
|
4226
4419
|
for (const u of c.uses ?? [])
|
|
4227
4420
|
atoms.push({
|
|
@@ -4274,6 +4467,37 @@ function buildEstate(records2) {
|
|
|
4274
4467
|
gaps: recordGaps(k)
|
|
4275
4468
|
});
|
|
4276
4469
|
}
|
|
4470
|
+
const busy = /* @__PURE__ */ new Set();
|
|
4471
|
+
const internal = (id) => {
|
|
4472
|
+
const n = nodes.get(id);
|
|
4473
|
+
return !!n && n.kind !== "unknown" && n.properties.boundary !== "outside" && n.properties.boundary !== "vendor";
|
|
4474
|
+
};
|
|
4475
|
+
for (const a of atoms)
|
|
4476
|
+
if (a.type === "publishes" || a.type === "subscribes") {
|
|
4477
|
+
if (internal(a.from))
|
|
4478
|
+
busy.add(`${a.type}|${a.to}`);
|
|
4479
|
+
}
|
|
4480
|
+
for (const n of nodes.values()) {
|
|
4481
|
+
if (n.kind !== "topic")
|
|
4482
|
+
continue;
|
|
4483
|
+
if (n.properties.owner === void 0) {
|
|
4484
|
+
let p = n.parent ? nodes.get(n.parent) : void 0;
|
|
4485
|
+
while (p && p.kind !== "system" && p.kind !== "repo" && p.kind !== "estate")
|
|
4486
|
+
p = p.parent ? nodes.get(p.parent) : void 0;
|
|
4487
|
+
if (p && p.kind !== "estate") {
|
|
4488
|
+
let sys = p;
|
|
4489
|
+
while (sys && sys.kind !== "system")
|
|
4490
|
+
sys = sys.parent ? nodes.get(sys.parent) : void 0;
|
|
4491
|
+
n.properties = { ...n.properties, owner: (sys ?? p).label };
|
|
4492
|
+
if (sys && (sys.properties.boundary === "outside" || sys.properties.boundary === "vendor"))
|
|
4493
|
+
n.properties.ownerOutside = true;
|
|
4494
|
+
}
|
|
4495
|
+
}
|
|
4496
|
+
if (!busy.has(`publishes|${n.id}`))
|
|
4497
|
+
n.gaps.push("no-publisher");
|
|
4498
|
+
if (!busy.has(`subscribes|${n.id}`))
|
|
4499
|
+
n.gaps.push("no-listener");
|
|
4500
|
+
}
|
|
4277
4501
|
const kids = /* @__PURE__ */ new Map();
|
|
4278
4502
|
for (const n of nodes.values()) {
|
|
4279
4503
|
if (!n.parent)
|
|
@@ -4438,16 +4662,27 @@ function nodeView(est, id, o) {
|
|
|
4438
4662
|
return ax[i] ?? x;
|
|
4439
4663
|
};
|
|
4440
4664
|
const types = LENS_EDGES[lens];
|
|
4665
|
+
const onBus = (atom, b) => (atom.type === "publishes" || atom.type === "subscribes") && est.nodes.get(b)?.kind === "topic" && b !== id;
|
|
4666
|
+
const drawnTopics = /* @__PURE__ */ new Set();
|
|
4667
|
+
for (const atom of est.atoms) {
|
|
4668
|
+
if (!types.has(atom.type))
|
|
4669
|
+
continue;
|
|
4670
|
+
const a = lift(est, lens, atom.from);
|
|
4671
|
+
const b = lift(est, lens, atom.to);
|
|
4672
|
+
if (onBus(atom, b) && (inside(a) || inside(b)))
|
|
4673
|
+
drawnTopics.add(b);
|
|
4674
|
+
}
|
|
4441
4675
|
const mapped = [];
|
|
4442
4676
|
for (const atom of est.atoms) {
|
|
4443
4677
|
if (!types.has(atom.type))
|
|
4444
4678
|
continue;
|
|
4445
4679
|
const a = lift(est, lens, atom.from);
|
|
4446
4680
|
const b = lift(est, lens, atom.to);
|
|
4447
|
-
|
|
4681
|
+
const bus = onBus(atom, b);
|
|
4682
|
+
if (!inside(a) && !inside(b) && !(bus && drawnTopics.has(b)))
|
|
4448
4683
|
continue;
|
|
4449
4684
|
const from = place(a);
|
|
4450
|
-
const to = place(b);
|
|
4685
|
+
const to = bus ? b : place(b);
|
|
4451
4686
|
if (from === to)
|
|
4452
4687
|
continue;
|
|
4453
4688
|
mapped.push({ from, to, atom });
|
|
@@ -4456,10 +4691,12 @@ function nodeView(est, id, o) {
|
|
|
4456
4691
|
let hidden = 0;
|
|
4457
4692
|
if (!o.all)
|
|
4458
4693
|
({ edges, hidden } = reduceUses(edges));
|
|
4459
|
-
const
|
|
4460
|
-
const
|
|
4694
|
+
const ends = [...new Set(edges.flatMap((e) => [e.from, e.to]))].filter((n) => n !== id && !shownSet.has(n));
|
|
4695
|
+
const deeper = ends.filter((n) => drawnTopics.has(n) && inside(n)).sort();
|
|
4696
|
+
const outside = ends.filter((n) => !deeper.includes(n)).sort();
|
|
4697
|
+
const children = [...shown, ...deeper].map((n) => toNode(est, lens, n));
|
|
4461
4698
|
const firstTable = children.find((c) => c.kind === "table");
|
|
4462
|
-
const suggest = lens === "data" && firstTable ? { mode: "focus", id: firstTable.id } : shown.length + outside.length > DETAILED_LIMIT ? { mode: "group" } : void 0;
|
|
4699
|
+
const suggest = lens === "data" && firstTable ? { mode: "focus", id: firstTable.id } : shown.length + deeper.length + outside.length > DETAILED_LIMIT ? { mode: "group" } : void 0;
|
|
4463
4700
|
return {
|
|
4464
4701
|
lens,
|
|
4465
4702
|
node: toNode(est, lens, id),
|
|
@@ -4818,6 +5055,27 @@ function config(c) {
|
|
|
4818
5055
|
return `- ${code(`${s.key} = ${s.valueOrRef}`)} (${notes.join("; ")}): ${cite(c, ownEvidence(s, c.i.repo))}`;
|
|
4819
5056
|
});
|
|
4820
5057
|
}
|
|
5058
|
+
function terms(c) {
|
|
5059
|
+
const ts = c.i.terms ?? [];
|
|
5060
|
+
const owners = /* @__PURE__ */ new Map();
|
|
5061
|
+
for (const r of records(c, "Component"))
|
|
5062
|
+
for (const f of r.flags ?? []) {
|
|
5063
|
+
const m = /^term:[^=]+=(.+)$/.exec(f);
|
|
5064
|
+
if (m && !c.comps.has(r.id))
|
|
5065
|
+
owners.set(m[1], [...owners.get(m[1]) ?? [], r.id]);
|
|
5066
|
+
}
|
|
5067
|
+
const listing = /* @__PURE__ */ new Map();
|
|
5068
|
+
for (const g of records(c, "AccessGrant"))
|
|
5069
|
+
if (g.flags?.some((f) => f.startsWith("term:"))) {
|
|
5070
|
+
const route = c.byId.get(g.resource);
|
|
5071
|
+
const by = route?.kind === "GatewayRoute" ? route.proxy : g.resource;
|
|
5072
|
+
listing.set(g.subject, [.../* @__PURE__ */ new Set([...listing.get(g.subject) ?? [], by])]);
|
|
5073
|
+
}
|
|
5074
|
+
return [...ts].sort((a, b) => cmp2(a.term, b.term) || cmp2(a.value, b.value)).map((t) => {
|
|
5075
|
+
const means = t.role === "owner" ? `this repo's own id${listing.get(t.value)?.length ? `; let in by ${list(listing.get(t.value).sort())}` : ""}` : t.role === "consumer" ? `a consumer it lets in${owners.get(t.value)?.length ? `: ${list(owners.get(t.value).sort())}` : ", whose own repo no fact names yet"}` : t.role === "none" ? "names no system" : `**open:** nothing says what it means${owners.get(t.value)?.length ? `; the same value is ${list(owners.get(t.value).sort())}'s own id (a possible link)` : ""}`;
|
|
5076
|
+
return `- ${code(t.term)} ${code(t.value)}: ${means} ${cite(c, t.cite)}${t.meaning ? ` (its role from ${cite(c, t.meaning)})` : ""}`;
|
|
5077
|
+
});
|
|
5078
|
+
}
|
|
4821
5079
|
var flowFile = (f) => `flows/${f.id}.md`;
|
|
4822
5080
|
function flowsList(c) {
|
|
4823
5081
|
if (!c.i.flows.length)
|
|
@@ -5054,6 +5312,7 @@ function renderMap(i) {
|
|
|
5054
5312
|
...section("What it stores", stores(base)),
|
|
5055
5313
|
...section("Where it runs", deploys(base)),
|
|
5056
5314
|
...section("Config that names other systems", config(base)),
|
|
5315
|
+
...i.terms?.length ? section("Terms", terms(base)) : [],
|
|
5057
5316
|
...section("Flows", flowsList(base)),
|
|
5058
5317
|
...section("Contracts", contracts(base, files)),
|
|
5059
5318
|
...section("Open questions", openQuestions(base))
|
|
@@ -5367,7 +5626,9 @@ export {
|
|
|
5367
5626
|
sameCommit,
|
|
5368
5627
|
staleMessage,
|
|
5369
5628
|
verifyFacts,
|
|
5629
|
+
readingRank,
|
|
5370
5630
|
FILE_KINDS,
|
|
5631
|
+
fileKinds,
|
|
5371
5632
|
kindsOf,
|
|
5372
5633
|
numberedSlice,
|
|
5373
5634
|
sliceText,
|
|
@@ -5,7 +5,7 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
|
|
|
5
5
|
var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
|
|
6
6
|
|
|
7
7
|
// packages/core/dist/schema/version.js
|
|
8
|
-
var SCHEMA_VERSION =
|
|
8
|
+
var SCHEMA_VERSION = 4;
|
|
9
9
|
|
|
10
10
|
// packages/core/dist/fs.js
|
|
11
11
|
import { randomBytes } from "node:crypto";
|
|
@@ -105,7 +105,9 @@ var LOCAL_ONLY = [
|
|
|
105
105
|
"backups/",
|
|
106
106
|
"history/",
|
|
107
107
|
"probe/",
|
|
108
|
-
"cache/"
|
|
108
|
+
"cache/",
|
|
109
|
+
// ADR 0161: where `atticus map --all` is in the estate, so running it again resumes.
|
|
110
|
+
"map-all/"
|
|
109
111
|
];
|
|
110
112
|
async function ensureLocalIgnore(root) {
|
|
111
113
|
const file = join(root, ".atticus", ".gitignore");
|
|
@@ -14,26 +14,26 @@ import {
|
|
|
14
14
|
scaffoldDialect,
|
|
15
15
|
surveyRepos,
|
|
16
16
|
testDialect
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
17
|
+
} from "./chunk-INCECZ2E.js";
|
|
18
|
+
import "./chunk-22GLUHGE.js";
|
|
19
|
+
import "./chunk-QR65C3DV.js";
|
|
20
|
+
import "./chunk-MLAACAES.js";
|
|
21
|
+
import "./chunk-HY2VVVFZ.js";
|
|
22
|
+
import "./chunk-PJRMMWU4.js";
|
|
23
23
|
import {
|
|
24
24
|
SYNTAX_LANGUAGES,
|
|
25
25
|
syntaxLanguageOf,
|
|
26
26
|
syntaxOutline
|
|
27
|
-
} from "./chunk-
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
27
|
+
} from "./chunk-34NWVIBC.js";
|
|
28
|
+
import "./chunk-RA64IK43.js";
|
|
29
|
+
import "./chunk-MRLCNXXR.js";
|
|
30
|
+
import "./chunk-CQD26SMZ.js";
|
|
31
31
|
import {
|
|
32
32
|
RecordId,
|
|
33
33
|
orgPackDirOf,
|
|
34
34
|
require_dist
|
|
35
|
-
} from "./chunk-
|
|
36
|
-
import "./chunk-
|
|
35
|
+
} from "./chunk-U25OX22K.js";
|
|
36
|
+
import "./chunk-MMB2OHUY.js";
|
|
37
37
|
import {
|
|
38
38
|
__toESM
|
|
39
39
|
} from "./chunk-TV45EUGM.js";
|
|
@@ -5,17 +5,17 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
|
|
|
5
5
|
var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
|
|
6
6
|
import {
|
|
7
7
|
changeStore
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-U5T4A2QV.js";
|
|
9
9
|
import {
|
|
10
10
|
ManualNotifier,
|
|
11
11
|
fileStepStore
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-DW4BM73R.js";
|
|
13
13
|
import {
|
|
14
14
|
readCatalog
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-22GLUHGE.js";
|
|
16
16
|
import {
|
|
17
17
|
readServiceRequestExports
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-HY2VVVFZ.js";
|
|
19
19
|
import {
|
|
20
20
|
Initiative,
|
|
21
21
|
IsoDate,
|
|
@@ -32,10 +32,10 @@ import {
|
|
|
32
32
|
serializeRecord,
|
|
33
33
|
stateDirOf,
|
|
34
34
|
toCanonicalYaml
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-U25OX22K.js";
|
|
36
36
|
import {
|
|
37
37
|
SCHEMA_VERSION
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-MMB2OHUY.js";
|
|
39
39
|
import {
|
|
40
40
|
__toESM
|
|
41
41
|
} from "./chunk-TV45EUGM.js";
|