From bcae91a04c091e6de63dfadb26cd820e1f97f64b Mon Sep 17 00:00:00 2001 From: Prisha Gupta Date: Thu, 12 Sep 2024 09:16:37 +0530 Subject: [PATCH 1/2] Added `.prettierrc` --- ingestion/.prettierrc | 15 + ingestion/bun.lockb | Bin 141687 -> 142055 bytes ingestion/package.json | 72 ++--- ingestion/src/core/dbNode.ts | 138 ++++----- ingestion/src/core/devDocDBNode.ts | 16 +- ingestion/src/core/styleguides.ts | 98 +++--- ingestion/src/main.ts | 55 ++-- .../process/documentation/documentation.ts | 97 +++--- .../documentation/documentation.types.ts | 2 +- .../documentation/documentationPage.ts | 257 ++++++++-------- .../documentation/documentationPage.types.ts | 10 +- ingestion/src/process/ingest/ingest.ts | 237 +++++++-------- ingestion/src/process/prepare/codebase.ts | 249 ++++++++------- .../prepare/processor/core/treeNode.ts | 104 +++---- .../prepare/processor/core/typeAnnotation.ts | 137 ++++----- .../prepare/processor/core/typeArgument.ts | 28 +- .../src/process/prepare/processor/file.ts | 261 ++++++++-------- .../process/prepare/processor/file.types.ts | 2 +- .../prepare/processor/syntax/classes.ts | 158 +++++----- .../process/prepare/processor/syntax/enums.ts | 52 ++-- .../prepare/processor/syntax/functions.ts | 286 +++++++++--------- .../prepare/processor/syntax/interface.ts | 165 +++++----- .../prepare/processor/syntax/namespaces.ts | 72 ++--- .../prepare/processor/syntax/typeAlias.ts | 60 ++-- .../processor/syntax/variableDeclarations.ts | 96 +++--- ingestion/src/process/prepare/sourceFile.ts | 43 ++- .../src/process/prepare/sourceFile.types.ts | 22 +- 27 files changed, 1326 insertions(+), 1406 deletions(-) create mode 100644 ingestion/.prettierrc diff --git a/ingestion/.prettierrc b/ingestion/.prettierrc new file mode 100644 index 0000000..ee502eb --- /dev/null +++ b/ingestion/.prettierrc @@ -0,0 +1,15 @@ +{ + "printWidth": 110, + "tabWidth": 3, + "useTabs": false, + "semi": false, + "singleQuote": false, + "trailingComma": "es5", + "bracketSpacing": true, + "arrowParens": "always", + "requirePragma": false, + "insertPragma": false, + "proseWrap": "always", + "bracketSameLine": false, + "endOfLine": "lf" +} diff --git a/ingestion/bun.lockb b/ingestion/bun.lockb index 48b6e2e3092a09752f6d3f66392b342627e78a6a..5b3e8168f9927bbb2cfc3ceac6d612569a4632a1 100644 GIT binary patch delta 9938 zcmeI2dsJ0b9>@2-yzT|Ail~T)fDb}VR8X#pN}8smsQE&4cs~>sP(TIDkTN8d)Q)zt zDW92`!^}!29-=hPj4K@@C(D*;J}MtGvvQTIrb1KZ`#pExx@#g=ty$yh54V2qcmKZo zclJ4FpM4Jd9{A>z`PymohVb4eX1bi~aiV$nngMSfYkzXZ+Q?P)-s>+MIa;*pgODu` zmQ9ZDV-hSy8{>maoeN(tn&MfyC_l5XFgr6pH!mYICofloBnx2?Vr608lJt4V&COd> z$Zb;7((*Hx3gLzJPG~R4%vqY5FGPMjdwy~1!iCudNJYCB+C!r3{%)HPZ4sYM6~Ytx zd6E!5(DZqE3$im(wHPnUV=~>I+mI$i8?KAD?00b|+%)BP~BQ zJ+nZFj+yqnIZ$q2t!?oNn*Cyy5Wa{;;ppk+&b7zqpxpX6v^_Kv$}=7d4TgGW+uI#^ z%@_vu6RGlj=O1YAo$G1-C~3gd{e9~z53KA|H_cLj^BRII7ft%xEcJ*m0F1(HZhbH& z!?eSJ(UwxwBEI(<5e?LC&x^Kvj@lsjQY#CzS$d=hF&&XflfgF2GDK|i(2k6=S@t0s zhREG$yMl=Oab;u*NYzRfj15lW4R1(I6R@1;qZbnfR7@=?hwsK zWIuH7;J9<-=7~!%OdByU+A;>UF-EUEs0u{(9hdd7xgA3^Tw8$?bj2lN77jhkW=TNA z{UGXMv+P1N5|JB^%knWIo)(5E)Mg37rQ`8=7)O+ih`qQmGSy^iH-ko6zJO^z%(4KR zB@9=Wk*6^ZDTsK=9ko%tY?f+7;}E%OM*?l~E3J8Pj4acJ=EqpB;u>N?a%iyAKwR0e zh)j%Rn%0~jBcIoX7Q~qRvbBGysBR#L0m|J}qCFV6gHXUiW&9v8fpEY=WqyAK zC{$MvDMTq_R*d4TW;oHxr+R?VDsD|((1tNGcJzqKyPGmUmiuRAqS`P{=_DwNv+|6l z7_MCzPgSwA^2}xeo^iZtr*c2D0k``NU|x#-{82%`4N?J1YswBX06WM6%*Qk_3Y9S? zir~mC0?aP}%wGansEn5}Kq+-psO+FfX)%<=S=n(JUo7FJB(0> zolxEbdjPxJ2Uwhy-T%&T?aFR{517AS`K_so*00zPPjDe>fYjoO{Yu$aJuMU}`)Xi- zLS_3Q1}M(TZjKtRUAf&`fO=f{&PxA;@|`rouxK!$3GiC{9k8^jnzh8wpNI9Hkz-eG zeHyrEx1aXYx|W-biG5aOP`Sl9z(KmG;!9ALOU9>Nx&KcA^Dir($~{~K^sfOHXYGXe zw&5CT5+?0>iQg#0;WjK#R;5yt@~N!4;Dd+fp?s=Iv#!Potu}*TZQb&A#))~U3@WSM zDyH&4+bF-S@~Q6dJF0d+<+rA6>WmMnG0sZaZ-6u&Ax6dMFa%i~v7Ty!Ufc?WN_FRpn7xO;fRxnuMEny~0oX zuEN|3?NYIon5Q@;mJ1hNN%BQmWiqhT6r}BiVR7_=c zuZpRi5g(Dp9A^cQVccUio{InDj4jQZ4-@8*m@*;e(gpwAx{7>WTJ?s-4Q} zC8ZxLpNjw5wYAovv@R>(S!rFt2lsbPwL7a>8?nw$+q5zmKi#TV1{q`dwaTM%yKhxY z<&?OkVk+lgi}FoOMrlo%=Za+BxmY?@%^;!B;%g=kX`oxa|WBI977x`s# zz;>ts+X>~I-vf9*Ij=Gi8Zig<{%Z67Y7;MeFcml(?yoj^Z?wAVFHVsDb14GyVIk&0o)I)5`1SSY=ud_*V{E{LtD34-c}oxxD7>=*H!n zZ=N5u;ia>YP1c0#@v(2-S{G7b`ye}F+ki7Z*S)_Q>qXV)8@2p z=a>3wm3KO8ad#%j3EGxB@!I$nt9BbvoEF;>uYHTCx@7|1!Zx?WZ?2No&53e?d~EYx z8L!Wh(yCh};%Rz?qs2`_M>{L^mZ|a zF2KteyFEmIsIPR@*7^6WO$n2iOuw$r?IzEZLi>YgQIX!OK*n$}f2YM>P!)5~$^<@w zSR64&slDM~!LM?-i06wkmPF<8M<&1avm_~xYtn)26eU@C{B9M6y79P7Q6^TlB3dP; zDvz&;$0?6*c6cBb;G^mpDvw`?JE*)&<$1xo23WF`$Co4D7!JN^I9`tMbjb6j-DGEQF4{%%U>C6K)@l&Q)UO$ z`C5phu}FECUB*g;qp?_d9D2tqJ-(b`-+sXHo|P9G|BcIW6v~5NqVoJv=kG_17m&+T zBEK`^cT+~;+beDy0HW-cC{`PHMLa}#%T-<=;xNE7e_VOpP!B+z2f9LeL8u2R?+K`J z{exi!Az-1wGYJ8~$}5Ai+8yu>J`eOs<@G?F--39cPbrT>p95G{DX$mmd4?mz)5;6w zoF1-B4mtjd2lTR~(zlc+(*toZv_duYMtwP8|Ia9|59*HtmNm-ji~3@~eXdm=UnKCW zI`%2nDX$;u8v*;^5)1#0UvE9fUuCdxeMOTm8_H;)tXJLu)cJb?7EU4N4FsELplnng zU&`+X%zsXKy!17IZJP47^OB={!OJ4_Czi?bZk#5!5Pk=4gFAq4d2WK2h2FhLhRO?i zY>|u%Y=X5LybAV!SHLc?1MJkd6v+TNSbw8P#&?C0`QxddFO~uR*AW)M zxeWaTyn*^f=qcT&L?)O1301zh91Z(nFa~Txyd7}tIbNH94z_@Fzy}E*PMlbrNPJ%K zi8u*_f!=_(WfyQ7{e1u`fd#P(a0PC_U1C1-cMMm-CGZJ21$h6S0B?iiy3cayS2`3` z&H-LSUgMo$7kCBi2H&8+FToA)1-JsPf=|IEz&DETgR#gx1Gb{hXBwYjd}b{Kd}-eo zJP5jiZXgH*^C9^mHu6AV2A5I40-C@(;3U`rUIf1dyz_Da@3yI68ki1dfXN^l@TMC9 zV!%US6sQLWK^@ows=!|G8gGWLu;T*22N<7Md|2|~$cJG#=m&a%5U>>+Z3D%Cw!T}$se1I+llK{O?<#NzpA9(B$$)KXAe}cs1}aQs0#Aeo$h$uu=kPfZQHe{2j0}#53NFyI%4H|Ls9gT5vttSC_*)#ui}Ko()$;vtJVXcA z$Vih&*5}vA2$NT`zO_b9G=(JVpVi2BlQ5{+wuQdBek1x7)mGl1~f{9~d5i z`LFk=laaDPkFP_XmMTB)Gg(8HRim4t*Zt6PPQP^!C+Rz1AJ8CI zdWIdgU!tl;{a}L}Q*%hJl%8iA?dIe@wQCN`$|O(6bqY_{cZ8V&{T*@te*GQQev#q$ LSKGF$X`b~zwUrI2 delta 9777 zcmeI2dvH|M9mnt4Ja-{r1W7^&iBVo6DHw4PkVuOagouFhlq3)$i5LP2NC@Hv6c7qZ zxY8>=@GYpdm9aMA<V{hr_V z{O-AT&wcFKv-!cE`?M>njm=zKW8a?Snk^$E<(UODyP3sZ6) z-SExJe$zMLs4Qukk{igb+fjd2C^WxjPDORieCJ4s`)a6X;D;sdhoPR4mJ-M5;5dzE zU*tGJ^wF^6bVfJLa-0yljrMf3ys~Cq)tp(iwH34G%&Dqfuyb}azYgt0dsW?lxi{3z zc5W<>ZdYM_XHInc>BQR4?Alr76?Kkt2%r8#ja@3D9aOjvcF3JR@jA!pLfS|UUfuSd z8;xC5o3B96L~~Fb?#JZkq5CVN?XkQa#Omkwv@8Gls%N@)oF95-W4D$`!G*jh-fm-p zo8C8^^ajyT_fXETV7SzAE;#AmNHoYzs~Q&EM(sj;<2L1lgTExYnke9==Y@k`DT}tH zxUH9mgXKg+X-jrnFCCIfpxq=YG4P8r_uvg9g6WK_G7{X@zF{-g9aCKtyccgcp5vxZ z9Fj_K1%Yu}!$VRTwIR`LdS4MACH;VCs9QW}Snwliqx>u#(WRV$=x&?N3nw)a4R<&2 z?)Feq7RTK;9872YwHu=D;ouCS5kyHks^AtPyyM~swT+Ee9^ z*8Wu)3p&DaR*O-Uc-1=^@4Hb|Ji*5Cs&{q`sK3d!U8?;|18p}0lvf&k|5OOHK^dr& z`LF-3>YyCdK?NwE%f~NL#at$iMy>{wUkl1#1S(R+H!7e+Vil=6SYovvRf$)1+z9Gm zC8$WXqg9}Hv=&t2RsF65ZMWX)?I`&XXA>25uo+aOO7s*^K9A}E?g8!aUaR+^DpK`( zzXFQXIPM?oyHzDoeGIhu6QB~W>h4M3jjFnN3Y5RY`faJ+)^}~Y)VS44GlJ@^S+2Wb zX+}hS?NUUMs&%&lO1$!LclP^kRJGlYKzhLX@hbnI_1jXl|5W3zgZ#NoY)^GyFMzbw z>S0txst#WS_4hI;?-fvyDn6osa!TF18$uC{<55t`F;IzDb@>LU{Y_AjYL{<={Ntb! zuic10^4+K^{}UTawcQEFx!$*^oK!WaRcibos;UNf(E%r0U#gB%ZQPz3clojm_mO3p z?su1E`lmjPt+Zh$yR|f#xGSn&yIH?2RZ|8p(oCBt)pp%&ELDGbsD|+zR88j^`{Ep)J)oPog~yEwg!2RcF~a zUUeg1XZ_FA9_=I=_mbrq)09xjiw@%kn=RFD7NW9ht>2z1e+hXy5zDom`_A%=h(_@i zB8~1U+sl8W`XF3y^V?IUY~ZCMx&_s{xDS=THFo-`_(iG%dBDc;D*qwtOI3Z?>Lb>d z>J4qPu~gOVHkM`*@3Zkf!|7K!W&Drh$jKx5{5wu(lUBR^7uCprv!V8Jm=~Rb7wrz? zHH3fE`chSoS^c&3rK-Me^^K@bcHWdriC0-~@uD3bx9#z&DZn4`)$}LZ9%1feMDJeEDUS$P&QP-gWPd8OMSfiue zAf`0=vt7-2RiwI0+nez!PwnbgPc+@ly+B2(_|(kTUfu&RwLu$GU)(Qo=4igx+d>MaDfpui-Ku7+msqdFN^UY(2?M{8&cj_}v&wSgP@iKz`%vk5}^vsuQn1Rq! zI9UT?Ro8WUGhXGX{q)Q?ZU)S=LF3lej923&U*mjw=F1?&&xlXYe06#3v$x+D*3&cJ z_!+N;RIx_&|6=Cb&3`NZG4p+9>4pmzx=AO-x*vR!=FU7Zmc{nRPfT&QpGe!BX2zQ0 z&C|@3%~MU<=DkGYy`V8uyi{Y-ylR6n!P_aLMMh2lW0F@Dz^Dvh9FlR3mz98#nSil8 z0b`2y6B!3&3`oS7<}FRcs87UrO~wqbUlK;&B#aG77&E;iGG38!Nis&Mw>BB$wq%TV zWX$p|PQe(Gf^lC8M!EMp8NZcLoQhH5ZArzrD;48o8FRfcL5$HsjHiMaRo*{jd>~_H z2xFf2cnD*A2qUcnMzuGs1IE-27<*;Zc)^YssU0z@J7O&KcFJgxk)!de^QzJ?D$_6y z$yn@Vb;8K(WYU_KcQXIXN{jvCR9?b@kGHThtMmJ^5_5Vm1!j4#u@`zKs?Ub`H4C&< z>r^$j_BBNbNk>_vI!l`jYrg7y<6RyqtBXDc7A*1d7n!2SCnuss8%?*D^BD>#u~;4J ztE}qS-#^q*IG{>J{i`VX}u)kfz(w>tfy~0gQN9`Q)*2;q=(wXGVAGEUl1ud`ij-W=<7z&j2q71q;|#(TaKUGMQ%Gqgzbnl!VAfQDZ#~ zvp&-`8VjtaCCb>^otBi;w}w78FV$J*&tE&)kLutT**tw|y#RFZksEDdcY;Dt(VCMs z&W6DWtPF)9jll3%GT0N8JuV-l;Igg+xrpnEz z-pSdJYrRHP)qLiYdw9hUjRCQb=Etd`emR4_=e6ufBsKh z8&P$l#W{KU?%xC|T9A|X6=(#N+pRZ{x_(wrxx;#csJp)7I2)~}bG`$V-(I_J-V z8aG+<0bKx;KP>ke>dm^I9}@l(K7x-y%Q61|{Z#Uz@$#3N-e#XSW~nL6c?A1Wcnltf zhu{Ht5DL64OHH=9$a{9FnbNHjPG?AmGeP(7amUMVF!|=s-enD@fBLKR|4aB4=nmcE zt!Oa0Cf9qg!DRH(g`g9!D^d$O37~sSi$W(Ls1Ci?8ccT95>oV8{W|Cem7}PZ(YAZ( z%S>rRi;g3)zY1T2t;F|(23-T?!Z+bAm<@WIlz}cUT~2yx=($)7eV{Ms=F9^9wDA(? zOT50&1RwztAqhUxmHjr2$KZ8n1>MC5;dwX!g8YhhrXG=cBo2V{;atcAtzc}0deA+2Gc1I1m;+@n3ueP)mCg{HWHardEU=!%Ryag7)Vt58t!D`UQ z;u)};x}MXzpRa>e5She_K5M%{S4e{sBprpHz<$tud@<;GtYuGa97E4zJ%3-I?MLuq z7yx>#>M=SGia}m4^3DN04fA2N&Y&7Z11tbN#$t)`H-eO8U++X$!VcIB&%*a0^JaRa zj9#q=On#0|=VH*Qtpi<{I_MeXR5Xu_n8K9E6ymQEPewHm6Jb1D2{rg*(JNpa=tflA zRWJdr2EEy9&^e%+w-jcAZrtfG6*M^d^+tnS0&1HD-1JvEg{LF0f-fl6)*|Gly+PZr8*S3G$>9K&hd2qp?0xp6I zuXv{^WOlh?rzsBXobA1^(`07H{;Mc--|Mg5n(}60z?57-{veLQOW0)!v+chVHD2=W zz8we87|blaBwR3130=GiyG$0dVNs|clH>2(O>A|!h%8Jg2KWaZ`f{=l^y$^ zrI!ASR(AYOUg@b#S9mof7}s07+Z3B ({ - target: use.name, - relation: "USES", - })), - - nameEmbeddings: [], - codeEmbeddings: [], - - isFile: false, - descriptor: "Node", - }) - } - - getNodeName(): string { - return this.name - } + id: string + name: string + type: string + + code: string + + filePath: string + relations: DBNodeRelation[] + + nameEmbeddings: number[] + codeEmbeddings: number[] + + isFile: boolean + descriptor: "Node" | string + + constructor(node: { + id: string + name: string + type: string + code: string + filePath: string + relations: DBNodeRelation[] + nameEmbeddings: number[] + codeEmbeddings: number[] + descriptor: "Node" | string + + isFile?: boolean + }) { + this.id = node.id + this.name = node.name + this.type = node.type + + this.code = node.code + + this.filePath = node.filePath + this.relations = node.relations + + this.nameEmbeddings = node.nameEmbeddings + this.codeEmbeddings = node.codeEmbeddings + + this.isFile = node.isFile || false + this.descriptor = node.descriptor + } + + static fromTreeNode(node: TreeNode): DBNode { + return new DBNode({ + id: node.getID(), + name: node.name, + type: node.type, + + code: node.body, + + filePath: node.sourceFileRelativePath, + relations: node.uses.map((use) => ({ + target: use.name, + relation: "USES", + })), + + nameEmbeddings: [], + codeEmbeddings: [], + + isFile: false, + descriptor: "Node", + }) + } + + getNodeName(): string { + return this.name + } } diff --git a/ingestion/src/core/devDocDBNode.ts b/ingestion/src/core/devDocDBNode.ts index eb6fb4c..2a3e7ec 100644 --- a/ingestion/src/core/devDocDBNode.ts +++ b/ingestion/src/core/devDocDBNode.ts @@ -1,16 +1,16 @@ export type DevDocDBNodeRelationType = "CONTAINS" export type DevDocDBNodeRelation = { - target: string - relation: DevDocDBNodeRelationType + target: string + relation: DevDocDBNodeRelationType } export type DevDocDBNode = { - id: string - relations: DevDocDBNodeRelation[] + id: string + relations: DevDocDBNodeRelation[] - url: string - element: string + url: string + element: string - content: string - contentEmbeddings: number[] + content: string + contentEmbeddings: number[] } diff --git a/ingestion/src/core/styleguides.ts b/ingestion/src/core/styleguides.ts index cffc35e..fd00e1b 100644 --- a/ingestion/src/core/styleguides.ts +++ b/ingestion/src/core/styleguides.ts @@ -4,72 +4,72 @@ import { db } from "./neo4j" import { Styleguides } from "./styleguides.types" const links = [ - "https://github.com/RocketChat/Rocket.Chat/raw/develop/.prettierrc", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/postcss.config.js", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.stylelintrc", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.stylelintignore", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.postcssrc", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.eslintrc.json", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/tsconfig.json", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/scalingo.json", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/tsconfig.typecheck.json", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/tsconfig.webpack.json", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.babelrc", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.codeclimate.yml", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.storybook/babel.config.js", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/.editorconfig", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/.kodiak.toml", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/tsconfig.base.client.json", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/tsconfig.base.json", - "https://github.com/RocketChat/Rocket.Chat/raw/develop/tsconfig.base.server.json", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/.prettierrc", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/postcss.config.js", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.stylelintrc", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.stylelintignore", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.postcssrc", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.eslintrc.json", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/tsconfig.json", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/scalingo.json", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/tsconfig.typecheck.json", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/tsconfig.webpack.json", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.babelrc", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.codeclimate.yml", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/apps/meteor/.storybook/babel.config.js", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/.editorconfig", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/.kodiak.toml", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/tsconfig.base.client.json", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/tsconfig.base.json", + "https://github.com/RocketChat/Rocket.Chat/raw/develop/tsconfig.base.server.json", ] let styleguides: Styleguides = {} async function fetchStyleguide(url: string) { - const res = await fetch(url) - const data = await res.text() - const filePath = url.split("raw/develop").at(-1)! - styleguides[filePath] = data + const res = await fetch(url) + const data = await res.text() + const filePath = url.split("raw/develop").at(-1)! + styleguides[filePath] = data } async function fetchStyleguides(): Promise { - await Promise.all(links.map(fetchStyleguide)) - const result = { ...styleguides } - styleguides = {} + await Promise.all(links.map(fetchStyleguide)) + const result = { ...styleguides } + styleguides = {} - return result + return result } export async function insertStyleguides() { - const styleguides = await fetchStyleguides() - writeFileSync("styleguides.data.json", JSON.stringify(styleguides, null, 2)) + const styleguides = await fetchStyleguides() + writeFileSync("styleguides.data.json", JSON.stringify(styleguides, null, 2)) - const transaction = db.beginTransaction() + const transaction = db.beginTransaction() - transaction.run(` + transaction.run(` MATCH (n:Styleguide) DETACH DELETE n `) - const jobs = [] - for (const [filePath, data] of Object.entries(styleguides)) { - const node = new DBNode({ - id: filePath, - name: filePath, - type: "", - code: data, - filePath: filePath, - relations: [], - nameEmbeddings: [], - codeEmbeddings: [], - descriptor: "Styleguide", - isFile: true, - }) - const job = transaction.run(node.getDBInsertQuery(), node) - jobs.push(job) - } - await Promise.all(jobs) + const jobs = [] + for (const [filePath, data] of Object.entries(styleguides)) { + const node = new DBNode({ + id: filePath, + name: filePath, + type: "", + code: data, + filePath: filePath, + relations: [], + nameEmbeddings: [], + codeEmbeddings: [], + descriptor: "Styleguide", + isFile: true, + }) + const job = transaction.run(node.getDBInsertQuery(), node) + jobs.push(job) + } + await Promise.all(jobs) - await transaction.commit() + await transaction.commit() } diff --git a/ingestion/src/main.ts b/ingestion/src/main.ts index 3e26712..84b6dfb 100644 --- a/ingestion/src/main.ts +++ b/ingestion/src/main.ts @@ -8,37 +8,42 @@ import { Codebase } from "./process/prepare/codebase" import { FileProcessor } from "./process/prepare/processor/file" namespace Algorithms { - export async function execCommand(command: string) { - await new Promise((resolve, reject) => { - exec(command, (error, stdout, stderr) => { - if (error) { - reject(`Error: ${error.message}`) - return - } - if (stderr) { - reject(`Stderr: ${stderr}`) - return - } - resolve(stdout) - }) - }) - } + export async function execCommand(command: string) { + await new Promise((resolve, reject) => { + console.log(`🕒 Cloning repository: "${command}"`) + + exec(command, (error, stdout, stderr) => { + if (error) { + reject(`Error: ${error.message}`) + return + } + resolve(stdout) + }) + }) + } } async function main() { - const sessionID = uuid() + let tries = 5 + while (tries--) { + try { + const sessionID = uuid() - await Algorithms.execCommand(`git clone ${REPO_URI} ${sessionID}`) - { - const codebase = new Codebase(sessionID, new FileProcessor(), 1) - await codebase.process() + await Algorithms.execCommand(`git clone ${REPO_URI} ${sessionID}`) + { + const codebase = new Codebase(sessionID, new FileProcessor(), 1) + await codebase.process() - const docs = new Documentation() - await docs.prepare(codebase.dataDirPath) + const docs = new Documentation() + await docs.prepare(codebase.dataDirPath) - await insertDataIntoDB(codebase.dataDirPath) - } - await Algorithms.execCommand(`rm -rf ${sessionID}`) + await insertDataIntoDB(codebase.dataDirPath) + } + await Algorithms.execCommand(`rm -rf ${sessionID}`) + } catch { + console.error("Retrying", tries) + } + } } main() diff --git a/ingestion/src/process/documentation/documentation.ts b/ingestion/src/process/documentation/documentation.ts index 56c8e10..38aa9f1 100644 --- a/ingestion/src/process/documentation/documentation.ts +++ b/ingestion/src/process/documentation/documentation.ts @@ -7,65 +7,58 @@ import { IDocumentation } from "./documentation.types" import { DocumentationPage } from "./documentationPage" export class Documentation implements IDocumentation { - private async gatherDocumentationLinks() { - const browser = await puppeteer.launch({ - headless: true, // Ensure it is headless for CI environments - args: ["--no-sandbox", "--disable-setuid-sandbox"], // Required for CI environments like GitHub Actions - }) + private async gatherDocumentationLinks() { + const browser = await puppeteer.launch({ + headless: true, // Ensure it is headless for CI environments + args: ["--no-sandbox", "--disable-setuid-sandbox"], // Required for CI environments like GitHub Actions + }) - const page = await browser.newPage() - await page.goto(DOCUMENTATION_URL) + const page = await browser.newPage() + await page.goto(DOCUMENTATION_URL) - try { - const links = await page.$$eval(".leftsidebarnav a", (links) => - links.map((x) => x.href).filter(Boolean) - ) - return links - } finally { - await browser.close() - } - } + try { + const links = await page.$$eval(".leftsidebarnav a", (links) => + links.map((x) => x.href).filter(Boolean) + ) + return links + } finally { + await browser.close() + } + } - private async prepareDevDocsNodes(): Promise { - const urls = await this.gatherDocumentationLinks() + private async prepareDevDocsNodes(): Promise { + const urls = await this.gatherDocumentationLinks() - const docPages = urls.map((x) => new DocumentationPage(x)) + const docPages = urls.map((x) => new DocumentationPage(x)) - const failed: string[] = [] - const nodes = await Promise.all( - docPages.map(async (x) => { - try { - return await x.fetchNodes() - } catch { - failed.push(x.url) - return [] - } - }) - ) + const failed: string[] = [] + const nodes = await Promise.all( + docPages.map(async (x) => { + try { + return await x.fetchNodes() + } catch { + failed.push(x.url) + return [] + } + }) + ) - if (failed.length > 0) { - console.clear() - console.warn( - `Failed to fetch nodes for the following URLs: ${failed.join(", ")}` - ) - } + if (failed.length > 0) { + console.clear() + console.warn(`Failed to fetch nodes for the following URLs: ${failed.join(", ")}`) + } - const flattenedNodes = nodes.flat() - return flattenedNodes - } + const flattenedNodes = nodes.flat() + return flattenedNodes + } - async prepare(dataDirPath: string) { - const nodes = await this.prepareDevDocsNodes() + async prepare(dataDirPath: string) { + const nodes = await this.prepareDevDocsNodes() - const jobs = [] - for (const node of nodes) { - jobs.push( - writeFile( - `${dataDirPath}/docs-${node.id}.json`, - JSON.stringify([node], null, 2) - ) - ) - } - await Promise.all(jobs) - } + const jobs = [] + for (const node of nodes) { + jobs.push(writeFile(`${dataDirPath}/docs-${node.id}.json`, JSON.stringify([node], null, 2))) + } + await Promise.all(jobs) + } } diff --git a/ingestion/src/process/documentation/documentation.types.ts b/ingestion/src/process/documentation/documentation.types.ts index bf9c77e..db26ddc 100644 --- a/ingestion/src/process/documentation/documentation.types.ts +++ b/ingestion/src/process/documentation/documentation.types.ts @@ -1,3 +1,3 @@ export interface IDocumentation { - prepare(dataDirPath: string): Promise + prepare(dataDirPath: string): Promise } diff --git a/ingestion/src/process/documentation/documentationPage.ts b/ingestion/src/process/documentation/documentationPage.ts index 1053683..55f2e37 100644 --- a/ingestion/src/process/documentation/documentationPage.ts +++ b/ingestion/src/process/documentation/documentationPage.ts @@ -2,141 +2,128 @@ import { JSDOM } from "jsdom" import { customAlphabet } from "nanoid" import { DevDocDBNode } from "../../core/devDocDBNode" -import { - DocumentPageElement_t, - IDocumentationPage, -} from "./documentationPage.types" +import { DocumentPageElement_t, IDocumentationPage } from "./documentationPage.types" export class DocumentationPage implements IDocumentationPage { - private readonly _url: string - get url() { - return this._url - } - - constructor(url: string) { - this._url = url - } - - private parseHtmlToHierarchy(root: HTMLDivElement): DocumentPageElement_t[] { - const elements = Array.from( - root.querySelectorAll("h1, h2, h3, h4, h5, h6, p, pre") - ) - - function parseElements(elements: Element[]): DocumentPageElement_t[] { - const hierarchy: DocumentPageElement_t[] = [] - const stack: DocumentPageElement_t[] = [] - - elements.forEach((el) => { - const tagName = el.tagName.toLowerCase() - const content = el.textContent?.trim() || "" - - const newElement: DocumentPageElement_t = { - id: customAlphabet("1234567890abcdef", 10)(), - element: tagName, - content: "", - children: [], - } - - if (!tagName.startsWith("h")) { - newElement.content = content - if (stack.length > 0) { - stack[stack.length - 1].children!.push(newElement) - } - } else { - // Extract the heading level from tagName ('h1' -> 1, 'h2' -> 2, etc.) - const headingLevel = parseInt(tagName[1]) - - newElement.content = content - - // Adjust the stack based on heading level - while ( - stack.length > 0 && - getHeadingLevel(stack[stack.length - 1].element) >= headingLevel - ) { - stack.pop() - } - - if (stack.length === 0) { - // Top-level heading - hierarchy.push(newElement) - } else { - // Add as a child of the last heading in the stack - stack[stack.length - 1].children.push(newElement) - } - - stack.push(newElement) - } - }) - - return hierarchy - } - - // Helper function to extract heading level from 'h1', 'h2', ..., 'h6' - function getHeadingLevel(tagName: string): number { - return parseInt(tagName[1], 10) - } - - return parseElements(elements) - } - - private traverseHierarchy( - node: DocumentPageElement_t, - devDocsDBNodes: DevDocDBNode[] - ): DevDocDBNode { - const devDocDBNode: DevDocDBNode = { - id: node.id, - relations: [], - - url: this._url, - element: node.element, - - content: node.content || "", - contentEmbeddings: [], - } - - if (node.children) { - node.children.forEach((child) => { - const childNode = this.traverseHierarchy(child, devDocsDBNodes) - devDocDBNode.relations.push({ - target: childNode.id, - relation: "CONTAINS", - }) - devDocsDBNodes.push(childNode) - }) - } - - return devDocDBNode - } - - private convertHeirarchyToDevDocsDBNodes( - hierarchy: DocumentPageElement_t[] - ): DevDocDBNode[] { - const devDocsDBNodes: DevDocDBNode[] = [] - for (const node of hierarchy) { - const devDocDBNode = this.traverseHierarchy(node, devDocsDBNodes) - devDocsDBNodes.push(devDocDBNode) - } - - return devDocsDBNodes - } - - async fetchNodes() { - const res = await fetch(this.url) - const body = await res.text() - const { window, document } = new JSDOM(body).window - - const content = document.evaluate( - `//*[@id="doc_content_block"]`, - document, - null, - window.XPathResult.FIRST_ORDERED_NODE_TYPE, - null - ).singleNodeValue as HTMLDivElement - if (!content) throw new Error("Content not found") - - const hierarchy = this.parseHtmlToHierarchy(content) - const nodes = this.convertHeirarchyToDevDocsDBNodes(hierarchy) - - return nodes - } + private readonly _url: string + get url() { + return this._url + } + + constructor(url: string) { + this._url = url + } + + private parseHtmlToHierarchy(root: HTMLDivElement): DocumentPageElement_t[] { + const elements = Array.from(root.querySelectorAll("h1, h2, h3, h4, h5, h6, p, pre")) + + function parseElements(elements: Element[]): DocumentPageElement_t[] { + const hierarchy: DocumentPageElement_t[] = [] + const stack: DocumentPageElement_t[] = [] + + elements.forEach((el) => { + const tagName = el.tagName.toLowerCase() + const content = el.textContent?.trim() || "" + + const newElement: DocumentPageElement_t = { + id: customAlphabet("1234567890abcdef", 10)(), + element: tagName, + content: "", + children: [], + } + + if (!tagName.startsWith("h")) { + newElement.content = content + if (stack.length > 0) { + stack[stack.length - 1].children!.push(newElement) + } + } else { + // Extract the heading level from tagName ('h1' -> 1, 'h2' -> 2, etc.) + const headingLevel = parseInt(tagName[1]) + + newElement.content = content + + // Adjust the stack based on heading level + while (stack.length > 0 && getHeadingLevel(stack[stack.length - 1].element) >= headingLevel) { + stack.pop() + } + + if (stack.length === 0) { + // Top-level heading + hierarchy.push(newElement) + } else { + // Add as a child of the last heading in the stack + stack[stack.length - 1].children.push(newElement) + } + + stack.push(newElement) + } + }) + + return hierarchy + } + + // Helper function to extract heading level from 'h1', 'h2', ..., 'h6' + function getHeadingLevel(tagName: string): number { + return parseInt(tagName[1], 10) + } + + return parseElements(elements) + } + + private traverseHierarchy(node: DocumentPageElement_t, devDocsDBNodes: DevDocDBNode[]): DevDocDBNode { + const devDocDBNode: DevDocDBNode = { + id: node.id, + relations: [], + + url: this._url, + element: node.element, + + content: node.content || "", + contentEmbeddings: [], + } + + if (node.children) { + node.children.forEach((child) => { + const childNode = this.traverseHierarchy(child, devDocsDBNodes) + devDocDBNode.relations.push({ + target: childNode.id, + relation: "CONTAINS", + }) + devDocsDBNodes.push(childNode) + }) + } + + return devDocDBNode + } + + private convertHeirarchyToDevDocsDBNodes(hierarchy: DocumentPageElement_t[]): DevDocDBNode[] { + const devDocsDBNodes: DevDocDBNode[] = [] + for (const node of hierarchy) { + const devDocDBNode = this.traverseHierarchy(node, devDocsDBNodes) + devDocsDBNodes.push(devDocDBNode) + } + + return devDocsDBNodes + } + + async fetchNodes() { + const res = await fetch(this.url) + const body = await res.text() + const { window, document } = new JSDOM(body).window + + const content = document.evaluate( + `//*[@id="doc_content_block"]`, + document, + null, + window.XPathResult.FIRST_ORDERED_NODE_TYPE, + null + ).singleNodeValue as HTMLDivElement + if (!content) throw new Error("Content not found") + + const hierarchy = this.parseHtmlToHierarchy(content) + const nodes = this.convertHeirarchyToDevDocsDBNodes(hierarchy) + + return nodes + } } diff --git a/ingestion/src/process/documentation/documentationPage.types.ts b/ingestion/src/process/documentation/documentationPage.types.ts index e6fb36a..c24e391 100644 --- a/ingestion/src/process/documentation/documentationPage.types.ts +++ b/ingestion/src/process/documentation/documentationPage.types.ts @@ -1,12 +1,12 @@ import { DevDocDBNode } from "../../core/devDocDBNode" export type DocumentPageElement_t = { - id: string - element: string - content: string - children: DocumentPageElement_t[] + id: string + element: string + content: string + children: DocumentPageElement_t[] } export interface IDocumentationPage { - fetchNodes(): Promise + fetchNodes(): Promise } diff --git a/ingestion/src/process/ingest/ingest.ts b/ingestion/src/process/ingest/ingest.ts index be671ef..026ae31 100644 --- a/ingestion/src/process/ingest/ingest.ts +++ b/ingestion/src/process/ingest/ingest.ts @@ -8,131 +8,120 @@ import { DBNode, DBNodeRelation } from "../../core/dbNode" import { DevDocDBNodeRelation } from "../../core/devDocDBNode" namespace Algorithms { - export async function purgeDB(): Promise { - try { - const res = await fetch(`${RC_APP_URI}/purgeDB`, { - method: "POST", - headers: { - accept: "application/json", - "Content-Type": "application/json", - }, - }) - - return res.status === 200 - } catch (e) { - console.log(e) - return false - } - } - - export async function insertBatch( - batchID: string, - nodes: DBNode[] - ): Promise { - try { - const res = await fetch(`${RC_APP_URI}/ingest`, { - method: "POST", - headers: { - accept: "application/json", - "Content-Type": "application/json", - }, - body: JSON.stringify({ nodes, batchID }), - }) - - return res.status === 200 - } catch (e) { - console.log(e) - return false - } - } - - export async function establishRelations( - relations: DBNodeRelation[] - ): Promise { - try { - const res = await fetch(`${RC_APP_URI}/establishRelations`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ relations }), - }) - - return res.status === 200 - } catch (e) { - console.log(e) - return false - } - } + export async function purgeDB(): Promise { + try { + const res = await fetch(`${RC_APP_URI}/purgeDB`, { + method: "POST", + headers: { + accept: "application/json", + "Content-Type": "application/json", + }, + }) + + return res.status === 200 + } catch (e) { + console.log(e) + return false + } + } + + export async function insertBatch(batchID: string, nodes: DBNode[]): Promise { + try { + const res = await fetch(`${RC_APP_URI}/ingest`, { + method: "POST", + headers: { + accept: "application/json", + "Content-Type": "application/json", + }, + body: JSON.stringify({ nodes, batchID }), + }) + + return res.status === 200 + } catch (e) { + console.log(e) + return false + } + } + + export async function establishRelations(relations: DBNodeRelation[]): Promise { + try { + const res = await fetch(`${RC_APP_URI}/establishRelations`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ relations }), + }) + + return res.status === 200 + } catch (e) { + console.log(e) + return false + } + } } export async function insertDataIntoDB(batchesDirPath: string) { - console.log("🕒 Inserting") - - const files = readdirSync(batchesDirPath).map((file) => - path.resolve(batchesDirPath, file) - ) - - /* Step 1: Empty DB */ - { - const success = await Algorithms.purgeDB() - if (!success) { - console.log("❌ Error emptying db") - return - } - } - - /* Step 2: Insert batch */ - { - const errorBatches: Set = new Set() - - const relations: (DBNodeRelation | DevDocDBNodeRelation)[] = [] - - // Insert each batch - for (let i = 0; i < files.length; i += 100) { - const group = files.slice(i, i + 100) - const jobs = group.map(async (file) => { - const batchID = uuid() - const data = await readFile(file, "utf-8") - const nodes = Object.values(JSON.parse(data)) as DBNode[] - - for (const node of nodes) - relations.push( - ...node.relations.map((relation) => ({ - source: node.id, - target: relation.target, - relation: relation.relation, - })) - ) - - const success = await Algorithms.insertBatch(batchID, nodes) - if (success) { - console.log(`📦 ${batchID} inserted`) - } else { - errorBatches.add(batchID) - } - }) - await Promise.all(jobs) - } - if (errorBatches.size > 0) console.log("❌ Error batches", errorBatches) - - // Establish relations - const batchSize = 1000 - for (let i = 0; i < relations.length; i += batchSize) { - const success = await Algorithms.establishRelations( - relations.slice(i, i + batchSize) - ) - if (success) { - console.log(`🔗 Relations established ${i + 1000}/${relations.length}`) - } else { - console.log( - `❌ Error establishing relations ${i + 1000}/${relations.length}` - ) - } - } - - console.log("🔗 All Relations established") - } - - console.log("✅ Inserted") + console.log("🕒 Inserting") + + const files = readdirSync(batchesDirPath).map((file) => path.resolve(batchesDirPath, file)) + + /* Step 1: Empty DB */ + { + const success = await Algorithms.purgeDB() + if (!success) { + console.log("❌ Error emptying db") + return + } + } + + /* Step 2: Insert batch */ + { + const errorBatches: Set = new Set() + + const relations: (DBNodeRelation | DevDocDBNodeRelation)[] = [] + + // Insert each batch + for (let i = 0; i < files.length; i += 100) { + const group = files.slice(i, i + 100) + const jobs = group.map(async (file) => { + const batchID = uuid() + const data = await readFile(file, "utf-8") + const nodes = Object.values(JSON.parse(data)) as DBNode[] + + for (const node of nodes) + relations.push( + ...node.relations.map((relation) => ({ + source: node.id, + target: relation.target, + relation: relation.relation, + })) + ) + + const success = await Algorithms.insertBatch(batchID, nodes) + if (success) { + console.log(`📦 ${batchID} inserted`) + } else { + errorBatches.add(batchID) + } + }) + await Promise.all(jobs) + } + if (errorBatches.size > 0) console.log("❌ Error batches", errorBatches) + + // Establish relations + const batchSize = 1000 + for (let i = 0; i < relations.length; i += batchSize) { + const success = await Algorithms.establishRelations(relations.slice(i, i + batchSize)) + if (success) { + console.log(`🔗 Relations established ${i + 1000}/${relations.length}`) + } else { + console.log(`❌ Error establishing relations ${i + 1000}/${relations.length}`) + } + } + + console.log("🔗 All Relations established") + } + + console.log("✅ Inserted") } diff --git a/ingestion/src/process/prepare/codebase.ts b/ingestion/src/process/prepare/codebase.ts index e818185..7ab3ab5 100644 --- a/ingestion/src/process/prepare/codebase.ts +++ b/ingestion/src/process/prepare/codebase.ts @@ -9,135 +9,122 @@ import { SourceFile } from "./sourceFile" import { ISourceFile } from "./sourceFile.types" export class Codebase { - private _path: string - private _dataDirPath: string - private _dataDirName: string - - private _batchSize: number - private _fileProcessor: IFileProcessor - - private _files: ISourceFile[] = [] - private _batches: number[][] = [] - - constructor(path: string, fileProcessor: IFileProcessor, batchSize = 50) { - // If path ends with any number of /, remove them - if (path.endsWith("/")) path = path.replace(/\/+$/, "") - - this._path = path - this._dataDirName = "" - this._dataDirPath = "" - - this._batchSize = batchSize - this._fileProcessor = fileProcessor - - this.initializeDataDirectory() - this.prepareFilesMetadata() - this.makeFilesBatches() - } - - get dataDirPath(): string { - return this._dataDirPath - } - - private initializeDataDirectory(removeExisting = true): void { - this._dataDirName = uuid() - this._dataDirPath = path.resolve(this._path, this._dataDirName) - - /* Handle data directory */ - if (removeExisting && existsSync(this._dataDirPath)) - rmSync(this._dataDirPath, { recursive: true }) - mkdirSync(this._dataDirPath) - } - - private prepareFilesMetadata() { - const extensions = ["ts", "js"] - - console.log(`🕒 Preparing metadata for files: *.${extensions.join(", *.")}`) - { - const globPatterns = extensions.map((x) => `**/*.${x}`) - for (const pattern of globPatterns) { - const files = glob - .sync(`${this._path}/${pattern}`) - .map((x) => new SourceFile(x)) - this._files.push(...files) - } - } - console.log(`✅ Prepared metadata for ${this._files.length} files\n`) - } - - private makeFilesBatches() { - const batches: number[][] = [] - for (let i = 0; i < this._files.length; i += this._batchSize) - batches.push([i, i + this._batchSize]) - - this._batches = batches - } - - private writeNodesToFile(nodes: Record, fileName: string) { - const entries = Object.entries(nodes) - if (entries.length === 0) return 0 - const batch = Object.fromEntries(entries) - writeFileSync( - path.resolve(this._dataDirPath, fileName), - JSON.stringify(batch, null, 2) - ) - - return entries.length - } - - private async processFilesBatch( - batchNumber: number, - start: number, - end: number - ): Promise { - let nNodesProcessed = 0 - - console.log(`🕒 Processing ${start}-${end} files`) - { - let nodes: Record = {} - - /* Step 1 */ - try { - const files = this._files.slice(start, end) - const jobs = files.map((x) => this._fileProcessor.process(x, nodes)) - await Promise.all(jobs) - } catch (e) { - console.log(e) - console.error(`Error in processing ${start}-${end} files`) - } - - /* Step 2 */ - this.writeNodesToFile(nodes, `batch-${batchNumber}.json`) - - nNodesProcessed = Object.keys(nodes).length - } - console.log( - `✅ Processed ${start}-${end} files (${nNodesProcessed} nodes)\n` - ) - - return nNodesProcessed - } - - /** - * The main function to process the files in the codebase. The function works in the following - * steps: - * - * 1. Process the files in parallel of size `batchSize` and gather all the nodes in the `nodes` object. - * 2. After gathering all the nodes from the files, it's not guranteed that they can't be more than - * `batchSize` nodes. So, we need to split the nodes into batches of `batchSize` nodes separately. - * 3. Repeat Step 1 and Step 2 for all the files. - * - * @returns Promise - */ - async process(): Promise { - console.log("🕒 Preparing Nodes\n") - - let nodesProcessed = 0 - for (const [index, batch] of this._batches.entries()) { - const [start, end] = batch - nodesProcessed += await this.processFilesBatch(index, start, end) - } - - console.log(`✅ Prepared ${nodesProcessed} nodes`) - } + private _path: string + private _dataDirPath: string + private _dataDirName: string + + private _batchSize: number + private _fileProcessor: IFileProcessor + + private _files: ISourceFile[] = [] + private _batches: number[][] = [] + + constructor(path: string, fileProcessor: IFileProcessor, batchSize = 50) { + // If path ends with any number of /, remove them + if (path.endsWith("/")) path = path.replace(/\/+$/, "") + + this._path = path + this._dataDirName = "" + this._dataDirPath = "" + + this._batchSize = batchSize + this._fileProcessor = fileProcessor + + this.initializeDataDirectory() + this.prepareFilesMetadata() + this.makeFilesBatches() + } + + get dataDirPath(): string { + return this._dataDirPath + } + + private initializeDataDirectory(removeExisting = true): void { + this._dataDirName = uuid() + this._dataDirPath = path.resolve(this._path, this._dataDirName) + + /* Handle data directory */ + if (removeExisting && existsSync(this._dataDirPath)) rmSync(this._dataDirPath, { recursive: true }) + mkdirSync(this._dataDirPath) + } + + private prepareFilesMetadata() { + const extensions = ["ts", "js"] + + console.log(`🕒 Preparing metadata for files: *.${extensions.join(", *.")}`) + { + const globPatterns = extensions.map((x) => `**/*.${x}`) + for (const pattern of globPatterns) { + const files = glob.sync(`${this._path}/${pattern}`).map((x) => new SourceFile(x)) + this._files.push(...files) + } + } + console.log(`✅ Prepared metadata for ${this._files.length} files\n`) + } + + private makeFilesBatches() { + const batches: number[][] = [] + for (let i = 0; i < this._files.length; i += this._batchSize) batches.push([i, i + this._batchSize]) + + this._batches = batches + } + + private writeNodesToFile(nodes: Record, fileName: string) { + const entries = Object.entries(nodes) + if (entries.length === 0) return 0 + const batch = Object.fromEntries(entries) + writeFileSync(path.resolve(this._dataDirPath, fileName), JSON.stringify(batch, null, 2)) + + return entries.length + } + + private async processFilesBatch(batchNumber: number, start: number, end: number): Promise { + let nNodesProcessed = 0 + + console.log(`🕒 Processing ${start}-${end} files`) + { + let nodes: Record = {} + + /* Step 1 */ + try { + const files = this._files.slice(start, end) + const jobs = files.map((x) => this._fileProcessor.process(x, nodes)) + await Promise.all(jobs) + } catch (e) { + console.log(e) + console.error(`Error in processing ${start}-${end} files`) + } + + /* Step 2 */ + this.writeNodesToFile(nodes, `batch-${batchNumber}.json`) + + nNodesProcessed = Object.keys(nodes).length + } + console.log(`✅ Processed ${start}-${end} files (${nNodesProcessed} nodes)\n`) + + return nNodesProcessed + } + + /** + * The main function to process the files in the codebase. The function works in the following + * steps: + * + * 1. Process the files in parallel of size `batchSize` and gather all the nodes in the `nodes` object. + * 2. After gathering all the nodes from the files, it's not guranteed that they can't be more than + * `batchSize` nodes. So, we need to split the nodes into batches of `batchSize` nodes separately. + * 3. Repeat Step 1 and Step 2 for all the files. + * + * @returns Promise + */ + async process(): Promise { + console.log("🕒 Preparing Nodes\n") + + let nodesProcessed = 0 + for (const [index, batch] of this._batches.entries()) { + const [start, end] = batch + nodesProcessed += await this.processFilesBatch(index, start, end) + } + + console.log(`✅ Prepared ${nodesProcessed} nodes`) + } } diff --git a/ingestion/src/process/prepare/processor/core/treeNode.ts b/ingestion/src/process/prepare/processor/core/treeNode.ts index 0b8956e..d669255 100644 --- a/ingestion/src/process/prepare/processor/core/treeNode.ts +++ b/ingestion/src/process/prepare/processor/core/treeNode.ts @@ -1,57 +1,57 @@ export type TreeNodeSourceLocation = { - start: { - line: number - column: number - } - end: { - line: number - column: number - } + start: { + line: number + column: number + } + end: { + line: number + column: number + } } export class TreeNode { - name: string = "" - type: string = "" - body: string = "" - - location: TreeNodeSourceLocation - sourceFileRelativePath: string - - uses: { - name: string - type: string - }[] = [] - - constructor( - name: string, - type: string, - body: string, - sourceFilePath: string, - location: TreeNodeSourceLocation - ) { - this.name = name - this.type = type - this.body = body - this.sourceFileRelativePath = sourceFilePath - this.location = location - } - - toString() { - return `${this.name} (${this.type})` - } - - getID(): string { - return `${this.sourceFileRelativePath}:${this.name}` - } - - pushUse(...uses: { name: string; type: string }[]) { - for (const use of uses) { - if (this.uses.findIndex((u) => u.name == use.name) !== -1) continue - this.uses.push(use) - } - } - - isFile() { - return false - } + name: string = "" + type: string = "" + body: string = "" + + location: TreeNodeSourceLocation + sourceFileRelativePath: string + + uses: { + name: string + type: string + }[] = [] + + constructor( + name: string, + type: string, + body: string, + sourceFilePath: string, + location: TreeNodeSourceLocation + ) { + this.name = name + this.type = type + this.body = body + this.sourceFileRelativePath = sourceFilePath + this.location = location + } + + toString() { + return `${this.name} (${this.type})` + } + + getID(): string { + return `${this.sourceFileRelativePath}:${this.name}` + } + + pushUse(...uses: { name: string; type: string }[]) { + for (const use of uses) { + if (this.uses.findIndex((u) => u.name == use.name) !== -1) continue + this.uses.push(use) + } + } + + isFile() { + return false + } } diff --git a/ingestion/src/process/prepare/processor/core/typeAnnotation.ts b/ingestion/src/process/prepare/processor/core/typeAnnotation.ts index 9117a7a..5f36ccd 100644 --- a/ingestion/src/process/prepare/processor/core/typeAnnotation.ts +++ b/ingestion/src/process/prepare/processor/core/typeAnnotation.ts @@ -1,83 +1,72 @@ import { namedTypes } from "ast-types" export namespace TypeAnnotation { - export function flatten( - type: namedTypes.TSTypeAliasDeclaration["typeAnnotation"] - ): string[] { - if (!type) return [] + export function flatten(type: namedTypes.TSTypeAliasDeclaration["typeAnnotation"]): string[] { + if (!type) return [] - const typeArguments = new Set() + const typeArguments = new Set() - // Handle type annotations - if (namedTypes.TSTypeAnnotation.check(type)) { - flatten((type as any).typeAnnotation).forEach((x) => typeArguments.add(x)) - } - // Handle direct type references - else if (namedTypes.TSTypeReference.check(type)) { - const name = (type as any).typeName.name - if (name) typeArguments.add(name) - } - // Handle intersection (|) and union (&) types - else if ( - namedTypes.TSIntersectionType.check(type) || - namedTypes.TSUnionType.check(type) - ) { - for (const t of type.types) { - flatten(t).forEach((x) => typeArguments.add(x)) - flatten((t as any).typeParameters).forEach((x) => typeArguments.add(x)) - } - } - // Handle function types - else if (namedTypes.TSFunctionType.check(type)) { - // Handle return type of the function - if ((type as any).returnType) { - flatten((type as any).returnType.typeAnnotation).forEach((x) => - typeArguments.add(x) - ) - } + // Handle type annotations + if (namedTypes.TSTypeAnnotation.check(type)) { + flatten((type as any).typeAnnotation).forEach((x) => typeArguments.add(x)) + } + // Handle direct type references + else if (namedTypes.TSTypeReference.check(type)) { + const name = (type as any).typeName.name + if (name) typeArguments.add(name) + } + // Handle intersection (|) and union (&) types + else if (namedTypes.TSIntersectionType.check(type) || namedTypes.TSUnionType.check(type)) { + for (const t of type.types) { + flatten(t).forEach((x) => typeArguments.add(x)) + flatten((t as any).typeParameters).forEach((x) => typeArguments.add(x)) + } + } + // Handle function types + else if (namedTypes.TSFunctionType.check(type)) { + // Handle return type of the function + if ((type as any).returnType) { + flatten((type as any).returnType.typeAnnotation).forEach((x) => typeArguments.add(x)) + } - // Handle parameters of the function - for (const t of (type as any).params ?? []) { - flatten((t as any).typeAnnotation).forEach((x) => typeArguments.add(x)) - } - } - // Handle array types - else if (namedTypes.TSTupleType.check(type)) { - for (const t of type.elementTypes) - flatten(t).forEach((x) => typeArguments.add(x)) - } - // Handle indexed access types - else if (namedTypes.TSIndexedAccessType.check(type)) { - flatten((type as any).objectType).forEach((x) => typeArguments.add(x)) - flatten((type as any).indexType).forEach((x) => typeArguments.add(x)) - } - // Handle infer types - else if (namedTypes.TSConditionalType.check(type)) { - flatten(type.checkType).forEach((x) => typeArguments.add(x)) - flatten(type.extendsType).forEach((x) => typeArguments.add(x)) - flatten(type.trueType).forEach((x) => typeArguments.add(x)) - flatten(type.falseType).forEach((x) => typeArguments.add(x)) - } - // Handle mapped types - else if (namedTypes.TSMappedType.check(type)) { - if (type.typeAnnotation) - flatten(type.typeAnnotation).forEach((x) => typeArguments.add(x)) - if (type.typeParameter.constraint) - flatten(type.typeParameter.constraint).forEach((x) => - typeArguments.add(x) - ) - if (type.typeParameter.default) - flatten(type.typeParameter.default).forEach((x) => typeArguments.add(x)) - } + // Handle parameters of the function + for (const t of (type as any).params ?? []) { + flatten((t as any).typeAnnotation).forEach((x) => typeArguments.add(x)) + } + } + // Handle array types + else if (namedTypes.TSTupleType.check(type)) { + for (const t of type.elementTypes) flatten(t).forEach((x) => typeArguments.add(x)) + } + // Handle indexed access types + else if (namedTypes.TSIndexedAccessType.check(type)) { + flatten((type as any).objectType).forEach((x) => typeArguments.add(x)) + flatten((type as any).indexType).forEach((x) => typeArguments.add(x)) + } + // Handle infer types + else if (namedTypes.TSConditionalType.check(type)) { + flatten(type.checkType).forEach((x) => typeArguments.add(x)) + flatten(type.extendsType).forEach((x) => typeArguments.add(x)) + flatten(type.trueType).forEach((x) => typeArguments.add(x)) + flatten(type.falseType).forEach((x) => typeArguments.add(x)) + } + // Handle mapped types + else if (namedTypes.TSMappedType.check(type)) { + if (type.typeAnnotation) flatten(type.typeAnnotation).forEach((x) => typeArguments.add(x)) + if (type.typeParameter.constraint) + flatten(type.typeParameter.constraint).forEach((x) => typeArguments.add(x)) + if (type.typeParameter.default) + flatten(type.typeParameter.default).forEach((x) => typeArguments.add(x)) + } - // Handle type parameters - const typeParameters = (type as any).typeParameters - if (typeParameters) { - for (const p of typeParameters.params) { - flatten(p).forEach((x) => typeArguments.add(x)) - } - } + // Handle type parameters + const typeParameters = (type as any).typeParameters + if (typeParameters) { + for (const p of typeParameters.params) { + flatten(p).forEach((x) => typeArguments.add(x)) + } + } - return [...typeArguments] - } + return [...typeArguments] + } } diff --git a/ingestion/src/process/prepare/processor/core/typeArgument.ts b/ingestion/src/process/prepare/processor/core/typeArgument.ts index d7a1488..977de79 100644 --- a/ingestion/src/process/prepare/processor/core/typeArgument.ts +++ b/ingestion/src/process/prepare/processor/core/typeArgument.ts @@ -1,23 +1,19 @@ import { namedTypes } from "ast-types" export namespace TypeArgument { - export function flatten( - args: namedTypes.TypeParameterInstantiation["params"] - ) { - const typeArguments = new Set() + export function flatten(args: namedTypes.TypeParameterInstantiation["params"]) { + const typeArguments = new Set() - for (const t of args) { - if (namedTypes.TSTypeReference.check(t)) { - typeArguments.add((t as any).typeName.name) + for (const t of args) { + if (namedTypes.TSTypeReference.check(t)) { + typeArguments.add((t as any).typeName.name) - if ((t as any).typeArguments) { - flatten((t as any).typeArguments.params).forEach((x) => - typeArguments.add(x) - ) - } - } - } + if ((t as any).typeArguments) { + flatten((t as any).typeArguments.params).forEach((x) => typeArguments.add(x)) + } + } + } - return [...typeArguments] - } + return [...typeArguments] + } } diff --git a/ingestion/src/process/prepare/processor/file.ts b/ingestion/src/process/prepare/processor/file.ts index 18b2132..c500a9f 100644 --- a/ingestion/src/process/prepare/processor/file.ts +++ b/ingestion/src/process/prepare/processor/file.ts @@ -17,140 +17,129 @@ import { TypeAlias } from "./syntax/typeAlias" import { VariableDeclarations } from "./syntax/variableDeclarations" export class FileProcessor implements IFileProcessor { - process(sourceFile: ISourceFile, nodesRef: Record): void { - const fileContent = sourceFile.read() - const ast = parse(fileContent, { - parser: tsParser, - }) - - let treeNodes: TreeNode[] = [] - for (let node of ast.program.body) { - if (namedTypes.ExportDefaultDeclaration.check(node)) - node = (node as any).declaration - if (namedTypes.ExportNamedDeclaration.check(node)) - node = (node as any).declaration - // if (namedTypes.ExpressionStatement.check(node)) - // node = (node as any).expression - - // if (namedTypes.CallExpression.check(node)) { - // console.log(Functions.flattenCallExpression(node as any)) - // console.log(node) - // } - if (namedTypes.FunctionDeclaration.check(node)) - /* Functions */ - treeNodes.push(Functions.Handle(node)) - else if (namedTypes.TSInterfaceDeclaration.check(node)) - /* Interfaces */ - treeNodes.push(Interface.Handle(node as any)) - else if (namedTypes.TSTypeAliasDeclaration.check(node)) - /* Type Aliases */ - treeNodes.push(TypeAlias.Handle(node)) - else if (namedTypes.TSEnumDeclaration.check(node)) - /* Enums */ - treeNodes.push(Enums.Handle(node as any)) - else if (namedTypes.ClassDeclaration.check(node)) - /* Classes */ - treeNodes.push(Classes.Handle(node)) - else if (namedTypes.TSModuleDeclaration.check(node)) - /* Namespaces */ - treeNodes.push(Namespaces.Handle(node)) - else if (namedTypes.VariableDeclaration.check(node)) - /* Variables */ - treeNodes.push(...VariableDeclarations.Handle(node)) - } - - // Resolve imports - const parsedImports = new Map() // { importName: absolutePath } - { - const imports = ast.program.body - .filter((node: any) => namedTypes.ImportDeclaration.check(node)) // Filter out all non-import nodes - .filter((node: any) => node.source.value.startsWith(".")) // Filter out all library/non-relative imports - for (const i of imports) { - if (!(i as any).specifiers[0]) continue - const importName = (i as any).specifiers[0].local.name - const relativePath = (i as any).source.value - - const currentFileDirectory = sourceFile - .getFullPath() - .slice(0, sourceFile.getFullPath().lastIndexOf("/")) - - let finalPath = "" - const backSteps = relativePath.match(/\.\.\//g) - if (backSteps) { - const currentFileDirectoryParts = currentFileDirectory.split("/") - finalPath = path - .join(...currentFileDirectoryParts, relativePath) - .replaceAll("\\", "/") - } else { - finalPath = - path - .join(currentFileDirectory, relativePath) - .replaceAll("\\", "/") + ".ts" - } - - parsedImports.set(importName, finalPath) - } - } - - // Replace import names with absolute paths - const nodesInFile: Record = {} // { name: id } - for (const node of treeNodes) { - node.sourceFileRelativePath = sourceFile.getFullPath() - nodesInFile[node.name] = node.getID() - } - - for (const treeNode of treeNodes) { - treeNode.name ||= "Anonymous" - treeNode.sourceFileRelativePath = sourceFile.getFullPath() - treeNode.uses = treeNode.uses - .filter((x) => x.name) - .map((x) => { - if (parsedImports.has(x.name)) - x.name = `${parsedImports.get(x.name)!}:${x.name}` - if (nodesInFile[x.name]) { - x.name = nodesInFile[x.name] - } - return x - }) - } - - // Add the nodes to the global reference - const fileContentLines = fileContent.split("\n") - - for (const treeNode of treeNodes) { - if (!treeNode.body) { - const startLine = treeNode.location.start.line - 1 - const endLine = treeNode.location.end.line + 1 - treeNode.body = fileContentLines - .slice(startLine, endLine) - .join("\n") - .trim() - } - - const dbNode = DBNode.fromTreeNode(treeNode) - nodesRef[dbNode.id] = dbNode - } - - // Create file node - const fileNode = new DBNode({ - id: sourceFile.getFullPath(), - name: sourceFile.getFullPath(), - type: "File", - - code: fileContent, - - filePath: sourceFile.getFullPath(), - relations: treeNodes.map((x) => ({ - target: x.getID(), - relation: "CONTAINS", - })), - - nameEmbeddings: [], - codeEmbeddings: [], - - isFile: true, - descriptor: "Node", - }) - nodesRef[fileNode.id] = fileNode - } + process(sourceFile: ISourceFile, nodesRef: Record): void { + const fileContent = sourceFile.read() + const ast = parse(fileContent, { + parser: tsParser, + }) + + let treeNodes: TreeNode[] = [] + for (let node of ast.program.body) { + if (namedTypes.ExportDefaultDeclaration.check(node)) node = (node as any).declaration + if (namedTypes.ExportNamedDeclaration.check(node)) node = (node as any).declaration + // if (namedTypes.ExpressionStatement.check(node)) + // node = (node as any).expression + + // if (namedTypes.CallExpression.check(node)) { + // console.log(Functions.flattenCallExpression(node as any)) + // console.log(node) + // } + if (namedTypes.FunctionDeclaration.check(node)) + /* Functions */ + treeNodes.push(Functions.Handle(node)) + else if (namedTypes.TSInterfaceDeclaration.check(node)) + /* Interfaces */ + treeNodes.push(Interface.Handle(node as any)) + else if (namedTypes.TSTypeAliasDeclaration.check(node)) + /* Type Aliases */ + treeNodes.push(TypeAlias.Handle(node)) + else if (namedTypes.TSEnumDeclaration.check(node)) + /* Enums */ + treeNodes.push(Enums.Handle(node as any)) + else if (namedTypes.ClassDeclaration.check(node)) + /* Classes */ + treeNodes.push(Classes.Handle(node)) + else if (namedTypes.TSModuleDeclaration.check(node)) + /* Namespaces */ + treeNodes.push(Namespaces.Handle(node)) + else if (namedTypes.VariableDeclaration.check(node)) + /* Variables */ + treeNodes.push(...VariableDeclarations.Handle(node)) + } + + // Resolve imports + const parsedImports = new Map() // { importName: absolutePath } + { + const imports = ast.program.body + .filter((node: any) => namedTypes.ImportDeclaration.check(node)) // Filter out all non-import nodes + .filter((node: any) => node.source.value.startsWith(".")) // Filter out all library/non-relative imports + for (const i of imports) { + if (!(i as any).specifiers[0]) continue + const importName = (i as any).specifiers[0].local.name + const relativePath = (i as any).source.value + + const currentFileDirectory = sourceFile + .getFullPath() + .slice(0, sourceFile.getFullPath().lastIndexOf("/")) + + let finalPath = "" + const backSteps = relativePath.match(/\.\.\//g) + if (backSteps) { + const currentFileDirectoryParts = currentFileDirectory.split("/") + finalPath = path.join(...currentFileDirectoryParts, relativePath).replaceAll("\\", "/") + } else { + finalPath = path.join(currentFileDirectory, relativePath).replaceAll("\\", "/") + ".ts" + } + + parsedImports.set(importName, finalPath) + } + } + + // Replace import names with absolute paths + const nodesInFile: Record = {} // { name: id } + for (const node of treeNodes) { + node.sourceFileRelativePath = sourceFile.getFullPath() + nodesInFile[node.name] = node.getID() + } + + for (const treeNode of treeNodes) { + treeNode.name ||= "Anonymous" + treeNode.sourceFileRelativePath = sourceFile.getFullPath() + treeNode.uses = treeNode.uses + .filter((x) => x.name) + .map((x) => { + if (parsedImports.has(x.name)) x.name = `${parsedImports.get(x.name)!}:${x.name}` + if (nodesInFile[x.name]) { + x.name = nodesInFile[x.name] + } + return x + }) + } + + // Add the nodes to the global reference + const fileContentLines = fileContent.split("\n") + + for (const treeNode of treeNodes) { + if (!treeNode.body) { + const startLine = treeNode.location.start.line - 1 + const endLine = treeNode.location.end.line + 1 + treeNode.body = fileContentLines.slice(startLine, endLine).join("\n").trim() + } + + const dbNode = DBNode.fromTreeNode(treeNode) + nodesRef[dbNode.id] = dbNode + } + + // Create file node + const fileNode = new DBNode({ + id: sourceFile.getFullPath(), + name: sourceFile.getFullPath(), + type: "File", + + code: fileContent, + + filePath: sourceFile.getFullPath(), + relations: treeNodes.map((x) => ({ + target: x.getID(), + relation: "CONTAINS", + })), + + nameEmbeddings: [], + codeEmbeddings: [], + + isFile: true, + descriptor: "Node", + }) + nodesRef[fileNode.id] = fileNode + } } diff --git a/ingestion/src/process/prepare/processor/file.types.ts b/ingestion/src/process/prepare/processor/file.types.ts index e2472be..4d7061e 100644 --- a/ingestion/src/process/prepare/processor/file.types.ts +++ b/ingestion/src/process/prepare/processor/file.types.ts @@ -2,5 +2,5 @@ import { DBNode } from "../../../core/dbNode" import { ISourceFile } from "../sourceFile.types" export interface IFileProcessor { - process(sourceFile: ISourceFile, nodesRef: Record): void + process(sourceFile: ISourceFile, nodesRef: Record): void } diff --git a/ingestion/src/process/prepare/processor/syntax/classes.ts b/ingestion/src/process/prepare/processor/syntax/classes.ts index 8fc9489..d1f639c 100644 --- a/ingestion/src/process/prepare/processor/syntax/classes.ts +++ b/ingestion/src/process/prepare/processor/syntax/classes.ts @@ -5,94 +5,94 @@ import { TypeArgument } from "../core/typeArgument" import { Functions } from "./functions" export namespace Classes { - export function Handle(n: namedTypes.ClassDeclaration) { - const node = new TreeNode(n.id?.name.toString() ?? "", "Class", "", "", { - start: { - line: n.body.loc?.start.line ?? 0, - column: n.body.loc?.start.column ?? 0, - }, - end: { - line: n.body.loc?.end.line ?? 0, - column: n.body.loc?.end.column ?? 0, - }, - }) + export function Handle(n: namedTypes.ClassDeclaration) { + const node = new TreeNode(n.id?.name.toString() ?? "", "Class", "", "", { + start: { + line: n.body.loc?.start.line ?? 0, + column: n.body.loc?.start.column ?? 0, + }, + end: { + line: n.body.loc?.end.line ?? 0, + column: n.body.loc?.end.column ?? 0, + }, + }) - // Check for type parameters - const typeParameters: string[] = [] - for (const p of n.typeParameters?.params ?? []) { - typeParameters.push((p.name as any).name) - } + // Check for type parameters + const typeParameters: string[] = [] + for (const p of n.typeParameters?.params ?? []) { + typeParameters.push((p.name as any).name) + } - // Check for super class - if (n.superClass) { - if (namedTypes.Identifier.check(n.superClass)) { - node.pushUse({ - name: n.superClass.name, - type: "class", - }) - } - } + // Check for super class + if (n.superClass) { + if (namedTypes.Identifier.check(n.superClass)) { + node.pushUse({ + name: n.superClass.name, + type: "class", + }) + } + } - // Check for implemented interfaces - if (n.implements) { - for (const i of n.implements) { - node.pushUse({ - name: (i as any).expression.name, - type: "interface", - }) - } - } + // Check for implemented interfaces + if (n.implements) { + for (const i of n.implements) { + node.pushUse({ + name: (i as any).expression.name, + type: "interface", + }) + } + } - // Check for external references in any of the methods - for (const m of n.body.body) { - if (namedTypes.MethodDefinition.check(m)) { - if (namedTypes.FunctionExpression.check(m.value)) { - node.pushUse(...Functions.Handle(m.value as any).uses) - } - } - } + // Check for external references in any of the methods + for (const m of n.body.body) { + if (namedTypes.MethodDefinition.check(m)) { + if (namedTypes.FunctionExpression.check(m.value)) { + node.pushUse(...Functions.Handle(m.value as any).uses) + } + } + } - // Remove uses that uses the type parameters - node.uses = node.uses.filter((u) => !typeParameters.includes(u.name)) + // Remove uses that uses the type parameters + node.uses = node.uses.filter((u) => !typeParameters.includes(u.name)) - return node - } + return node + } - export function flattenNewExpression(node: namedTypes.NewExpression) { - const uses: { name: string; type: string }[] = [] + export function flattenNewExpression(node: namedTypes.NewExpression) { + const uses: { name: string; type: string }[] = [] - if (namedTypes.Identifier.check(node.callee)) { - uses.push({ - name: node.callee.name, - type: "class", - }) - } + if (namedTypes.Identifier.check(node.callee)) { + uses.push({ + name: node.callee.name, + type: "class", + }) + } - if (node.arguments) { - for (const a of node.arguments) { - if (namedTypes.Identifier.check(a)) { - uses.push({ - name: a.name, - type: "variable", - }) - } else if (namedTypes.CallExpression.check(a)) { - uses.push(...Functions.flattenCallExpression(a)) - } else if (namedTypes.NewExpression.check(a)) { - uses.push(...flattenNewExpression(a)) - } - } - } + if (node.arguments) { + for (const a of node.arguments) { + if (namedTypes.Identifier.check(a)) { + uses.push({ + name: a.name, + type: "variable", + }) + } else if (namedTypes.CallExpression.check(a)) { + uses.push(...Functions.flattenCallExpression(a)) + } else if (namedTypes.NewExpression.check(a)) { + uses.push(...flattenNewExpression(a)) + } + } + } - if (node.typeArguments) { - const types = TypeArgument.flatten(node.typeArguments?.params ?? []) - for (const t of types) { - uses.push({ - name: t, - type: "type", - }) - } - } + if (node.typeArguments) { + const types = TypeArgument.flatten(node.typeArguments?.params ?? []) + for (const t of types) { + uses.push({ + name: t, + type: "type", + }) + } + } - return uses - } + return uses + } } diff --git a/ingestion/src/process/prepare/processor/syntax/enums.ts b/ingestion/src/process/prepare/processor/syntax/enums.ts index ea05ff2..3ca0888 100644 --- a/ingestion/src/process/prepare/processor/syntax/enums.ts +++ b/ingestion/src/process/prepare/processor/syntax/enums.ts @@ -5,32 +5,32 @@ import { Classes } from "./classes" import { Functions } from "./functions" export namespace Enums { - export function Handle(n: namedTypes.EnumDeclaration) { - const node = new TreeNode(n.id?.name.toString() ?? "", "Enum", "", "", { - start: { - line: n.loc?.start.line ?? 0, - column: n.loc?.start.column ?? 0, - }, - end: { - line: n.loc?.end.line ?? 0, - column: n.loc?.end.column ?? 0, - }, - }) + export function Handle(n: namedTypes.EnumDeclaration) { + const node = new TreeNode(n.id?.name.toString() ?? "", "Enum", "", "", { + start: { + line: n.loc?.start.line ?? 0, + column: n.loc?.start.column ?? 0, + }, + end: { + line: n.loc?.end.line ?? 0, + column: n.loc?.end.column ?? 0, + }, + }) - // Check for external references while initializing the enum members - for (const m of (n as any).members as namedTypes.TSEnumMember[]) { - if (namedTypes.CallExpression.check(m.initializer)) { - node.pushUse(...Functions.flattenCallExpression(m.initializer)) - } else if (namedTypes.NewExpression.check(m.initializer)) { - node.pushUse(...Classes.flattenNewExpression(m.initializer)) - } else if (namedTypes.Identifier.check(m.initializer)) { - node.pushUse({ - name: m.initializer.name, - type: "variable", - }) - } - } + // Check for external references while initializing the enum members + for (const m of (n as any).members as namedTypes.TSEnumMember[]) { + if (namedTypes.CallExpression.check(m.initializer)) { + node.pushUse(...Functions.flattenCallExpression(m.initializer)) + } else if (namedTypes.NewExpression.check(m.initializer)) { + node.pushUse(...Classes.flattenNewExpression(m.initializer)) + } else if (namedTypes.Identifier.check(m.initializer)) { + node.pushUse({ + name: m.initializer.name, + type: "variable", + }) + } + } - return node - } + return node + } } diff --git a/ingestion/src/process/prepare/processor/syntax/functions.ts b/ingestion/src/process/prepare/processor/syntax/functions.ts index 1246bfc..1455bc4 100644 --- a/ingestion/src/process/prepare/processor/syntax/functions.ts +++ b/ingestion/src/process/prepare/processor/syntax/functions.ts @@ -6,161 +6,157 @@ import { TypeArgument } from "../core/typeArgument" import { Classes } from "./classes" export namespace Functions { - export function Handle(n: namedTypes.FunctionDeclaration) { - const node = new TreeNode(n.id?.name.toString() ?? "", "Function", "", "", { - start: { - line: n.body.loc?.start.line ?? 0, - column: n.body.loc?.start.column ?? 0, - }, - end: { - line: n.body.loc?.end.line ?? 0, - column: n.body.loc?.end.column ?? 0, - }, - }) + export function Handle(n: namedTypes.FunctionDeclaration) { + const node = new TreeNode(n.id?.name.toString() ?? "", "Function", "", "", { + start: { + line: n.body.loc?.start.line ?? 0, + column: n.body.loc?.start.column ?? 0, + }, + end: { + line: n.body.loc?.end.line ?? 0, + column: n.body.loc?.end.column ?? 0, + }, + }) - // Check for type parameters - const typeParameters: string[] = [] - for (const p of n.typeParameters?.params ?? []) { - typeParameters.push((p.name as any).name) - } + // Check for type parameters + const typeParameters: string[] = [] + for (const p of n.typeParameters?.params ?? []) { + typeParameters.push((p.name as any).name) + } - // Handle type annotations - if (n.returnType?.typeAnnotation) { - node.pushUse( - ...TypeAnnotation.flatten(n.returnType.typeAnnotation as any).map( - (name) => ({ - name: name, - type: "type", - }) - ) - ) - } + // Handle type annotations + if (n.returnType?.typeAnnotation) { + node.pushUse( + ...TypeAnnotation.flatten(n.returnType.typeAnnotation as any).map((name) => ({ + name: name, + type: "type", + })) + ) + } - // Handle parameters to see if any of them uses an external entity - for (const p of n.params) { - if (namedTypes.Identifier.check(p)) { - node.pushUse( - ...TypeAnnotation.flatten( - p.typeAnnotation?.typeAnnotation as any - ).map((name) => ({ - name: name, - type: "type", - })) - ) - } - } + // Handle parameters to see if any of them uses an external entity + for (const p of n.params) { + if (namedTypes.Identifier.check(p)) { + node.pushUse( + ...TypeAnnotation.flatten(p.typeAnnotation?.typeAnnotation as any).map((name) => ({ + name: name, + type: "type", + })) + ) + } + } - // Handle the body of the function - for (const c of n.body.body) { - if (namedTypes.ExpressionStatement.check(c)) { - let expression = c.expression - if (namedTypes.AwaitExpression.check(expression)) { - expression = expression.argument as any - } + // Handle the body of the function + for (const c of n.body.body) { + if (namedTypes.ExpressionStatement.check(c)) { + let expression = c.expression + if (namedTypes.AwaitExpression.check(expression)) { + expression = expression.argument as any + } - // For direct calls - if (namedTypes.CallExpression.check(expression)) { - node.pushUse( - { - name: (expression.callee as any).name, - type: "function", - }, - ...flattenCallExpression(expression) - ) - } - } - // For variable declarations - else if (namedTypes.VariableDeclaration.check(c)) { - // For variable declarations - for (const d of c.declarations) { - if (namedTypes.VariableDeclarator.check(d)) { - // For variables declared using function calls - if (namedTypes.CallExpression.check(d.init)) { - node.pushUse( - { - name: (d.init.callee as any).name, - type: "function", - }, - ...flattenCallExpression(d.init) - ) - } - // For variables declared using new expressions - else if (namedTypes.NewExpression.check(d.init)) { - if (namedTypes.Identifier.check(d.init.callee)) { - node.pushUse({ - name: d.init.callee.name, - type: "class", - }) - } - node.pushUse(...Classes.flattenNewExpression(d.init)) - } - // For variables declared using other variables or direct values - else if (namedTypes.Identifier.check(d.init)) { - node.pushUse({ - name: d.init.name, - type: "variable", - }) - } else { - // For other types of declarations (e.g. arrow functions) we don't need to do anything - // as they can't refer to other functions - } - } - } - } - } + // For direct calls + if (namedTypes.CallExpression.check(expression)) { + node.pushUse( + { + name: (expression.callee as any).name, + type: "function", + }, + ...flattenCallExpression(expression) + ) + } + } + // For variable declarations + else if (namedTypes.VariableDeclaration.check(c)) { + // For variable declarations + for (const d of c.declarations) { + if (namedTypes.VariableDeclarator.check(d)) { + // For variables declared using function calls + if (namedTypes.CallExpression.check(d.init)) { + node.pushUse( + { + name: (d.init.callee as any).name, + type: "function", + }, + ...flattenCallExpression(d.init) + ) + } + // For variables declared using new expressions + else if (namedTypes.NewExpression.check(d.init)) { + if (namedTypes.Identifier.check(d.init.callee)) { + node.pushUse({ + name: d.init.callee.name, + type: "class", + }) + } + node.pushUse(...Classes.flattenNewExpression(d.init)) + } + // For variables declared using other variables or direct values + else if (namedTypes.Identifier.check(d.init)) { + node.pushUse({ + name: d.init.name, + type: "variable", + }) + } else { + // For other types of declarations (e.g. arrow functions) we don't need to do anything + // as they can't refer to other functions + } + } + } + } + } - // Remove uses that uses the type parameters - node.uses = node.uses.filter((u) => !typeParameters.includes(u.name)) + // Remove uses that uses the type parameters + node.uses = node.uses.filter((u) => !typeParameters.includes(u.name)) - return node - } + return node + } - export function flattenCallExpression(node: namedTypes.CallExpression) { - const uses: { name: string; type: string }[] = [] + export function flattenCallExpression(node: namedTypes.CallExpression) { + const uses: { name: string; type: string }[] = [] - if (namedTypes.Identifier.check(node.callee)) { - uses.push({ - name: node.callee.name, - type: "function", - }) - } else if (namedTypes.MemberExpression.check(node.callee)) { - if (namedTypes.Identifier.check(node.callee.object)) { - uses.push({ - name: node.callee.object.name, - type: "variable", - }) - uses.push({ - name: (node.callee.property as any).name, - type: "function", - }) - } - } + if (namedTypes.Identifier.check(node.callee)) { + uses.push({ + name: node.callee.name, + type: "function", + }) + } else if (namedTypes.MemberExpression.check(node.callee)) { + if (namedTypes.Identifier.check(node.callee.object)) { + uses.push({ + name: node.callee.object.name, + type: "variable", + }) + uses.push({ + name: (node.callee.property as any).name, + type: "function", + }) + } + } - if (node.arguments) { - for (const a of node.arguments) { - if (namedTypes.Identifier.check(a)) { - uses.push({ - name: a.name, - type: "variable", - }) - } else if (namedTypes.CallExpression.check(a)) { - uses.push(...flattenCallExpression(a)) - } else if (namedTypes.NewExpression.check(a)) { - uses.push(...Classes.flattenNewExpression(a)) - } - } - } + if (node.arguments) { + for (const a of node.arguments) { + if (namedTypes.Identifier.check(a)) { + uses.push({ + name: a.name, + type: "variable", + }) + } else if (namedTypes.CallExpression.check(a)) { + uses.push(...flattenCallExpression(a)) + } else if (namedTypes.NewExpression.check(a)) { + uses.push(...Classes.flattenNewExpression(a)) + } + } + } - if (node.typeArguments) { - const types = TypeArgument.flatten(node.typeArguments?.params ?? []) - for (const t of types) { - uses.push({ - name: t, - type: "type", - }) - } - } + if (node.typeArguments) { + const types = TypeArgument.flatten(node.typeArguments?.params ?? []) + for (const t of types) { + uses.push({ + name: t, + type: "type", + }) + } + } - return uses - } + return uses + } } diff --git a/ingestion/src/process/prepare/processor/syntax/interface.ts b/ingestion/src/process/prepare/processor/syntax/interface.ts index 491380a..4b83b94 100644 --- a/ingestion/src/process/prepare/processor/syntax/interface.ts +++ b/ingestion/src/process/prepare/processor/syntax/interface.ts @@ -5,100 +5,91 @@ import { TypeAnnotation } from "../core/typeAnnotation" import { TypeArgument } from "../core/typeArgument" export namespace Interface { - export function Handle(n: namedTypes.InterfaceDeclaration) { - const node = new TreeNode( - n.id?.name.toString() ?? "", - "Interface", - "", - "", - { - start: { - line: n.loc?.start.line ?? 0, - column: n.loc?.start.column ?? 0, - }, - end: { - line: n.loc?.end.line ?? 0, - column: n.loc?.end.column ?? 0, - }, - } - ) + export function Handle(n: namedTypes.InterfaceDeclaration) { + const node = new TreeNode(n.id?.name.toString() ?? "", "Interface", "", "", { + start: { + line: n.loc?.start.line ?? 0, + column: n.loc?.start.column ?? 0, + }, + end: { + line: n.loc?.end.line ?? 0, + column: n.loc?.end.column ?? 0, + }, + }) - // Check for type parameters - const typeParameters: string[] = [] - for (const p of n.typeParameters?.params ?? []) { - typeParameters.push((p.name as any).name) - } + // Check for type parameters + const typeParameters: string[] = [] + for (const p of n.typeParameters?.params ?? []) { + typeParameters.push((p.name as any).name) + } - // Check for extensions - for (const e of n.extends ?? []) { - const name = (e as any).expression.name - if (typeParameters.includes(name)) continue + // Check for extensions + for (const e of n.extends ?? []) { + const name = (e as any).expression.name + if (typeParameters.includes(name)) continue - node.pushUse({ - name: name, - type: "type", - }) + node.pushUse({ + name: name, + type: "type", + }) - const params = (e as any).typeArguments?.params ?? [] - node.pushUse( - ...TypeArgument.flatten(params) - .map((t) => ({ - name: t, - type: "type", - })) - .filter((t) => !typeParameters.includes(t.name)) - ) - } + const params = (e as any).typeArguments?.params ?? [] + node.pushUse( + ...TypeArgument.flatten(params) + .map((t) => ({ + name: t, + type: "type", + })) + .filter((t) => !typeParameters.includes(t.name)) + ) + } - // Check for external references - for (const m of (n.body as any).body) { - // Check for type references & index signatures (classes, enums, interfaces etc...) - const annotation = m.typeAnnotation?.typeAnnotation as any - if (namedTypes.TSTypeReference.check(annotation)) { - const name = (annotation as any).typeName.name - if (!name) continue - if (typeParameters.includes(name)) continue + // Check for external references + for (const m of (n.body as any).body) { + // Check for type references & index signatures (classes, enums, interfaces etc...) + const annotation = m.typeAnnotation?.typeAnnotation as any + if (namedTypes.TSTypeReference.check(annotation)) { + const name = (annotation as any).typeName.name + if (!name) continue + if (typeParameters.includes(name)) continue - node.pushUse( - ...TypeAnnotation.flatten( - m.typeAnnotation?.typeAnnotation as any - ).map((t) => ({ - name: t, - type: "type", - })) - ) - } - // Check for call signatures (functions) - else if ( - namedTypes.TSCallSignatureDeclaration.check(m) || - namedTypes.TSMethodSignature.check(m) || - namedTypes.TSConstructSignatureDeclaration.check(m) - ) { - // Check for the return type - const returnType = ((m as any).returnType?.typeAnnotation as any) - ?.typeName?.name - if (returnType) { - node.pushUse({ - name: returnType, - type: "type", - }) - } + node.pushUse( + ...TypeAnnotation.flatten(m.typeAnnotation?.typeAnnotation as any).map((t) => ({ + name: t, + type: "type", + })) + ) + } + // Check for call signatures (functions) + else if ( + namedTypes.TSCallSignatureDeclaration.check(m) || + namedTypes.TSMethodSignature.check(m) || + namedTypes.TSConstructSignatureDeclaration.check(m) + ) { + // Check for the return type + const returnType = ((m as any).returnType?.typeAnnotation as any)?.typeName?.name + if (returnType) { + node.pushUse({ + name: returnType, + type: "type", + }) + } - // Check for the params type params (recursive) - for (const p of (m as any).params ?? []) { - node.pushUse( - ...TypeAnnotation.flatten(p.typeAnnotation ?? []).map((t) => ({ - name: t, - type: "type", - })) - ) - } - } - } + // Check for the params type params (recursive) + for (const p of (m as any).params ?? []) { + node.pushUse( + ...TypeAnnotation.flatten(p.typeAnnotation ?? []).map((t) => ({ + name: t, + type: "type", + })) + ) + } + } + } - // Remove uses that uses the type parameters - node.uses = node.uses.filter((u) => !typeParameters.includes(u.name)) + // Remove uses that uses the type parameters + node.uses = node.uses.filter((u) => !typeParameters.includes(u.name)) - return node - } + return node + } } diff --git a/ingestion/src/process/prepare/processor/syntax/namespaces.ts b/ingestion/src/process/prepare/processor/syntax/namespaces.ts index 6ab48ab..909f8e1 100644 --- a/ingestion/src/process/prepare/processor/syntax/namespaces.ts +++ b/ingestion/src/process/prepare/processor/syntax/namespaces.ts @@ -7,48 +7,38 @@ import { Interface } from "./interface" import { TypeAlias } from "./typeAlias" export namespace Namespaces { - export function Handle(n: namedTypes.TSModuleDeclaration) { - const node = new TreeNode( - (n.id as any)?.name?.toString() ?? "", - "Namespace", - "", - "", - { - start: { - line: n.loc?.start.line ?? 0, - column: n.loc?.start.column ?? 0, - }, - end: { - line: n.loc?.end.line ?? 0, - column: n.loc?.end.column ?? 0, - }, - } - ) + export function Handle(n: namedTypes.TSModuleDeclaration) { + const node = new TreeNode((n.id as any)?.name?.toString() ?? "", "Namespace", "", "", { + start: { + line: n.loc?.start.line ?? 0, + column: n.loc?.start.column ?? 0, + }, + end: { + line: n.loc?.end.line ?? 0, + column: n.loc?.end.column ?? 0, + }, + }) - const body = ((n as any).declaration?.body?.body ?? - []) as namedTypes.TSModuleBlock[] - for (const b of body) { - let d = b - if (namedTypes.ExportNamedDeclaration.check(b)) d = (b as any).declaration + const body = ((n as any).declaration?.body?.body ?? []) as namedTypes.TSModuleBlock[] + for (const b of body) { + let d = b + if (namedTypes.ExportNamedDeclaration.check(b)) d = (b as any).declaration - if (namedTypes.FunctionDeclaration.check(d)) { - Functions.Handle(d) - } else if (namedTypes.TSInterfaceDeclaration.check(d)) { - Interface.Handle(d as any) - } else if (namedTypes.TSTypeAliasDeclaration.check(d)) { - TypeAlias.Handle(d) - } else if (namedTypes.TSEnumDeclaration.check(d)) { - Enums.Handle(d as any) - } else if ( - namedTypes.TSModuleDeclaration.check(d) || - namedTypes.ExportNamedDeclaration.check(d) - ) { - Namespaces.Handle(d as any) - } else if (namedTypes.ClassDeclaration.check(d)) { - // Classes.Handle(d) - } - } + if (namedTypes.FunctionDeclaration.check(d)) { + Functions.Handle(d) + } else if (namedTypes.TSInterfaceDeclaration.check(d)) { + Interface.Handle(d as any) + } else if (namedTypes.TSTypeAliasDeclaration.check(d)) { + TypeAlias.Handle(d) + } else if (namedTypes.TSEnumDeclaration.check(d)) { + Enums.Handle(d as any) + } else if (namedTypes.TSModuleDeclaration.check(d) || namedTypes.ExportNamedDeclaration.check(d)) { + Namespaces.Handle(d as any) + } else if (namedTypes.ClassDeclaration.check(d)) { + // Classes.Handle(d) + } + } - return node - } + return node + } } diff --git a/ingestion/src/process/prepare/processor/syntax/typeAlias.ts b/ingestion/src/process/prepare/processor/syntax/typeAlias.ts index 994e0cd..4962f2d 100644 --- a/ingestion/src/process/prepare/processor/syntax/typeAlias.ts +++ b/ingestion/src/process/prepare/processor/syntax/typeAlias.ts @@ -4,41 +4,35 @@ import { TreeNode } from "../core/treeNode" import { TypeAnnotation } from "../core/typeAnnotation" export namespace TypeAlias { - export function Handle(n: namedTypes.TSTypeAliasDeclaration) { - const node = new TreeNode( - n.id?.name.toString() ?? "", - "TypeAlias", - "", - "", - { - start: { - line: n.loc?.start.line ?? 0, - column: n.loc?.start.column ?? 0, - }, - end: { - line: n.loc?.end.line ?? 0, - column: n.loc?.end.column ?? 0, - }, - } - ) + export function Handle(n: namedTypes.TSTypeAliasDeclaration) { + const node = new TreeNode(n.id?.name.toString() ?? "", "TypeAlias", "", "", { + start: { + line: n.loc?.start.line ?? 0, + column: n.loc?.start.column ?? 0, + }, + end: { + line: n.loc?.end.line ?? 0, + column: n.loc?.end.column ?? 0, + }, + }) - // Check for type parameters - const typeParameters: string[] = [] - for (const p of n.typeParameters?.params ?? []) { - typeParameters.push((p.name as any).name) - } + // Check for type parameters + const typeParameters: string[] = [] + for (const p of n.typeParameters?.params ?? []) { + typeParameters.push((p.name as any).name) + } - // Check for external references - node.pushUse( - ...TypeAnnotation.flatten(n.typeAnnotation).map((name) => ({ - name, - type: "type", - })) - ) + // Check for external references + node.pushUse( + ...TypeAnnotation.flatten(n.typeAnnotation).map((name) => ({ + name, + type: "type", + })) + ) - // Remove uses that uses the type parameters - node.uses = node.uses.filter((u) => !typeParameters.includes(u.name)) + // Remove uses that uses the type parameters + node.uses = node.uses.filter((u) => !typeParameters.includes(u.name)) - return node - } + return node + } } diff --git a/ingestion/src/process/prepare/processor/syntax/variableDeclarations.ts b/ingestion/src/process/prepare/processor/syntax/variableDeclarations.ts index e960352..06a8eee 100644 --- a/ingestion/src/process/prepare/processor/syntax/variableDeclarations.ts +++ b/ingestion/src/process/prepare/processor/syntax/variableDeclarations.ts @@ -5,56 +5,56 @@ import { Classes } from "./classes" import { Functions } from "./functions" export namespace VariableDeclarations { - export function Handle(n: namedTypes.VariableDeclaration) { - const nodes: TreeNode[] = [] + export function Handle(n: namedTypes.VariableDeclaration) { + const nodes: TreeNode[] = [] - // For variable declarations - for (const d of n.declarations) { - if (namedTypes.VariableDeclarator.check(d)) { - const node = new TreeNode((d.id as any).name, "variable", "", "", { - start: { - line: n.loc?.start.line ?? 0, - column: n.loc?.start.column ?? 0, - }, - end: { - line: n.loc?.end.line ?? 0, - column: n.loc?.end.column ?? 0, - }, - }) + // For variable declarations + for (const d of n.declarations) { + if (namedTypes.VariableDeclarator.check(d)) { + const node = new TreeNode((d.id as any).name, "variable", "", "", { + start: { + line: n.loc?.start.line ?? 0, + column: n.loc?.start.column ?? 0, + }, + end: { + line: n.loc?.end.line ?? 0, + column: n.loc?.end.column ?? 0, + }, + }) - // For variables declared using other variables - if (namedTypes.Identifier.check(d.init)) { - if (!d.init.name) continue - node.pushUse({ - name: d.init.name, - type: "variable", - }) - } - // For variables declared using function calls - else if (namedTypes.CallExpression.check(d.init)) { - node.pushUse( - { - name: (d.init.callee as any).name, - type: "function", - }, - ...Functions.flattenCallExpression(d.init) - ) - } - // For variables declared using new expressions - else if (namedTypes.NewExpression.check(d.init)) { - if (namedTypes.Identifier.check(d.init.callee)) { - node.pushUse({ - name: d.init.callee.name, - type: "class", - }) - } - node.pushUse(...Classes.flattenNewExpression(d.init)) - } + // For variables declared using other variables + if (namedTypes.Identifier.check(d.init)) { + if (!d.init.name) continue + node.pushUse({ + name: d.init.name, + type: "variable", + }) + } + // For variables declared using function calls + else if (namedTypes.CallExpression.check(d.init)) { + node.pushUse( + { + name: (d.init.callee as any).name, + type: "function", + }, + ...Functions.flattenCallExpression(d.init) + ) + } + // For variables declared using new expressions + else if (namedTypes.NewExpression.check(d.init)) { + if (namedTypes.Identifier.check(d.init.callee)) { + node.pushUse({ + name: d.init.callee.name, + type: "class", + }) + } + node.pushUse(...Classes.flattenNewExpression(d.init)) + } - nodes.push(node) - } - } + nodes.push(node) + } + } - return nodes - } + return nodes + } } diff --git a/ingestion/src/process/prepare/sourceFile.ts b/ingestion/src/process/prepare/sourceFile.ts index f135904..f291c82 100644 --- a/ingestion/src/process/prepare/sourceFile.ts +++ b/ingestion/src/process/prepare/sourceFile.ts @@ -3,32 +3,29 @@ import path from "path" import { ISourceFile } from "./sourceFile.types" export class SourceFile implements ISourceFile { - private _path: string - private _projectPath: string + private _path: string + private _projectPath: string - constructor(filepath: string) { - // Normalize file path - this._path = filepath.replace(/\\/g, "/") + constructor(filepath: string) { + // Normalize file path + this._path = filepath.replace(/\\/g, "/") - // Get project path - const sourceFileAbsolutePath = path.resolve(this._path).replace(/\\/g, "/") - const projectPath = sourceFileAbsolutePath.slice( - 0, - sourceFileAbsolutePath.indexOf(this._path) - ) - this._projectPath = projectPath - } + // Get project path + const sourceFileAbsolutePath = path.resolve(this._path).replace(/\\/g, "/") + const projectPath = sourceFileAbsolutePath.slice(0, sourceFileAbsolutePath.indexOf(this._path)) + this._projectPath = projectPath + } - read(): string { - const content = readFileSync(this._path, "utf-8") - return content - } + read(): string { + const content = readFileSync(this._path, "utf-8") + return content + } - getProjectPath(): string { - return this._projectPath - } + getProjectPath(): string { + return this._projectPath + } - getFullPath(): string { - return this._path - } + getFullPath(): string { + return this._path + } } diff --git a/ingestion/src/process/prepare/sourceFile.types.ts b/ingestion/src/process/prepare/sourceFile.types.ts index a163500..7b56681 100644 --- a/ingestion/src/process/prepare/sourceFile.types.ts +++ b/ingestion/src/process/prepare/sourceFile.types.ts @@ -1,19 +1,19 @@ export enum SourceFileType { - // TypeScript - TypeScript, - TypeScriptReact, + // TypeScript + TypeScript, + TypeScriptReact, - // JavaScript - JavaScript, - JavaScriptReact, + // JavaScript + JavaScript, + JavaScriptReact, - // Others - JSON, + // Others + JSON, } export interface ISourceFile { - read(): string + read(): string - getProjectPath(): string - getFullPath(): string + getProjectPath(): string + getFullPath(): string } From 4ca67ddbbd1f70dba2442471067158f77dfcfd17 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 03:49:29 +0000 Subject: [PATCH 2/2] Bump body-parser and express in /ingestion Bumps [body-parser](https://github.com/expressjs/body-parser) to 1.20.3 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together. Updates `body-parser` from 1.20.2 to 1.20.3 - [Release notes](https://github.com/expressjs/body-parser/releases) - [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/body-parser/compare/1.20.2...1.20.3) Updates `express` from 4.19.2 to 4.21.0 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md) - [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.0) --- updated-dependencies: - dependency-name: body-parser dependency-type: indirect - dependency-name: express dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- ingestion/package-lock.json | 7319 ++++++++++++++++++----------------- ingestion/package.json | 2 +- 2 files changed, 3683 insertions(+), 3638 deletions(-) diff --git a/ingestion/package-lock.json b/ingestion/package-lock.json index 6dd72f3..be3a740 100644 --- a/ingestion/package-lock.json +++ b/ingestion/package-lock.json @@ -1,3639 +1,3684 @@ { - "name": "ingestion", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "ast-types": "^0.14.2", - "cli-progress": "^3.12.0", - "cors": "^2.8.5", - "dotenv": "^16.4.5", - "express": "^4.19.1", - "glob": "^10.4.2", - "jsdom": "^25.0.0", - "nanoid": "^5.0.7", - "neo4j-driver": "4.4.0", - "openai": "^4.29.2", - "puppeteer": "^23.3.0", - "recast": "^0.23.9", - "uuid": "^10.0.0" - }, - "devDependencies": { - "@babel/parser": "^7.24.7", - "@huggingface/inference": "^2.6.6", - "@types/cli-progress": "^3.11.5", - "@types/cors": "^2.8.17", - "@types/express": "^4.17.21", - "@types/jsdom": "^21.1.7", - "@types/node": "^20.11.27", - "@types/uuid": "^10.0.0", - "nodemon": "^3.1.0", - "ts-node": "^10.9.2", - "tsx": "^4.19.0", - "typescript": "^5.4.2" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.24.0", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@huggingface/inference": { - "version": "2.6.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/string-width/node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@puppeteer/browsers": { - "version": "2.4.0", - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.3.6", - "extract-zip": "^2.0.1", - "progress": "^2.0.3", - "proxy-agent": "^6.4.0", - "semver": "^7.6.3", - "tar-fs": "^3.0.6", - "unbzip2-stream": "^1.4.3", - "yargs": "^17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@puppeteer/browsers/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "license": "MIT" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.10", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cli-progress": { - "version": "3.11.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cors": { - "version": "2.8.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.43", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsdom": { - "version": "21.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/mime": { - "version": "3.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.11.27", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.11", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/qs": { - "version": "6.9.14", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/send/node_modules/@types/mime": { - "version": "1.3.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "10.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/ast-types": { - "version": "0.14.2", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.3", - "license": "0BSD" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/b4a": { - "version": "1.6.6", - "license": "Apache-2.0" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.4.2", - "license": "Apache-2.0", - "optional": true - }, - "node_modules/bare-fs": { - "version": "2.3.3", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-events": "^2.0.0", - "bare-path": "^2.0.0", - "bare-stream": "^2.0.0" - } - }, - "node_modules/bare-os": { - "version": "2.4.2", - "license": "Apache-2.0", - "optional": true - }, - "node_modules/bare-path": { - "version": "2.1.3", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-os": "^2.1.0" - } - }, - "node_modules/bare-stream": { - "version": "2.2.1", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "b4a": "^1.6.6", - "streamx": "^2.18.0" - } - }, - "node_modules/base-64": { - "version": "0.1.0" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/charenc": { - "version": "0.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chromium-bidi": { - "version": "0.6.5", - "license": "Apache-2.0", - "dependencies": { - "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0", - "zod": "3.23.8" - }, - "peerDependencies": { - "devtools-protocol": "*" - } - }, - "node_modules/cli-progress": { - "version": "3.12.0", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/cliui/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.6.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/cssstyle": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "rrweb-cssom": "^0.6.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.6.0", - "license": "MIT" - }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/data-urls": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/degenerator": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/degenerator/node_modules/ast-types": { - "version": "0.13.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/degenerator/node_modules/tslib": { - "version": "2.7.0", - "license": "0BSD" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/devtools-protocol": { - "version": "0.0.1330662", - "license": "BSD-3-Clause" - }, - "node_modules/diff": { - "version": "4.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/digest-fetch": { - "version": "1.3.0", - "license": "ISC", - "dependencies": { - "base-64": "^0.1.0", - "md5": "^2.3.0" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.23.1", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/express": { - "version": "4.19.2", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/extract-zip/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "license": "MIT" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/foreground-child": { - "version": "3.2.1", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/formdata-node/node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-tsconfig": { - "version": "4.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/get-uri": { - "version": "6.0.3", - "license": "MIT", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/get-uri/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/get-uri/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/glob": { - "version": "10.4.2", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.4", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/https-proxy-agent": { - "version": "7.0.5", - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/humanize-ms/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ip-address": { - "version": "9.0.5", - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.0", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/jsdom": { - "version": "25.0.0", - "license": "MIT", - "dependencies": { - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.12", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/md5": { - "version": "2.3.0", - "license": "BSD-3-Clause", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/methods": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mitt": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "5.0.7", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo4j-driver": { - "version": "4.4.0", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.5.5", - "neo4j-driver-bolt-connection": "^4.4.0", - "neo4j-driver-core": "^4.4.0", - "rxjs": "^6.6.3" - } - }, - "node_modules/neo4j-driver-bolt-connection": { - "version": "4.4.11", - "license": "Apache-2.0", - "dependencies": { - "buffer": "^6.0.3", - "neo4j-driver-core": "4.4.11", - "string_decoder": "^1.3.0" - } - }, - "node_modules/neo4j-driver-core": { - "version": "4.4.11", - "license": "Apache-2.0" - }, - "node_modules/netmask": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-fetch/node_modules/whatwg-url/node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/whatwg-url/node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/nodemon": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "4.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.12", - "license": "MIT" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/openai": { - "version": "4.29.2", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "digest-fetch": "^1.3.0", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7", - "web-streams-polyfill": "^3.2.1" - }, - "bin": { - "openai": "bin/cli" - } - }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.26", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "license": "MIT", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/pac-proxy-agent/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "7.1.2", - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "license": "MIT" - }, - "node_modules/pend": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-agent": { - "version": "6.4.0", - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/proxy-agent/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/psl": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "23.3.0", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@puppeteer/browsers": "2.4.0", - "chromium-bidi": "0.6.5", - "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1330662", - "puppeteer-core": "23.3.0", - "typed-query-selector": "^2.12.0" - }, - "bin": { - "puppeteer": "lib/cjs/puppeteer/node/cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/puppeteer-core": { - "version": "23.3.0", - "license": "Apache-2.0", - "dependencies": { - "@puppeteer/browsers": "2.4.0", - "chromium-bidi": "0.6.5", - "debug": "^4.3.6", - "devtools-protocol": "0.0.1330662", - "typed-query-selector": "^2.12.0", - "ws": "^8.18.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-core/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.11.0", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "license": "MIT" - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recast": { - "version": "0.23.9", - "license": "MIT", - "dependencies": { - "ast-types": "^0.16.1", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tiny-invariant": "^1.3.3", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/ast-types": { - "version": "0.16.1", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/recast/node_modules/tslib": { - "version": "2.6.3", - "license": "0BSD" - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "license": "MIT" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/rrweb-cssom": { - "version": "0.7.1", - "license": "MIT" - }, - "node_modules/rxjs": { - "version": "6.6.7", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/saxes": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/semver": { - "version": "7.6.0", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/socks-proxy-agent/node_modules/debug": { - "version": "4.3.7", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socks-proxy-agent/node_modules/debug/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "license": "BSD-3-Clause" - }, - "node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/streamx": { - "version": "2.20.0", - "license": "MIT", - "dependencies": { - "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "license": "MIT" - }, - "node_modules/tar-fs": { - "version": "3.0.6", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" - } - }, - "node_modules/tar-stream": { - "version": "3.1.7", - "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/text-decoder": { - "version": "1.1.1", - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/through": { - "version": "2.3.8", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tsx": { - "version": "4.19.0", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.23.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-query-selector": { - "version": "2.12.0", - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.4.2", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "license": "MIT", - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "license": "MIT" - }, - "node_modules/universalify": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/urlpattern-polyfill": { - "version": "10.0.0", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "10.0.0", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "14.0.0", - "license": "MIT", - "dependencies": { - "tr46": "^5.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrap-ansi/node_modules/string-width/node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.0", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "license": "MIT" - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/zod": { - "version": "3.23.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } + "name": "ingestion", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "ast-types": "^0.14.2", + "cli-progress": "^3.12.0", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.21.0", + "glob": "^10.4.2", + "jsdom": "^25.0.0", + "nanoid": "^5.0.7", + "neo4j-driver": "4.4.0", + "openai": "^4.29.2", + "puppeteer": "^23.3.0", + "recast": "^0.23.9", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@babel/parser": "^7.24.7", + "@huggingface/inference": "^2.6.6", + "@types/cli-progress": "^3.11.5", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/jsdom": "^21.1.7", + "@types/node": "^20.11.27", + "@types/uuid": "^10.0.0", + "nodemon": "^3.1.0", + "prettier": "^3.3.3", + "ts-node": "^10.9.2", + "tsx": "^4.19.0", + "typescript": "^5.4.2" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.7", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.0", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@huggingface/inference": { + "version": "2.6.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width/node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.4.0", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.3.6", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.6.3", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "license": "MIT" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.10", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cli-progress": { + "version": "3.11.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.43", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsdom": { + "version": "21.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/mime": { + "version": "3.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.11.27", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/send/node_modules/@types/mime": { + "version": "1.3.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/ast-types": { + "version": "0.14.2", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ast-types/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/b4a": { + "version": "1.6.6", + "license": "Apache-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.4.2", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-fs": { + "version": "2.3.3", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.2", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.2.1", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "b4a": "^1.6.6", + "streamx": "^2.18.0" + } + }, + "node_modules/base-64": { + "version": "0.1.0" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/chalk/node_modules/ansi-styles/node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/charenc": { + "version": "0.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chromium-bidi": { + "version": "0.6.5", + "license": "Apache-2.0", + "dependencies": { + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/cliui/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/cssstyle": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.6.0", + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/degenerator/node_modules/ast-types": { + "version": "0.13.4", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/degenerator/node_modules/tslib": { + "version": "2.7.0", + "license": "0BSD" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1330662", + "license": "BSD-3-Clause" + }, + "node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/digest-fetch": { + "version": "1.3.0", + "license": "ISC", + "dependencies": { + "base-64": "^0.1.0", + "md5": "^2.3.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.23.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "license": "MIT" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "license": "MIT" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "license": "MIT", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/get-uri": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/get-uri/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/get-uri/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/glob": { + "version": "10.4.2", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.4", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/humanize-ms/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.0", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "25.0.0", + "license": "MIT", + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.4", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/md5": { + "version": "2.3.0", + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/nanoid": { + "version": "5.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo4j-driver": { + "version": "4.4.0", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.5.5", + "neo4j-driver-bolt-connection": "^4.4.0", + "neo4j-driver-core": "^4.4.0", + "rxjs": "^6.6.3" + } + }, + "node_modules/neo4j-driver-bolt-connection": { + "version": "4.4.11", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^6.0.3", + "neo4j-driver-core": "4.4.11", + "string_decoder": "^1.3.0" + } + }, + "node_modules/neo4j-driver-core": { + "version": "4.4.11", + "license": "Apache-2.0" + }, + "node_modules/netmask": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-fetch/node_modules/whatwg-url/node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/whatwg-url/node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/nodemon": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.12", + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openai": { + "version": "4.29.2", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "digest-fetch": "^1.3.0", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + }, + "bin": { + "openai": "bin/cli" + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.26", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pac-proxy-agent/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + }, + "node_modules/pend": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-agent": { + "version": "6.4.0", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/proxy-agent/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "23.3.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.4.0", + "chromium-bidi": "0.6.5", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1330662", + "puppeteer-core": "23.3.0", + "typed-query-selector": "^2.12.0" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "23.3.0", + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.4.0", + "chromium-bidi": "0.6.5", + "debug": "^4.3.6", + "devtools-protocol": "0.0.1330662", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "license": "MIT" + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recast": { + "version": "0.23.9", + "license": "MIT", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/ast-types": { + "version": "0.16.1", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/recast/node_modules/tslib": { + "version": "2.6.3", + "license": "0BSD" + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "license": "MIT" + }, + "node_modules/rxjs": { + "version": "6.6.7", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "license": "BSD-3-Clause" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamx": { + "version": "2.20.0", + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "license": "MIT" + }, + "node_modules/tar-fs": { + "version": "3.0.6", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.1.1", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/through": { + "version": "2.3.8", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsx": { + "version": "4.19.0", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.4.2", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "10.0.0", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.0.0", + "license": "MIT", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/string-width/node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/zod": { + "version": "3.23.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } } diff --git a/ingestion/package.json b/ingestion/package.json index 6a347db..de9e762 100644 --- a/ingestion/package.json +++ b/ingestion/package.json @@ -25,7 +25,7 @@ "cli-progress": "^3.12.0", "cors": "^2.8.5", "dotenv": "^16.4.5", - "express": "^4.19.1", + "express": "^4.21.0", "glob": "^10.4.2", "jsdom": "^25.0.0", "nanoid": "^5.0.7",