@sentry/wizard 6.1.2 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/dist/e2e-tests/tests/angular-17.test.js +5 -0
- package/dist/e2e-tests/tests/angular-17.test.js.map +1 -1
- package/dist/e2e-tests/tests/angular-19.test.js +5 -0
- package/dist/e2e-tests/tests/angular-19.test.js.map +1 -1
- package/dist/e2e-tests/tests/expo.test.js +9 -2
- package/dist/e2e-tests/tests/expo.test.js.map +1 -1
- package/dist/e2e-tests/tests/flutter.test.js +32 -4
- package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-14.test.js +4 -3
- package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-15.test.js +17 -4
- package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-3.test.js +9 -2
- package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
- package/dist/e2e-tests/tests/nuxt-4.test.js +9 -2
- package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
- package/dist/e2e-tests/tests/react-native.test.js +8 -1
- package/dist/e2e-tests/tests/react-native.test.js.map +1 -1
- package/dist/e2e-tests/tests/remix.test.js +19 -4
- package/dist/e2e-tests/tests/remix.test.js.map +1 -1
- package/dist/e2e-tests/tests/sveltekit.test.js +16 -2
- package/dist/e2e-tests/tests/sveltekit.test.js.map +1 -1
- package/dist/lib/Steps/Integrations/Electron.js +4 -0
- package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
- package/dist/src/android/android-wizard.js +3 -0
- package/dist/src/android/android-wizard.js.map +1 -1
- package/dist/src/angular/angular-wizard.js +3 -0
- package/dist/src/angular/angular-wizard.js.map +1 -1
- package/dist/src/apple/apple-wizard.js +13 -0
- package/dist/src/apple/apple-wizard.js.map +1 -1
- package/dist/src/apple/code-tools.d.ts +1 -1
- package/dist/src/apple/code-tools.js +3 -3
- package/dist/src/apple/code-tools.js.map +1 -1
- package/dist/src/apple/inject-code-snippet.d.ts +2 -1
- package/dist/src/apple/inject-code-snippet.js +2 -2
- package/dist/src/apple/inject-code-snippet.js.map +1 -1
- package/dist/src/apple/templates.d.ts +2 -2
- package/dist/src/apple/templates.js +22 -6
- package/dist/src/apple/templates.js.map +1 -1
- package/dist/src/flutter/code-tools.d.ts +1 -0
- package/dist/src/flutter/code-tools.js +6 -0
- package/dist/src/flutter/code-tools.js.map +1 -1
- package/dist/src/flutter/flutter-wizard.js +3 -0
- package/dist/src/flutter/flutter-wizard.js.map +1 -1
- package/dist/src/flutter/templates.d.ts +1 -0
- package/dist/src/flutter/templates.js +5 -0
- package/dist/src/flutter/templates.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +14 -7
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/utils.d.ts +8 -0
- package/dist/src/nextjs/utils.js +36 -1
- package/dist/src/nextjs/utils.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard.js +3 -0
- package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
- package/dist/src/react-native/expo-metro.d.ts +2 -2
- package/dist/src/react-native/expo-metro.js +32 -27
- package/dist/src/react-native/expo-metro.js.map +1 -1
- package/dist/src/react-native/metro.d.ts +4 -4
- package/dist/src/react-native/metro.js +39 -17
- package/dist/src/react-native/metro.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.js +3 -0
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/remix/codemods/root.d.ts +1 -0
- package/dist/src/remix/codemods/root.js +30 -2
- package/dist/src/remix/codemods/root.js.map +1 -1
- package/dist/src/remix/remix-wizard.d.ts +4 -0
- package/dist/src/remix/remix-wizard.js +7 -0
- package/dist/src/remix/remix-wizard.js.map +1 -1
- package/dist/src/sveltekit/sveltekit-wizard.js +3 -0
- package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
- package/dist/src/utils/clack/mcp-config.d.ts +7 -0
- package/dist/src/utils/clack/mcp-config.js +427 -0
- package/dist/src/utils/clack/mcp-config.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/test/angular/angular-wizard.test.js +3 -0
- package/dist/test/angular/angular-wizard.test.js.map +1 -1
- package/dist/test/apple/code-tools.test.js +62 -14
- package/dist/test/apple/code-tools.test.js.map +1 -1
- package/dist/test/apple/templates.test.js +71 -2
- package/dist/test/apple/templates.test.js.map +1 -1
- package/dist/test/flutter/code-tools.test.js +1 -0
- package/dist/test/flutter/code-tools.test.js.map +1 -1
- package/dist/test/flutter/templates.test.js +31 -1
- package/dist/test/flutter/templates.test.js.map +1 -1
- package/dist/test/nextjs/wizard-double-wrap-prevention.test.d.ts +1 -0
- package/dist/test/nextjs/wizard-double-wrap-prevention.test.js +269 -0
- package/dist/test/nextjs/wizard-double-wrap-prevention.test.js.map +1 -0
- package/dist/test/nuxt/templates.test.js +3 -0
- package/dist/test/nuxt/templates.test.js.map +1 -1
- package/dist/test/react-native/expo-metro.test.js +3 -3
- package/dist/test/react-native/expo-metro.test.js.map +1 -1
- package/dist/test/react-native/metro.test.js +76 -15
- package/dist/test/react-native/metro.test.js.map +1 -1
- package/dist/test/remix/root.test.js +229 -0
- package/dist/test/remix/root.test.js.map +1 -1
- package/dist/test/sveltekit/templates.test.js +3 -0
- package/dist/test/sveltekit/templates.test.js.map +1 -1
- package/dist/test/utils/clack/mcp-config.test.d.ts +1 -0
- package/dist/test/utils/clack/mcp-config.test.js +520 -0
- package/dist/test/utils/clack/mcp-config.test.js.map +1 -0
- package/package.json +1 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.test.js","sourceRoot":"","sources":["../../../../test/utils/clack/mcp-config.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAyE;AACzE,4CAA8B;AAC9B,gDAAkC;AAClC,iEAAmD;AACnD,oEAAkF;AASlF,8CAA8C;AAC9C,WAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,gBAAgB,EAAE,WAAE,CAAC,EAAE,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnE,yBAAyB,EAAE,WAAE,CAAC,EAAE,EAAE;CACnC,CAAC,CAAC,CAAC;AAEJ,iCAAiC;AACjC,WAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/B,OAAO,EAAE,WAAE,CAAC,EAAE,EAAE;IAChB,MAAM,EAAE,WAAE,CAAC,EAAE,EAAE;IACf,QAAQ,EAAE,WAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;IAC5B,MAAM,EAAE,WAAE,CAAC,EAAE,EAAE;IACf,GAAG,EAAE;QACH,OAAO,EAAE,WAAE,CAAC,EAAE,EAAE;QAChB,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;QACb,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;KACd;CACF,CAAC,CAAC,CAAC;AAEJ,WAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnB,WAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAE9B,IAAA,iBAAQ,EAAC,YAAY,EAAE,GAAG,EAAE;IAgB1B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,KAAK,GAAG,MAAM,WAAE,CAAC,UAAU,CAAa,gBAAgB,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,MAAM,WAAE,CAAC,UAAU,CACpC,0BAA0B,CAC3B,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC/B,CAAC,CAAC;IAEF,IAAA,mBAAU,EAAC,GAAG,EAAE;QACd,WAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,WAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,IAAA,iBAAQ,EAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,IAAA,WAAE,EAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAChD,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACvC,eAAM,CAAC,gBAAgB,CAAC;gBACtB,OAAO,EAAE,eAAM,CAAC,gBAAgB,CAC9B,0DAA0D,CACjD;gBACX,OAAO,EAAE,eAAM,CAAC,eAAe,CAAC;oBAC9B,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;oBACzC,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBACxC,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;iBAC9C,CAAc;gBACf,YAAY,EAAE,KAAK;aACpB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,YAAY,GAAG,WAAE;iBACpB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,uBAAuB,CAC1C,CAAC,EACD,eAAM,CAAC,gBAAgB,CAAC;gBACtB,OAAO,EAAE,wCAAwC;gBACjD,OAAO,EAAE,eAAM,CAAC,eAAe,CAAC;oBAC9B,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;oBAC5C,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;oBAC5C,eAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;iBACjD,CAAc;aAChB,CAAC,CACH,CAAC;YAEF,IAAA,eAAM,EAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC,eAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAC3C,eAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,EACvC,MAAM,CACP,CAAC;YAEF,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAC5C,eAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAC5C,CAAC;YACF,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAC5C,gDAAgD,CACjD,CAAC;YACF,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAC9C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,YAAY,GAAG,WAAE;iBACpB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,IAAA,eAAM,EAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC,eAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAC3C,eAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,EACpC,MAAM,CACP,CAAC;YAEF,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAC5C,eAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAC5C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACvC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,YAAY,GAAG,WAAE;iBACpB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,IAAA,eAAM,EAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC,eAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,EACpC,eAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,EACvC,MAAM,CACP,CAAC;YAEF,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAC5C,eAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CACrC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;gBACpC,UAAU,EAAE;oBACV,WAAW,EAAE;wBACX,GAAG,EAAE,2BAA2B;qBACjC;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,IAAA,eAAM,EAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACxC,IAAA,eAAM,EAAC,aAAa,CAAC,CAAC,oBAAoB,CACxC,eAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAC3C,eAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EACjC,MAAM,CACP,CAAC;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CACxB,CAAC;YACnB,IAAA,eAAM,EAAC,cAAc,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAChE,IAAA,eAAM,EAAC,cAAc,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAE3D,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAC5C,0BAA0B,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;gBACpC,OAAO,EAAE;oBACP,WAAW,EAAE;wBACX,GAAG,EAAE,2BAA2B;wBAChC,IAAI,EAAE,MAAM;qBACb;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CACxB,CAAC;YACnB,IAAA,eAAM,EAAC,cAAc,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAA,eAAM,EAAC,cAAc,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAA,eAAM,EAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAEtE,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAC5C,0BAA0B,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACvC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;gBACpC,UAAU,EAAE;oBACV,WAAW,EAAE;wBACX,GAAG,EAAE,2BAA2B;qBACjC;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CACxB,CAAC;YACnB,IAAA,eAAM,EAAC,cAAc,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAChE,IAAA,eAAM,EAAC,cAAc,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAE3D,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,YAAY,GAAG,WAAE;iBACpB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,WAAE;iBACrB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,eAAM,EAAC,IAAA,wCAA2B,GAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAErE,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,0CAA0C,CAAC,CACpE,CAAC;YAEF,IAAA,eAAM,EAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,oBAAoB,CAC/D,eAAM,CAAC,gBAAgB,CAAC;gBACtB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;gBAC1C,WAAW,EAAE,eAAM,CAAC,gBAAgB,CAAC,YAAY,CAAW;gBAC5D,IAAI,EAAE,sCAAsC;aAC7C,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,YAAY,GAAG,WAAE;iBACpB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,WAAE;iBACrB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,eAAM,EAAC,IAAA,wCAA2B,GAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAErE,IAAA,eAAM,EAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,oBAAoB,CAC/D,eAAM,CAAC,gBAAgB,CAAC;gBACtB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;gBAC1C,WAAW,EAAE,eAAM,CAAC,gBAAgB,CAAC,SAAS,CAAW;gBACzD,IAAI,EAAE,sCAAsC;aAC7C,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACvC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,YAAY,GAAG,WAAE;iBACpB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,WAAE;iBACrB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,eAAM,EAAC,IAAA,wCAA2B,GAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAErE,IAAA,eAAM,EAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,oBAAoB,CAC/D,eAAM,CAAC,gBAAgB,CAAC;gBACtB,QAAQ,EAAE,WAAW;gBACrB,WAAW,EAAE,eAAM,CAAC,gBAAgB,CAAC,YAAY,CAAW;gBAC5D,IAAI,EAAE,sCAAsC;aAC7C,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,4DAA4D;YAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;gBACpC,UAAU,EAAE;oBACV,WAAW,EAAE;wBACX,GAAG,EAAE,2BAA2B;qBACjC;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,WAAE;iBACrB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAC9D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,eAAM,EAAC,IAAA,wCAA2B,GAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAErE,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,0CAA0C,CAAC,CACpE,CAAC;YAEF,IAAA,eAAM,EAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,YAAY,GAAG,WAAE;iBACpB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBACpD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,eAAM,EAAC,IAAA,wCAA2B,GAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YAErE,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,0CAA0C,CAAC,CACpE,CAAC;YAEF,IAAA,eAAM,EAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;YAClG,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YACnC,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;gBACpC,aAAa,EAAE,OAAO;aACvB,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAC/B,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CACxB,CAAC;YACnB,IAAA,eAAM,EAAC,cAAc,CAAC,CAAC,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAChE,IAAA,eAAM,EAAC,cAAc,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACjD,IAAA,eAAM,EAAC,cAAc,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAExD,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAC5C,0BAA0B,CAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;YACzE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,WAAW,CAAC;iBAClC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,gCAAgC;YAEhE,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,sBAAsB;YACtB,MAAM,SAAS,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;gBACxC,KAAK,EAAE;oBACL,KAAK,EAAE,WAAE,CAAC,EAAE,EAAE;oBACd,GAAG,EAAE,WAAE,CAAC,EAAE,EAAE;iBACb;gBACD,EAAE,EAAE,WAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,QAAiC,EAAE,EAAE;oBACrD,IAAI,KAAK,KAAK,OAAO;wBAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACrC,CAAC,CAAC;aACH,CAAC,CAAC;YACH,WAAE,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAE9D,qCAAqC;YACrC,gEAAgE;YAChE,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAC1C,CAAC;YAEF,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,eAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CACtC,CAAC;YAEF,kCAAkC;YAClC,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACvC,eAAM,CAAC,gBAAgB,CAAC;gBACtB,OAAO,EAAE,kCAAkC;aAC5C,CAAC,CACH,CAAC;YAEF,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAC5C,oCAAoC,CACrC,CAAC;YAEF,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;YACnF,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,OAAO,CAAC;iBAC9B,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,gCAAgC;YAEhE,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,+CAA+C;YAC/C,MAAM,SAAS,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;gBACxC,KAAK,EAAE;oBACL,KAAK,EAAE,WAAE,CAAC,EAAE,EAAE;oBACd,GAAG,EAAE,WAAE,CAAC,EAAE,EAAE;iBACb;gBACD,EAAE,EAAE,WAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,QAAoB,EAAE,EAAE;oBACxC,IAAI,KAAK,KAAK,OAAO;wBAAE,QAAQ,EAAE,CAAC;gBACpC,CAAC,CAAC;aACH,CAAC,CAAC;YACH,WAAE,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAE9D,qCAAqC;YACrC,gEAAgE;YAChE,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CACrD,CAAC;YAEF,IAAA,eAAM,EAAC,UAAU,CAAC,CAAC,oBAAoB,CACrC,eAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CACtC,CAAC;YAEF,kCAAkC;YAClC,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACvC,eAAM,CAAC,gBAAgB,CAAC;gBACtB,OAAO,EAAE,kCAAkC;aAC5C,CAAC,CACH,CAAC;YAEF,mDAAmD;YACnD,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CACvD,CAAC;YAEF,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,WAAW,CAAC;iBAClC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;YAE5D,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,qCAAqC;YACrC,MAAM,SAAS,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBAChD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YACH,WAAE,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAE9D,qCAAqC;YACrC,gEAAgE;YAChE,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,kCAAkC;YAClC,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACvC,eAAM,CAAC,gBAAgB,CAAC;gBACtB,OAAO,EAAE,kCAAkC;aAC5C,CAAC,CACH,CAAC;YAEF,2CAA2C;YAC3C,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CACvD,CAAC;YAEF,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,SAAS,CAAC,CAAC,8BAA8B;iBAC/D,qBAAqB,CAAC,IAAI,CAAC,CAAC,uCAAuC;iBACnE,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB;YAE1D,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,YAAY,GAAG,WAAE;iBACpB,EAAE,EAAE;iBACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC3D,MAAM,aAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAE9B,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACnE,WAAE,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACrE,WAAE,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAE5D,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,8BAA8B;YAC9B,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CACvC,CAAC;YAEF,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CACzC,CAAC;YAEF,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,4CAA4C,CAAC,CACtE,CAAC;YAEF,qCAAqC;YACrC,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACvC,eAAM,CAAC,gBAAgB,CAAC;gBACtB,OAAO,EAAE,mDAAmD;aAC7D,CAAC,CACH,CAAC;YAEF,kCAAkC;YAClC,IAAA,eAAM,EAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,KAAK,CAAC;iBAC5B,qBAAqB,CAAC,WAAW,CAAC;iBAClC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,qCAAqC;YAEtE,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,SAAS,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,WAAE,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAE9D,qCAAqC;YACrC,gEAAgE;YAChE,MAAM,UAAU,GAAG,WAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEzE,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,kCAAkC;YAClC,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACvC,eAAM,CAAC,gBAAgB,CAAC;gBACtB,OAAO,EAAE,kCAAkC;aAC5C,CAAC,CACH,CAAC;YAEF,gDAAgD;YAChD,IAAA,eAAM,EAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAEzC,8CAA8C;YAC9C,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAChD,oCAAoC,CACrC,CAAC;YACF,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAC7C,eAAM,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CACvD,CAAC;YAEF,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAA,WAAE,EAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;YAE/C,WAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,qBAAqB,CAAC,SAAS,CAAC,CAAC,8BAA8B;iBAC/D,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,sCAAsC;YAEvE,WAAE,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,CACvD,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAC3C,CAAC;YAEF,MAAM,IAAA,wCAA2B,GAAE,CAAC;YAEpC,8BAA8B;YAC9B,IAAA,eAAM,EAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACzC,eAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CACvC,CAAC;YAEF,qCAAqC;YACrC,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACvC,eAAM,CAAC,gBAAgB,CAAC;gBACtB,OAAO,EAAE,mDAAmD;aAC7D,CAAC,CACH,CAAC;YAEF,2CAA2C;YAC3C,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAC3C,eAAM,CAAC,gBAAgB,CAAC;gBACtB,OAAO,EAAE,wCAAwC;aAClD,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as childProcess from 'node:child_process';\nimport { offerProjectScopedMcpConfig } from '../../../src/utils/clack/mcp-config';\n\n// Mock types for better type safety\ntype ConfigContent = {\n mcpServers?: Record<string, { url: string }>;\n servers?: Record<string, { url: string; type?: string }>;\n otherProperty?: string;\n};\n\n// Mock the clack utils which wrap the prompts\nvi.mock('../../../src/utils/clack', () => ({\n abortIfCancelled: vi.fn((value: unknown) => Promise.resolve(value)),\n showCopyPasteInstructions: vi.fn(),\n}));\n\n// Mock the external dependencies\nvi.mock('@clack/prompts', () => ({\n confirm: vi.fn(),\n select: vi.fn(),\n isCancel: vi.fn(() => false),\n cancel: vi.fn(),\n log: {\n success: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n },\n}));\n\nvi.mock('node:fs');\nvi.mock('node:child_process');\n\ndescribe('mcp-config', () => {\n // Helper to get mocked modules with proper typing\n type ClackMocks = {\n select: ReturnType<typeof vi.fn>;\n log: {\n success: ReturnType<typeof vi.fn>;\n info: ReturnType<typeof vi.fn>;\n warn: ReturnType<typeof vi.fn>;\n };\n };\n\n type ClackUtilsMocks = {\n abortIfCancelled: ReturnType<typeof vi.fn>;\n showCopyPasteInstructions: ReturnType<typeof vi.fn>;\n };\n\n const getMocks = async () => {\n const clack = await vi.importMock<ClackMocks>('@clack/prompts');\n const clackUtils = await vi.importMock<ClackUtilsMocks>(\n '../../../src/utils/clack',\n );\n return { clack, clackUtils };\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n describe('offerProjectScopedMcpConfig', () => {\n it('should return early if user declines MCP config', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select).mockResolvedValue('no');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining(\n 'Optionally add a project-scoped MCP server configuration',\n ) as string,\n options: expect.arrayContaining([\n expect.objectContaining({ value: 'yes' }),\n expect.objectContaining({ value: 'no' }),\n expect.objectContaining({ value: 'explain' }),\n ]) as unknown[],\n initialValue: 'yes',\n }),\n );\n });\n\n it('should configure for Cursor when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.select).toHaveBeenCalledTimes(2);\n expect(clack.select).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n message: 'Which editor do you want to configure?',\n options: expect.arrayContaining([\n expect.objectContaining({ value: 'cursor' }),\n expect.objectContaining({ value: 'vscode' }),\n expect.objectContaining({ value: 'claudeCode' }),\n ]) as unknown[],\n }),\n );\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n expect.stringContaining('\"mcpServers\"'),\n 'utf8',\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n );\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Added project-scoped Sentry MCP configuration.',\n );\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('reload your editor'),\n );\n });\n\n it('should configure for VS Code when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('vscode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.vscode/mcp.json'),\n expect.stringContaining('\"servers\"'),\n 'utf8',\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.vscode/mcp.json'),\n );\n });\n\n it('should configure for Claude Code when selected', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('claudeCode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.mcp.json'),\n expect.stringContaining('\"mcpServers\"'),\n 'utf8',\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n expect.stringContaining('.mcp.json'),\n );\n });\n\n it('should update existing Cursor config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n mcpServers: {\n OtherServer: {\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n expect(mockReadFile).toHaveBeenCalled();\n expect(mockWriteFile).toHaveBeenCalledWith(\n expect.stringContaining('.cursor/mcp.json'),\n expect.stringContaining('Sentry'),\n 'utf8',\n );\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.mcpServers).toHaveProperty('OtherServer');\n expect(writtenContent.mcpServers).toHaveProperty('Sentry');\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Updated .cursor/mcp.json',\n );\n });\n\n it('should update existing VS Code config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('vscode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n servers: {\n OtherServer: {\n url: 'https://other.example.com',\n type: 'http',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.servers).toHaveProperty('OtherServer');\n expect(writtenContent.servers).toHaveProperty('Sentry');\n expect(writtenContent.servers?.Sentry).toHaveProperty('type', 'http');\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Updated .vscode/mcp.json',\n );\n });\n\n it('should update existing Claude Code config file', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('claudeCode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n mcpServers: {\n OtherServer: {\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent.mcpServers).toHaveProperty('OtherServer');\n expect(writtenContent.mcpServers).toHaveProperty('Sentry');\n\n expect(clack.log.success).toHaveBeenCalledWith('Updated .mcp.json');\n });\n\n it('should handle file write errors gracefully for Cursor', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config automatically'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: path.join('.cursor', 'mcp.json'),\n codeSnippet: expect.stringContaining('mcpServers') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle file write errors gracefully for VS Code', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('vscode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: path.join('.vscode', 'mcp.json'),\n codeSnippet: expect.stringContaining('servers') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle file write errors gracefully for Claude Code', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('claudeCode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Permission denied'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalledWith(\n expect.objectContaining({\n filename: '.mcp.json',\n codeSnippet: expect.stringContaining('mcpServers') as string,\n hint: 'create the file if it does not exist',\n }),\n );\n });\n\n it('should handle update errors and show copy-paste instructions', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock existing file and simulate write error during update\n const existingConfig = JSON.stringify({\n mcpServers: {\n OtherServer: {\n url: 'https://other.example.com',\n },\n },\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi\n .fn()\n .mockRejectedValue(new Error('Write failed during update'));\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config automatically'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalled();\n });\n\n it('should handle mkdirSync errors', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('cursor');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn().mockImplementation(() => {\n throw new Error('Permission denied');\n });\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await expect(offerProjectScopedMcpConfig()).resolves.toBeUndefined();\n\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to write MCP config automatically'),\n );\n\n expect(clackUtils.showCopyPasteInstructions).toHaveBeenCalled();\n });\n\n it('should create config with empty servers/mcpServers when existing config lacks them', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('vscode');\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const existingConfig = JSON.stringify({\n otherProperty: 'value',\n });\n\n const mockReadFile = vi.fn().mockResolvedValue(existingConfig);\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n const writtenContent = JSON.parse(\n mockWriteFile.mock.calls[0][1] as string,\n ) as ConfigContent;\n expect(writtenContent).toHaveProperty('otherProperty', 'value');\n expect(writtenContent).toHaveProperty('servers');\n expect(writtenContent.servers).toHaveProperty('Sentry');\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Updated .vscode/mcp.json',\n );\n });\n\n it('should show config for JetBrains IDEs with clipboard copy', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('jetbrains')\n .mockResolvedValueOnce(true); // For the clipboard copy prompt\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock clipboard copy\n const mockSpawn = vi.fn().mockReturnValue({\n stdin: {\n write: vi.fn(),\n end: vi.fn(),\n },\n on: vi.fn((event, callback: (code?: number) => void) => {\n if (event === 'close') callback(0);\n }),\n });\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('JetBrains IDEs'),\n );\n\n expect(consoleSpy).toHaveBeenCalledWith(\n expect.stringContaining('mcpServers'),\n );\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n expect(clack.log.success).toHaveBeenCalledWith(\n 'Configuration copied to clipboard!',\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should show generic config for unsupported IDEs with clipboard copy', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('other')\n .mockResolvedValueOnce(true); // For the clipboard copy prompt\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock clipboard copy failure to test fallback\n const mockSpawn = vi.fn().mockReturnValue({\n stdin: {\n write: vi.fn(),\n end: vi.fn(),\n },\n on: vi.fn((event, callback: () => void) => {\n if (event === 'error') callback();\n }),\n });\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('Generic MCP configuration'),\n );\n\n expect(consoleSpy).toHaveBeenCalledWith(\n expect.stringContaining('mcpServers'),\n );\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n // Since clipboard copy failed, should show warning\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to copy to clipboard'),\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should handle clipboard copy failure gracefully for JetBrains', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('jetbrains')\n .mockResolvedValueOnce(true); // For clipboard copy prompt\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n // Mock clipboard copy to throw error\n const mockSpawn = vi.fn().mockImplementation(() => {\n throw new Error('Clipboard not available');\n });\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n // Should show warning when clipboard fails\n expect(clack.log.warn).toHaveBeenCalledWith(\n expect.stringContaining('Failed to copy to clipboard'),\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should show MCP explanation when user selects \"What is MCP?\"', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('explain') // User selects \"What is MCP?\"\n .mockResolvedValueOnce(true) // User selects \"Yes\" after explanation\n .mockResolvedValueOnce('cursor'); // User selects Cursor\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockReadFile = vi\n .fn()\n .mockRejectedValue(new Error('File not found'));\n const mockWriteFile = vi.fn().mockResolvedValue(undefined);\n const mockMkdirSync = vi.fn();\n\n vi.spyOn(fs.promises, 'readFile').mockImplementation(mockReadFile);\n vi.spyOn(fs.promises, 'writeFile').mockImplementation(mockWriteFile);\n vi.spyOn(fs, 'mkdirSync').mockImplementation(mockMkdirSync);\n\n await offerProjectScopedMcpConfig();\n\n // Should show MCP explanation\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('What is MCP'),\n );\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('AI assistants'),\n );\n\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('https://docs.sentry.io/product/sentry-mcp/'),\n );\n\n // Should ask again after explanation\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Would you like to configure MCP for your IDE now?',\n }),\n );\n\n // Should proceed with normal flow\n expect(mockWriteFile).toHaveBeenCalled();\n });\n\n it('should respect user choice not to copy to clipboard', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('yes')\n .mockResolvedValueOnce('jetbrains')\n .mockResolvedValueOnce(false); // User declines to copy to clipboard\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n const mockSpawn = vi.fn();\n vi.spyOn(childProcess, 'spawn').mockImplementation(mockSpawn);\n\n // Mock console.log to capture output\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {});\n\n await offerProjectScopedMcpConfig();\n\n // Should ask to copy to clipboard\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Copy configuration to clipboard?',\n }),\n );\n\n // Should NOT attempt to copy when user declines\n expect(mockSpawn).not.toHaveBeenCalled();\n\n // Should NOT show success or warning messages\n expect(clack.log.success).not.toHaveBeenCalledWith(\n 'Configuration copied to clipboard!',\n );\n expect(clack.log.warn).not.toHaveBeenCalledWith(\n expect.stringContaining('Failed to copy to clipboard'),\n );\n\n consoleSpy.mockRestore();\n });\n\n it('should exit if user declines after MCP explanation', async () => {\n const { clack, clackUtils } = await getMocks();\n\n vi.mocked(clack.select)\n .mockResolvedValueOnce('explain') // User selects \"What is MCP?\"\n .mockResolvedValueOnce(false); // User selects \"No\" after explanation\n\n vi.mocked(clackUtils.abortIfCancelled).mockImplementation(\n (value: unknown) => Promise.resolve(value),\n );\n\n await offerProjectScopedMcpConfig();\n\n // Should show MCP explanation\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining('What is MCP'),\n );\n\n // Should ask again after explanation\n expect(clack.select).toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Would you like to configure MCP for your IDE now?',\n }),\n );\n\n // Should NOT proceed with editor selection\n expect(clack.select).not.toHaveBeenCalledWith(\n expect.objectContaining({\n message: 'Which editor do you want to configure?',\n }),\n );\n });\n });\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/wizard",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.3.0",
|
|
4
4
|
"homepage": "https://github.com/getsentry/sentry-wizard",
|
|
5
5
|
"repository": "https://github.com/getsentry/sentry-wizard",
|
|
6
6
|
"description": "Sentry wizard helping you to configure your project",
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
"dist"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@clack/core": "^0.3.4",
|
|
30
29
|
"@clack/prompts": "0.7.0",
|
|
31
30
|
"@sentry/node": "^7.119.2",
|
|
32
31
|
"axios": "1.8.2",
|
|
@@ -44,29 +43,22 @@
|
|
|
44
43
|
},
|
|
45
44
|
"devDependencies": {
|
|
46
45
|
"@babel/types": "~7.21.4",
|
|
47
|
-
"@sentry-internal/eslint-config-sdk": "^7.48.0",
|
|
48
|
-
"@types/chai": "^4.3.17",
|
|
49
46
|
"@types/glob": "^7.2.0",
|
|
50
47
|
"@types/inquirer": "^0.0.43",
|
|
51
|
-
"@types/lodash": "^4.14.144",
|
|
52
48
|
"@types/node": "^18.19.76",
|
|
53
49
|
"@types/opn": "5.1.0",
|
|
54
|
-
"@types/rimraf": "^3.0.2",
|
|
55
50
|
"@types/semver": "^7.3.7",
|
|
56
51
|
"@types/yargs": "^16.0.9",
|
|
57
52
|
"@typescript-eslint/eslint-plugin": "^5.13.0",
|
|
58
53
|
"@typescript-eslint/parser": "^5.13.0",
|
|
59
54
|
"@vitest/coverage-v8": "3.0.9",
|
|
60
55
|
"clifty": "0.2.7",
|
|
61
|
-
"dotenv": "^16.4.5",
|
|
62
56
|
"eslint": "^8.18.0",
|
|
63
57
|
"eslint-config-prettier": "^8.3.0",
|
|
64
58
|
"eslint-plugin-vitest": "^0.5.4",
|
|
65
59
|
"fossilize": "^0.3.1",
|
|
66
60
|
"prettier": "^2.8.7",
|
|
67
|
-
"rimraf": "^3.0.2",
|
|
68
61
|
"ts-node": "^10.9.1",
|
|
69
|
-
"tsx": "^3.14.0",
|
|
70
62
|
"typescript": "^5.0.4",
|
|
71
63
|
"vite": "^6.2.3",
|
|
72
64
|
"vitest": "^3.0.9"
|