@blocknote/xl-ai 0.49.0 → 0.50.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.
Files changed (66) hide show
  1. package/dist/webpack-stats.json +1 -1
  2. package/package.json +5 -4
  3. package/src/api/formats/html-blocks/htmlBlocks.test.ts +3 -43
  4. package/src/api/formats/json/json.test.ts +3 -43
  5. package/src/api/formats/markdown-blocks/markdownBlocks.test.ts +3 -43
  6. package/src/api/formats/tests/snapshotPath.ts +33 -0
  7. package/src/prosemirror/__snapshots__/agent.test.ts.snap +119 -119
  8. package/src/prosemirror/__snapshots__/changeset.test.ts.snap +0 -4
  9. package/types/src/api/formats/tests/snapshotPath.d.ts +3 -0
  10. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{add and update paragraph_1_801ad86e0c3a4562338793805e66a52f.json → add and update paragraph_1_0acceced44cd885ee4439d4ef8639ba2.json} +0 -0
  11. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{add paragraph and update selection_1_b6ecf36636295d284db3ba7243cd4835.json → add paragraph and update selection_1_9f552939a63a167da4dd5b1abffbfc43.json} +0 -0
  12. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{add and update paragraph_1_3c276441275032fe98b12356026537a0.json → add and update paragraph_1_f5ce14780d38e0a320dc0246f9fa3fa7.json} +0 -0
  13. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{add paragraph and update selection_1_0207de852025d2c0a1d417a7d66fa03c.json → add paragraph and update selection_1_8157654938ade250b36e1dde3bf0a5c2.json} +0 -0
  14. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{add and update paragraph_1_937647a13580b4dbb611e3de3b2c8788.json → add and update paragraph_1_eb11dd6643fc4f655a9d55dbd71b19b9.json} +0 -0
  15. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Combined/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{add paragraph and update selection_1_d9ea724851130649f405ff50190452b5.json → add paragraph and update selection_1_bcb205a92155b4f033637eb9f5fb2d3b.json} +0 -0
  16. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Delete/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{delete first block_1_afd5ee1bda075c7482d1861d03ad0a29.json → delete first block_1_de1c4968c1329dacd5d81bcd2b3ed8d1.json} +0 -0
  17. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Delete/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{delete first block_1_9a26ba1fa4692c62b4f519ed3669fdc5.json → delete first block_1_df7ac05af05cf3c79699aabb8ea42853.json} +0 -0
  18. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Delete/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{delete first block_1_2fd92a4c2642fff1ef49d65014aa1ac3.json → delete first block_1_2c1689a55eb91228110b68a63451fd1a.json} +0 -0
  19. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{drop mark and link and change text within mark_1_fd54b2fefac722ab5057252b68c4faec.json → drop mark and link and change text within mark_1_7269bbc0b34bc5775aa44079fb454ffb.json} +0 -0
  20. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{drop mark and link_1_93038afbc107d8439571e6287fc76a8f.json → drop mark and link_1_e3dcd01b4daf96d961ea02871bebdc41.json} +0 -0
  21. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{plain source block, add mention_1_7035efab1f6d9e5a46dde12d39f9ed19.json → plain source block, add mention_1_697fa8208493812d2a1e80e1aaf9c5de.json} +0 -0
  22. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{standard update_1_467258028a5a6bef3542c1a5417d4b3d.json → standard update_1_1aee87323867b909b4239664f8b71087.json} +0 -0
  23. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, remove mark_1_90c0b37bad31f3b9b0d15c492c610d0b.json → styles + ic in source block, remove mark_1_7e627acd5601089ce51f17d48a125d26.json} +0 -0
  24. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, remove mention_1_3e8b04b91ca15c467180df1c60c9e1b2.json → styles + ic in source block, remove mention_1_191aa134e34de44ad154b02c452f2a13.json} +0 -0
  25. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, replace content_1_3551fccc96307281574c2c96eaa05002.json → styles + ic in source block, replace content_1_f1ad8291536f56abe5780af9c67a719e.json} +0 -0
  26. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, update mention prop_1_e7ef562479ab33624bfa2bd75c4d1f5e.json → styles + ic in source block, update mention prop_1_09e4b9d91e0003a97447e19e13c71fae.json} +0 -0
  27. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in source block, update text_1_3a3fa0950f819e8073475e78106b353d.json → styles + ic in source block, update text_1_135a07dea96ec03fd66a4f9d14bffaab.json} +0 -0
  28. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in target block, add mark (paragraph)_1_7a05ed5acf369206dda586e41235430b.json → styles + ic in target block, add mark (paragraph)_1_057de0a27c49b9bc6acd8203ecddd838.json} +0 -0
  29. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{styles + ic in target block, add mark (word)_1_0d9c02b01414a68a2dab4af392179183.json → styles + ic in target block, add mark (word)_1_cea1695dae5f5462ee9ab5a7400fee2f.json} +0 -0
  30. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{translate selection_1_ade79bca32d420b4323b2a888817b5d5.json → translate selection_1_2164172c277a84ca943d79ae55a7c655.json} +0 -0
  31. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{update block prop and content_1_f90879213f18f8b8e13748443299b6dc.json → update block prop and content_1_e89f2ff97bb5e14d9f8e7c4bbb03af6f.json} +0 -0
  32. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{update block prop_1_3f8e13d1cfa75e24cd4e0dfb0eab9ef4.json → update block prop_1_fabe61c81d039e0c80c38121db6daef1.json} +0 -0
  33. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{update block type and content_1_07d3d8730ff541c3a2bf5e53c6707dac.json → update block type and content_1_92d996135152e832c6db18b41f6b6912.json} +0 -0
  34. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/anthropic.messages/claude-3-7-sonnet-latest (streaming)/{update block type_1_6cc7ad0b6e2c278095f03deb353e4c9b.json → update block type_1_be165931651bf1c2e817e30b34cacddd.json} +0 -0
  35. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{drop mark and link and change text within mark_1_17fe180166622808ade902a2eccad8aa.json → drop mark and link and change text within mark_1_02b8585f48a09784036175bf14c592cd.json} +0 -0
  36. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{drop mark and link_1_a055d5e9dcf9d3ce1e1cddf57b441dc1.json → drop mark and link_1_5153f11ec2928539607eae3fc9554a2e.json} +0 -0
  37. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{plain source block, add mention_1_7692c767dc159df75724f2a49cc38b0e.json → plain source block, add mention_1_f33053e9ce75e3382e59f65f47268a07.json} +0 -0
  38. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{standard update_1_b81e76afad4cf5e84bd6815d2bc8d069.json → standard update_1_3701c48442d9b752a7ea313e3255163c.json} +0 -0
  39. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, remove mark_1_da7d1e5e03db624c6007dc8137fc3588.json → styles + ic in source block, remove mark_1_dd318513d3f70effe9df402a04ebe20e.json} +0 -0
  40. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, remove mention_1_758855f114117cd6c8f70c7caa84cc68.json → styles + ic in source block, remove mention_1_df29b6d9520b0719a02ff9f241d8fd12.json} +0 -0
  41. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, replace content_1_222775b0c617ba9bcada86cd238b6d64.json → styles + ic in source block, replace content_1_353407caea15e5886ca416c18085f09c.json} +0 -0
  42. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, update mention prop_1_ad74c153b3f0beb850955148f0a42c78.json → styles + ic in source block, update mention prop_1_545d20572920e7098f9e71846d69942e.json} +0 -0
  43. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in source block, update text_1_4bf0b01b1e009966973599ebc2194362.json → styles + ic in source block, update text_1_f94a68a64c18b7537380682b3e0fa902.json} +0 -0
  44. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in target block, add mark (paragraph)_1_5ce19f53eaf195c6e284c91b0db7d586.json → styles + ic in target block, add mark (paragraph)_1_b625ba3069c0ee0677dbab599b173252.json} +0 -0
  45. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{styles + ic in target block, add mark (word)_1_0f8ce96b644d6bd531f0558208cf5790.json → styles + ic in target block, add mark (word)_1_f9207412b6a2032fd012f61be3d16b7b.json} +0 -0
  46. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{translate selection_1_1cf9377128e689feac5e5e13a1d0e26f.json → translate selection_1_1d088b7563942b1405ced6473b89b3ea.json} +0 -0
  47. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{update block prop and content_1_260e8bc6dd5c9cbd0650701e6d95ada3.json → update block prop and content_1_7aec058255eb34b8dd1fcc434173ed62.json} +0 -0
  48. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{update block prop_1_339e6b8d82d281185c6ccbcd1809374f.json → update block prop_1_f4d4d0847f49e3177b2090d2dfcdf4a8.json} +0 -0
  49. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{update block type and content_1_ff26ae30546f4e0d4279e60e4b7a1fbf.json → update block type and content_1_bb2150f4fbbd0d60e298c14879b5d98c.json} +0 -0
  50. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/groq.chat/llama-3.3-70b-versatile (streaming)/{update block type_1_d9cbf71a8b55c8be0b247c3bb200c59c.json → update block type_1_0cc06aead6a8738ef5ae9397d449a4bb.json} +0 -0
  51. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{drop mark and link and change text within mark_1_d1f45ba6fee8787529137c920d6bc58e.json → drop mark and link and change text within mark_1_3b2d04fb8cc28b3327eac7fbb649212c.json} +0 -0
  52. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{drop mark and link_1_c9489269d9a2d4353eda54289ed7f395.json → drop mark and link_1_7376633d53b21fc3dbe3c1f051cd2940.json} +0 -0
  53. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{plain source block, add mention_1_416931598559b3e7e906647a66f0b8b1.json → plain source block, add mention_1_f44ed609f9d070a9db6e3357eb3b4b12.json} +0 -0
  54. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{standard update_1_9728e4dd714a6a14ce441d72378dd67a.json → standard update_1_f38c18ce0c3c0d617287e458c9a79fc6.json} +0 -0
  55. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, remove mark_1_198059a270dbbb88db8f1cba97503205.json → styles + ic in source block, remove mark_1_58230e87771d121dabc82e08fdabeec9.json} +0 -0
  56. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, remove mention_1_9313219c085c3b39c7c14c00f388b4be.json → styles + ic in source block, remove mention_1_501a15f4ae0e22db498c2a018f67c304.json} +0 -0
  57. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, replace content_1_f7a4c2a7fc5e362c3484586f45b2501d.json → styles + ic in source block, replace content_1_3a53469420cab77a1672183bf403d5f1.json} +0 -0
  58. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, update mention prop_1_38090ebbfaca38fca97b1e4f0a0dd942.json → styles + ic in source block, update mention prop_1_d2d711f753398974c968fc07f4ded143.json} +0 -0
  59. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in source block, update text_1_6374879c3f8fbc16db7c43304d2faacd.json → styles + ic in source block, update text_1_42c93de53980c01c69a514f6eea5f7c7.json} +0 -0
  60. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in target block, add mark (paragraph)_1_0afac4d00d3f0bbdfd251a8394b6ff28.json → styles + ic in target block, add mark (paragraph)_1_c899778ecf731961e7554d0dd99c1048.json} +0 -0
  61. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{styles + ic in target block, add mark (word)_1_00156bb4dd5722d44e0ff5332561928a.json → styles + ic in target block, add mark (word)_1_6de7b8e48053b34c8c48307442ebdaf9.json} +0 -0
  62. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{translate selection_1_24abe901176e9d834f9542d0b26e82ae.json → translate selection_1_2be264b1a0ad629a6626df5dc6dc95ff.json} +0 -0
  63. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{update block prop and content_1_3f479c81e81f4f9460df3af74ddd2207.json → update block prop and content_1_cc8d5c88299059d82196af81416f61e4.json} +0 -0
  64. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{update block prop_1_6012638796e6e00b242b43642bb90a7a.json → update block prop_1_c3507737f635c70e33af6d9967568ce6.json} +0 -0
  65. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{update block type and content_1_04e027a89c6d4e69a0f805d5c8987e2c.json → update block type and content_1_0e4e3658327ed05d3accbdb2649b4409.json} +0 -0
  66. /package/src/api/formats/html-blocks/__snapshots__/htmlBlocks.test.ts/Update/__msw_snapshots__/openai.responses/gpt-4o-2024-08-06 (streaming)/{update block type_1_72aecf62b6c9c807411d248d46a62eea.json → update block type_1_14269fdf643fd47ec85aa390368ef71a.json} +0 -0
@@ -1 +1 @@
1
- {"builtAt":1777035767190,"assets":[{"name":"blocknote-xl-ai.cjs","size":16875},{"name":"locales.cjs","size":23775},{"name":"server.cjs","size":760},{"name":"server-D-Xyj9BS.cjs","size":38286},{"name":"blocknote-xl-ai.cjs.map","size":63114},{"name":"locales.cjs.map","size":56423},{"name":"server-D-Xyj9BS.cjs.map","size":186169}],"chunks":[{"id":"a1ee98a","entry":true,"initial":true,"files":["blocknote-xl-ai.cjs"],"names":["blocknote-xl-ai"]},{"id":"842df4c","entry":true,"initial":true,"files":["locales.cjs"],"names":["locales"]},{"id":"791e108","entry":true,"initial":true,"files":["server.cjs"],"names":["server"]},{"id":"91fd206","entry":false,"initial":true,"files":["server-D-Xyj9BS.cjs"],"names":["server"]}],"modules":[{"name":"./src/style.css","size":0,"chunks":["a1ee98a"]},{"name":"./src/plugins/AgentCursorPlugin.ts","size":2201,"chunks":["a1ee98a"]},{"name":"./src/AIExtension.ts","size":7732,"chunks":["a1ee98a"]},{"name":"./src/hooks/useAIDictionary.ts","size":161,"chunks":["a1ee98a"]},{"name":"./src/components/AIMenu/PromptSuggestionMenu.tsx","size":3233,"chunks":["a1ee98a"]},{"name":"./src/components/AIMenu/getDefaultAIMenuItems.tsx","size":6452,"chunks":["a1ee98a"]},{"name":"./src/components/AIMenu/AIMenu.tsx","size":3485,"chunks":["a1ee98a"]},{"name":"./src/components/AIMenu/AIMenuController.tsx","size":2391,"chunks":["a1ee98a"]},{"name":"./src/components/FormattingToolbar/AIToolbarButton.tsx","size":1068,"chunks":["a1ee98a"]},{"name":"./src/components/SuggestionMenu/getAISlashMenuItems.tsx","size":670,"chunks":["a1ee98a"]},{"name":"./src/index.ts","size":0,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/ar.ts","size":1427,"chunks":["842df4c"]},{"name":"./src/i18n/locales/de.ts","size":1481,"chunks":["842df4c"]},{"name":"./src/i18n/locales/en.ts","size":1379,"chunks":["842df4c"]},{"name":"./src/i18n/locales/es.ts","size":1449,"chunks":["842df4c"]},{"name":"./src/i18n/locales/fr.ts","size":1465,"chunks":["842df4c"]},{"name":"./src/i18n/locales/he.ts","size":1297,"chunks":["842df4c"]},{"name":"./src/i18n/locales/hr.ts","size":1390,"chunks":["842df4c"]},{"name":"./src/i18n/locales/is.ts","size":1458,"chunks":["842df4c"]},{"name":"./src/i18n/locales/it.ts","size":1451,"chunks":["842df4c"]},{"name":"./src/i18n/locales/ja.ts","size":1268,"chunks":["842df4c"]},{"name":"./src/i18n/locales/ko.ts","size":1290,"chunks":["842df4c"]},{"name":"./src/i18n/locales/nl.ts","size":1432,"chunks":["842df4c"]},{"name":"./src/i18n/locales/no.ts","size":1405,"chunks":["842df4c"]},{"name":"./src/i18n/locales/pl.ts","size":1406,"chunks":["842df4c"]},{"name":"./src/i18n/locales/pt.ts","size":1444,"chunks":["842df4c"]},{"name":"./src/i18n/locales/ru.ts","size":1445,"chunks":["842df4c"]},{"name":"./src/i18n/locales/sk.ts","size":1407,"chunks":["842df4c"]},{"name":"./src/i18n/locales/uk.ts","size":1452,"chunks":["842df4c"]},{"name":"./src/i18n/locales/vi.ts","size":1402,"chunks":["842df4c"]},{"name":"./src/i18n/locales/zh-tw.ts","size":1244,"chunks":["842df4c"]},{"name":"./src/i18n/locales/zh.ts","size":1236,"chunks":["842df4c"]},{"name":"./src/i18n/locales/index.ts","size":0,"chunks":["842df4c"]},{"name":"./rolldown/runtime.js","size":1008,"chunks":["91fd206"]},{"name":"./src/util/emptyBlock.ts","size":216,"chunks":["91fd206"]},{"name":"./src/util/trimArray.ts","size":320,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/trimEmptyBlocks.ts","size":270,"chunks":["91fd206"]},{"name":"./src/api/aiRequest/builder.ts","size":1312,"chunks":["91fd206"]},{"name":"./src/streamTool/jsonSchema.ts","size":1326,"chunks":["91fd206"]},{"name":"./src/streamTool/ChunkExecutionError.ts","size":295,"chunks":["91fd206"]},{"name":"./src/streamTool/StreamToolExecutor.ts","size":3431,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/injectDocumentStateMessages.ts","size":1755,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/toolDefinitions.ts","size":745,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/clientside/ClientSideTransport.ts","size":1172,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/appendableStream.ts","size":1069,"chunks":["91fd206"]},{"name":"./src/util/stream.ts","size":1003,"chunks":["91fd206"]},{"name":"./src/streamTool/filterNewOrUpdatedOperations.ts","size":925,"chunks":["91fd206"]},{"name":"./src/streamTool/filterValidOperations.ts","size":692,"chunks":["91fd206"]},{"name":"./src/streamTool/toValidatedOperations.ts","size":1106,"chunks":["91fd206"]},{"name":"./src/streamTool/preprocess.ts","size":431,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/UIMessageStreamToOperationsResult.ts","size":348,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/chatHandlers.ts","size":4033,"chunks":["91fd206"]},{"name":"./src/api/aiRequest/sendMessageWithAIRequest.ts","size":786,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/addCursorPosition.ts","size":410,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/convertBlocks.ts","size":234,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/flattenBlocks.ts","size":201,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/suffixIds.ts","size":229,"chunks":["91fd206"]},{"name":"./src/api/formats/DocumentStateBuilder.ts","size":1530,"chunks":["91fd206"]},{"name":"./src/prosemirror/fragmentUtil.ts","size":285,"chunks":["91fd206"]},{"name":"./src/prosemirror/agent.ts","size":5303,"chunks":["91fd206"]},{"name":"./src/prosemirror/changeset.ts","size":5344,"chunks":["91fd206"]},{"name":"./src/streamTool/streamTool.ts","size":100,"chunks":["91fd206"]},{"name":"./src/util/AbortError.ts","size":179,"chunks":["91fd206"]},{"name":"./src/api/formats/base-tools/util/validateBlockArray.ts","size":587,"chunks":["91fd206"]},{"name":"./src/api/formats/base-tools/createAddBlocksTool.ts","size":4117,"chunks":["91fd206"]},{"name":"./src/api/formats/base-tools/createUpdateBlockTool.ts","size":3314,"chunks":["91fd206"]},{"name":"./src/api/formats/base-tools/delete.ts","size":1440,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/tools/getPartialHTML.ts","size":657,"chunks":["91fd206"]},{"name":"./src/prosemirror/rebaseTool.ts","size":940,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/tools/rebaseTool.ts","size":837,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/tools/validate.ts","size":246,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/tools/index.ts","size":1618,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/htmlBlocks.ts","size":2552,"chunks":["91fd206"]},{"name":"./src/api/schema/mergeSchema.ts","size":767,"chunks":["91fd206"]},{"name":"./src/api/schema/schemaToJSONSchema.ts","size":3581,"chunks":["91fd206"]},{"name":"./src/api/formats/json/tools/validate.ts","size":1409,"chunks":["91fd206"]},{"name":"./src/api/formats/json/tools/index.ts","size":1242,"chunks":["91fd206"]},{"name":"./src/api/formats/json/json.ts","size":2244,"chunks":["91fd206"]},{"name":"./src/api/formats/markdown-blocks/tools/rebaseTool.ts","size":651,"chunks":["91fd206"]},{"name":"./src/api/formats/markdown-blocks/tools/validate.ts","size":248,"chunks":["91fd206"]},{"name":"./src/api/formats/markdown-blocks/tools/index.ts","size":1377,"chunks":["91fd206"]},{"name":"./src/api/formats/markdown-blocks/markdownBlocks.ts","size":2373,"chunks":["91fd206"]},{"name":"./src/api/formats/formats.ts","size":195,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/index.ts","size":160,"chunks":["91fd206"]},{"name":"./src/i18n/dictionary.ts","size":185,"chunks":["91fd206"]},{"name":"./src/blocknoteAIClient/client.ts","size":376,"chunks":["91fd206"]},{"name":"./src/server.ts","size":0,"chunks":["91fd206"]}]}
1
+ {"builtAt":1777910869037,"assets":[{"name":"blocknote-xl-ai.cjs","size":16875},{"name":"locales.cjs","size":23775},{"name":"server.cjs","size":760},{"name":"server-D-Xyj9BS.cjs","size":38286},{"name":"blocknote-xl-ai.cjs.map","size":63114},{"name":"locales.cjs.map","size":56423},{"name":"server-D-Xyj9BS.cjs.map","size":186169}],"chunks":[{"id":"a1ee98a","entry":true,"initial":true,"files":["blocknote-xl-ai.cjs"],"names":["blocknote-xl-ai"]},{"id":"842df4c","entry":true,"initial":true,"files":["locales.cjs"],"names":["locales"]},{"id":"791e108","entry":true,"initial":true,"files":["server.cjs"],"names":["server"]},{"id":"91fd206","entry":false,"initial":true,"files":["server-D-Xyj9BS.cjs"],"names":["server"]}],"modules":[{"name":"./src/style.css","size":0,"chunks":["a1ee98a"]},{"name":"./src/plugins/AgentCursorPlugin.ts","size":2201,"chunks":["a1ee98a"]},{"name":"./src/AIExtension.ts","size":7732,"chunks":["a1ee98a"]},{"name":"./src/hooks/useAIDictionary.ts","size":161,"chunks":["a1ee98a"]},{"name":"./src/components/AIMenu/PromptSuggestionMenu.tsx","size":3233,"chunks":["a1ee98a"]},{"name":"./src/components/AIMenu/getDefaultAIMenuItems.tsx","size":6452,"chunks":["a1ee98a"]},{"name":"./src/components/AIMenu/AIMenu.tsx","size":3485,"chunks":["a1ee98a"]},{"name":"./src/components/AIMenu/AIMenuController.tsx","size":2391,"chunks":["a1ee98a"]},{"name":"./src/components/FormattingToolbar/AIToolbarButton.tsx","size":1068,"chunks":["a1ee98a"]},{"name":"./src/components/SuggestionMenu/getAISlashMenuItems.tsx","size":670,"chunks":["a1ee98a"]},{"name":"./src/index.ts","size":0,"chunks":["a1ee98a"]},{"name":"./src/i18n/locales/ar.ts","size":1427,"chunks":["842df4c"]},{"name":"./src/i18n/locales/de.ts","size":1481,"chunks":["842df4c"]},{"name":"./src/i18n/locales/en.ts","size":1379,"chunks":["842df4c"]},{"name":"./src/i18n/locales/es.ts","size":1449,"chunks":["842df4c"]},{"name":"./src/i18n/locales/fr.ts","size":1465,"chunks":["842df4c"]},{"name":"./src/i18n/locales/he.ts","size":1297,"chunks":["842df4c"]},{"name":"./src/i18n/locales/hr.ts","size":1390,"chunks":["842df4c"]},{"name":"./src/i18n/locales/is.ts","size":1458,"chunks":["842df4c"]},{"name":"./src/i18n/locales/it.ts","size":1451,"chunks":["842df4c"]},{"name":"./src/i18n/locales/ja.ts","size":1268,"chunks":["842df4c"]},{"name":"./src/i18n/locales/ko.ts","size":1290,"chunks":["842df4c"]},{"name":"./src/i18n/locales/nl.ts","size":1432,"chunks":["842df4c"]},{"name":"./src/i18n/locales/no.ts","size":1405,"chunks":["842df4c"]},{"name":"./src/i18n/locales/pl.ts","size":1406,"chunks":["842df4c"]},{"name":"./src/i18n/locales/pt.ts","size":1444,"chunks":["842df4c"]},{"name":"./src/i18n/locales/ru.ts","size":1445,"chunks":["842df4c"]},{"name":"./src/i18n/locales/sk.ts","size":1407,"chunks":["842df4c"]},{"name":"./src/i18n/locales/uk.ts","size":1452,"chunks":["842df4c"]},{"name":"./src/i18n/locales/vi.ts","size":1402,"chunks":["842df4c"]},{"name":"./src/i18n/locales/zh-tw.ts","size":1244,"chunks":["842df4c"]},{"name":"./src/i18n/locales/zh.ts","size":1236,"chunks":["842df4c"]},{"name":"./src/i18n/locales/index.ts","size":0,"chunks":["842df4c"]},{"name":"./rolldown/runtime.js","size":1008,"chunks":["91fd206"]},{"name":"./src/util/emptyBlock.ts","size":216,"chunks":["91fd206"]},{"name":"./src/util/trimArray.ts","size":320,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/trimEmptyBlocks.ts","size":270,"chunks":["91fd206"]},{"name":"./src/api/aiRequest/builder.ts","size":1312,"chunks":["91fd206"]},{"name":"./src/streamTool/jsonSchema.ts","size":1326,"chunks":["91fd206"]},{"name":"./src/streamTool/ChunkExecutionError.ts","size":295,"chunks":["91fd206"]},{"name":"./src/streamTool/StreamToolExecutor.ts","size":3431,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/injectDocumentStateMessages.ts","size":1755,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/toolDefinitions.ts","size":745,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/clientside/ClientSideTransport.ts","size":1172,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/appendableStream.ts","size":1069,"chunks":["91fd206"]},{"name":"./src/util/stream.ts","size":1003,"chunks":["91fd206"]},{"name":"./src/streamTool/filterNewOrUpdatedOperations.ts","size":925,"chunks":["91fd206"]},{"name":"./src/streamTool/filterValidOperations.ts","size":692,"chunks":["91fd206"]},{"name":"./src/streamTool/toValidatedOperations.ts","size":1106,"chunks":["91fd206"]},{"name":"./src/streamTool/preprocess.ts","size":431,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/UIMessageStreamToOperationsResult.ts","size":348,"chunks":["91fd206"]},{"name":"./src/streamTool/vercelAiSdk/util/chatHandlers.ts","size":4033,"chunks":["91fd206"]},{"name":"./src/api/aiRequest/sendMessageWithAIRequest.ts","size":786,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/addCursorPosition.ts","size":410,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/convertBlocks.ts","size":234,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/flattenBlocks.ts","size":201,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/suffixIds.ts","size":229,"chunks":["91fd206"]},{"name":"./src/api/formats/DocumentStateBuilder.ts","size":1530,"chunks":["91fd206"]},{"name":"./src/prosemirror/fragmentUtil.ts","size":285,"chunks":["91fd206"]},{"name":"./src/prosemirror/agent.ts","size":5303,"chunks":["91fd206"]},{"name":"./src/prosemirror/changeset.ts","size":5344,"chunks":["91fd206"]},{"name":"./src/streamTool/streamTool.ts","size":100,"chunks":["91fd206"]},{"name":"./src/util/AbortError.ts","size":179,"chunks":["91fd206"]},{"name":"./src/api/formats/base-tools/util/validateBlockArray.ts","size":587,"chunks":["91fd206"]},{"name":"./src/api/formats/base-tools/createAddBlocksTool.ts","size":4117,"chunks":["91fd206"]},{"name":"./src/api/formats/base-tools/createUpdateBlockTool.ts","size":3314,"chunks":["91fd206"]},{"name":"./src/api/formats/base-tools/delete.ts","size":1440,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/tools/getPartialHTML.ts","size":657,"chunks":["91fd206"]},{"name":"./src/prosemirror/rebaseTool.ts","size":940,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/tools/rebaseTool.ts","size":837,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/tools/validate.ts","size":246,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/tools/index.ts","size":1618,"chunks":["91fd206"]},{"name":"./src/api/formats/html-blocks/htmlBlocks.ts","size":2552,"chunks":["91fd206"]},{"name":"./src/api/schema/mergeSchema.ts","size":767,"chunks":["91fd206"]},{"name":"./src/api/schema/schemaToJSONSchema.ts","size":3581,"chunks":["91fd206"]},{"name":"./src/api/formats/json/tools/validate.ts","size":1409,"chunks":["91fd206"]},{"name":"./src/api/formats/json/tools/index.ts","size":1242,"chunks":["91fd206"]},{"name":"./src/api/formats/json/json.ts","size":2244,"chunks":["91fd206"]},{"name":"./src/api/formats/markdown-blocks/tools/rebaseTool.ts","size":651,"chunks":["91fd206"]},{"name":"./src/api/formats/markdown-blocks/tools/validate.ts","size":248,"chunks":["91fd206"]},{"name":"./src/api/formats/markdown-blocks/tools/index.ts","size":1377,"chunks":["91fd206"]},{"name":"./src/api/formats/markdown-blocks/markdownBlocks.ts","size":2373,"chunks":["91fd206"]},{"name":"./src/api/formats/formats.ts","size":195,"chunks":["91fd206"]},{"name":"./src/api/promptHelpers/index.ts","size":160,"chunks":["91fd206"]},{"name":"./src/i18n/dictionary.ts","size":185,"chunks":["91fd206"]},{"name":"./src/blocknoteAIClient/client.ts","size":376,"chunks":["91fd206"]},{"name":"./src/server.ts","size":0,"chunks":["91fd206"]}]}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "directory": "packages/xl-ai"
12
12
  },
13
13
  "license": "GPL-3.0 OR PROPRIETARY",
14
- "version": "0.49.0",
14
+ "version": "0.50.0",
15
15
  "files": [
16
16
  "dist",
17
17
  "types",
@@ -63,9 +63,9 @@
63
63
  "dependencies": {
64
64
  "@ai-sdk/provider-utils": "^4.0.2",
65
65
  "@ai-sdk/react": "^3.0.5",
66
- "@blocknote/core": "0.49.0",
67
- "@blocknote/mantine": "0.49.0",
68
- "@blocknote/react": "0.49.0",
66
+ "@blocknote/core": "0.50.0",
67
+ "@blocknote/mantine": "0.50.0",
68
+ "@blocknote/react": "0.50.0",
69
69
  "@floating-ui/react": "^0.27.18",
70
70
  "@handlewithcare/prosemirror-suggest-changes": "^0.1.8",
71
71
  "@tiptap/core": "^3.13.0",
@@ -132,6 +132,7 @@
132
132
  "lint": "eslint src --max-warnings 0",
133
133
  "test": "NODE_EXTRA_CA_CERTS=\"$(mkcert -CAROOT)/rootCA.pem\" vitest --run",
134
134
  "test-watch": "NODE_EXTRA_CA_CERTS=\"$(mkcert -CAROOT)/rootCA.pem\" vitest watch",
135
+ "rename-msw-snapshots": "node scripts/rename-msw-snapshots.mjs",
135
136
  "email": "email dev"
136
137
  }
137
138
  }
@@ -1,5 +1,4 @@
1
- import { getCurrentTest } from "@vitest/runner";
2
- import { getSortedEntries, snapshot, toHashString } from "msw-snapshot";
1
+ import { snapshot } from "msw-snapshot";
3
2
  import { setupServer } from "msw/node";
4
3
  import path from "path";
5
4
  import { afterAll, afterEach, beforeAll, describe, it } from "vitest";
@@ -8,6 +7,7 @@ import { testAIModels } from "../../../testUtil/testAIModels.js";
8
7
  import { BlockNoteEditor } from "@blocknote/core";
9
8
  import { StreamToolExecutor } from "../../../streamTool/StreamToolExecutor.js";
10
9
  import { ClientSideTransport } from "../../../streamTool/vercelAiSdk/clientside/ClientSideTransport.js";
10
+ import { createSnapshotPathFn } from "../tests/snapshotPath.js";
11
11
  import { generateSharedTestCases } from "../tests/sharedTestCases.js";
12
12
  import { htmlBlockLLMFormat } from "./htmlBlocks.js";
13
13
 
@@ -17,54 +17,14 @@ const BASE_FILE_PATH = path.resolve(
17
17
  path.basename(__filename),
18
18
  );
19
19
 
20
- const fetchCountMap: Record<string, number> = {};
21
-
22
- async function createRequestHash(req: Request) {
23
- const url = new URL(req.url);
24
- return [
25
- // url.host,
26
- // url.pathname,
27
- toHashString([
28
- req.method,
29
- url.origin,
30
- url.pathname,
31
- getSortedEntries(url.searchParams),
32
- getSortedEntries(req.headers),
33
- // getSortedEntries(req.cookies),
34
- new TextDecoder("utf-8").decode(await req.arrayBuffer()),
35
- ]),
36
- ].join("/");
37
- }
38
-
39
20
  // Main test suite with snapshot middleware
40
21
  describe("Models", () => {
41
22
  // Define server with snapshot middleware for the main tests
42
23
  const server = setupServer(
43
24
  snapshot({
44
25
  updateSnapshots: "missing",
45
- // onSnapshotUpdated: "all",
46
- // ignoreSnapshots: true,
47
- async createSnapshotPath(info) {
48
- // use a unique path for each model
49
- const t = getCurrentTest()!;
50
- const mswPath = path.join(
51
- t.suite!.name, // same directory as the test snapshot
52
- "__msw_snapshots__",
53
- t.suite!.suite!.name, // model / streaming params
54
- t.name,
55
- );
56
- // in case there are multiple requests in a test, we need to use a separate snapshot for each request
57
- fetchCountMap[mswPath] = (fetchCountMap[mswPath] || 0) + 1;
58
- const hash = await createRequestHash(info.request);
59
- return mswPath + `_${fetchCountMap[mswPath]}_${hash}.json`;
60
- },
26
+ createSnapshotPath: createSnapshotPathFn(BASE_FILE_PATH),
61
27
  basePath: BASE_FILE_PATH,
62
- // onFetchFromSnapshot(info, snapshot) {
63
- // console.log("onFetchFromSnapshot", info, snapshot);
64
- // },
65
- // onFetchFromServer(info, snapshot) {
66
- // console.log("onFetchFromServer", info, snapshot);
67
- // },
68
28
  }),
69
29
  );
70
30
 
@@ -1,9 +1,9 @@
1
1
  import { afterAll, afterEach, beforeAll, describe } from "vitest";
2
2
 
3
- import { getCurrentTest } from "@vitest/runner";
4
- import { getSortedEntries, snapshot, toHashString } from "msw-snapshot";
3
+ import { snapshot } from "msw-snapshot";
5
4
  import { setupServer } from "msw/node";
6
5
  import path from "path";
6
+ import { createSnapshotPathFn } from "../tests/snapshotPath.js";
7
7
  import { generateSharedTestCases } from "../tests/sharedTestCases.js";
8
8
 
9
9
  import { ClientSideTransport } from "../../../streamTool/vercelAiSdk/clientside/ClientSideTransport.js";
@@ -16,54 +16,14 @@ const BASE_FILE_PATH = path.resolve(
16
16
  path.basename(__filename),
17
17
  );
18
18
 
19
- const fetchCountMap: Record<string, number> = {};
20
-
21
- async function createRequestHash(req: Request) {
22
- const url = new URL(req.url);
23
- return [
24
- // url.host,
25
- // url.pathname,
26
- toHashString([
27
- req.method,
28
- url.origin,
29
- url.pathname,
30
- getSortedEntries(url.searchParams),
31
- getSortedEntries(req.headers),
32
- // getSortedEntries(req.cookies),
33
- new TextDecoder("utf-8").decode(await req.arrayBuffer()),
34
- ]),
35
- ].join("/");
36
- }
37
-
38
19
  // Main test suite with snapshot middleware
39
20
  describe.skip("Models", () => {
40
21
  // Define server with snapshot middleware for the main tests
41
22
  const server = setupServer(
42
23
  snapshot({
43
24
  updateSnapshots: "missing",
44
- // updateSnapshots: "all",
45
- // ignoreSnapshots: true,
46
- async createSnapshotPath(info) {
47
- // use a unique path for each model
48
- const t = getCurrentTest()!;
49
- const mswPath = path.join(
50
- t.suite!.name, // same directory as the test snapshot
51
- "__msw_snapshots__",
52
- t.suite!.suite!.name, // model / streaming params
53
- t.name,
54
- );
55
- // in case there are multiple requests in a test, we need to use a separate snapshot for each request
56
- fetchCountMap[mswPath] = (fetchCountMap[mswPath] || 0) + 1;
57
- const hash = await createRequestHash(info.request);
58
- return mswPath + `_${fetchCountMap[mswPath]}_${hash}.json`;
59
- },
25
+ createSnapshotPath: createSnapshotPathFn(BASE_FILE_PATH),
60
26
  basePath: BASE_FILE_PATH,
61
- // onFetchFromSnapshot(info, snapshot) {
62
- // console.log("onFetchFromSnapshot", info, snapshot);
63
- // },
64
- // onFetchFromServer(info, snapshot) {
65
- // console.log("onFetchFromServer", info, snapshot);
66
- // },
67
27
  }),
68
28
  );
69
29
 
@@ -1,7 +1,6 @@
1
1
  import { afterAll, afterEach, beforeAll, describe } from "vitest";
2
2
 
3
- import { getCurrentTest } from "@vitest/runner";
4
- import { getSortedEntries, snapshot, toHashString } from "msw-snapshot";
3
+ import { snapshot } from "msw-snapshot";
5
4
  import { setupServer } from "msw/node";
6
5
  import path from "path";
7
6
 
@@ -9,6 +8,7 @@ import { ClientSideTransport } from "../../../streamTool/vercelAiSdk/clientside/
9
8
  import { testAIModels } from "../../../testUtil/testAIModels.js";
10
9
  import { aiDocumentFormats } from "../../index.js";
11
10
  import { generateSharedTestCases } from "../tests/sharedTestCases.js";
11
+ import { createSnapshotPathFn } from "../tests/snapshotPath.js";
12
12
 
13
13
  const BASE_FILE_PATH = path.resolve(
14
14
  __dirname,
@@ -16,54 +16,14 @@ const BASE_FILE_PATH = path.resolve(
16
16
  path.basename(__filename),
17
17
  );
18
18
 
19
- const fetchCountMap: Record<string, number> = {};
20
-
21
- async function createRequestHash(req: Request) {
22
- const url = new URL(req.url);
23
- return [
24
- // url.host,
25
- // url.pathname,
26
- toHashString([
27
- req.method,
28
- url.origin,
29
- url.pathname,
30
- getSortedEntries(url.searchParams),
31
- getSortedEntries(req.headers),
32
- // getSortedEntries(req.cookies),
33
- new TextDecoder("utf-8").decode(await req.arrayBuffer()),
34
- ]),
35
- ].join("/");
36
- }
37
-
38
19
  // Main test suite with snapshot middleware
39
20
  describe("Models", () => {
40
21
  // Define server with snapshot middleware for the main tests
41
22
  const server = setupServer(
42
23
  snapshot({
43
24
  updateSnapshots: "missing",
44
- // onSnapshotUpdated: "all",
45
- // ignoreSnapshots: true,
46
- async createSnapshotPath(info) {
47
- // use a unique path for each model
48
- const t = getCurrentTest()!;
49
- const mswPath = path.join(
50
- t.suite!.name, // same directory as the test snapshot
51
- "__msw_snapshots__",
52
- t.suite!.suite!.name, // model / streaming params
53
- t.name,
54
- );
55
- // in case there are multiple requests in a test, we need to use a separate snapshot for each request
56
- fetchCountMap[mswPath] = (fetchCountMap[mswPath] || 0) + 1;
57
- const hash = await createRequestHash(info.request);
58
- return mswPath + `_${fetchCountMap[mswPath]}_${hash}.json`;
59
- },
25
+ createSnapshotPath: createSnapshotPathFn(BASE_FILE_PATH),
60
26
  basePath: BASE_FILE_PATH,
61
- // onFetchFromSnapshot(info, snapshot) {
62
- // console.log("onFetchFromSnapshot", info, snapshot);
63
- // },
64
- // onFetchFromServer(info, snapshot) {
65
- // console.log("onFetchFromServer", info, snapshot);
66
- // },
67
27
  }),
68
28
  );
69
29
 
@@ -0,0 +1,33 @@
1
+ import { getCurrentTest } from "@vitest/runner";
2
+ import { getSortedEntries, toHashString } from "msw-snapshot";
3
+ import path from "node:path";
4
+
5
+ async function createRequestHash(req: Request): Promise<string> {
6
+ const url = new URL(req.url);
7
+ return toHashString([
8
+ req.method,
9
+ url.origin,
10
+ url.pathname,
11
+ getSortedEntries(url.searchParams),
12
+ getSortedEntries(req.headers),
13
+ new TextDecoder("utf-8").decode(await req.arrayBuffer()),
14
+ ]);
15
+ }
16
+
17
+ export function createSnapshotPathFn(_basePath: string) {
18
+ const fetchCountMap: Record<string, number> = {};
19
+
20
+ return async (info: { request: Request }): Promise<string> => {
21
+ const t = getCurrentTest()!;
22
+ const mswPath = path.join(
23
+ t.suite!.name,
24
+ "__msw_snapshots__",
25
+ t.suite!.suite!.name,
26
+ t.name,
27
+ );
28
+ fetchCountMap[mswPath] = (fetchCountMap[mswPath] || 0) + 1;
29
+ const counter = fetchCountMap[mswPath];
30
+ const hash = await createRequestHash(info.request);
31
+ return `${mswPath}_${counter}_${hash}.json`;
32
+ };
33
+ }