diff --git a/.yarn/cache/@babel-generator-npm-8.0.0-beta.4-ab401a2835-79a2130a45.zip b/.yarn/cache/@babel-generator-npm-8.0.0-beta.4-ab401a2835-79a2130a45.zip new file mode 100644 index 000000000..11f3ff582 Binary files /dev/null and b/.yarn/cache/@babel-generator-npm-8.0.0-beta.4-ab401a2835-79a2130a45.zip differ diff --git a/.yarn/cache/@babel-helper-string-parser-npm-8.0.0-rc.1-826f1bb41e-9c7b34ecce.zip b/.yarn/cache/@babel-helper-string-parser-npm-8.0.0-rc.1-826f1bb41e-9c7b34ecce.zip new file mode 100644 index 000000000..0793d4190 Binary files /dev/null and b/.yarn/cache/@babel-helper-string-parser-npm-8.0.0-rc.1-826f1bb41e-9c7b34ecce.zip differ diff --git a/.yarn/cache/@babel-helper-validator-identifier-npm-8.0.0-rc.1-13fd699081-75d6d5201c.zip b/.yarn/cache/@babel-helper-validator-identifier-npm-8.0.0-rc.1-13fd699081-75d6d5201c.zip new file mode 100644 index 000000000..e555aeed6 Binary files /dev/null and b/.yarn/cache/@babel-helper-validator-identifier-npm-8.0.0-rc.1-13fd699081-75d6d5201c.zip differ diff --git a/.yarn/cache/@babel-parser-npm-8.0.0-beta.4-b610635771-41ea150c87.zip b/.yarn/cache/@babel-parser-npm-8.0.0-beta.4-b610635771-41ea150c87.zip new file mode 100644 index 000000000..db5bfcd3e Binary files /dev/null and b/.yarn/cache/@babel-parser-npm-8.0.0-beta.4-b610635771-41ea150c87.zip differ diff --git a/.yarn/cache/@babel-parser-npm-8.0.0-rc.1-d05e9b70b4-d0c5baf877.zip b/.yarn/cache/@babel-parser-npm-8.0.0-rc.1-d05e9b70b4-d0c5baf877.zip new file mode 100644 index 000000000..857b57b0f Binary files /dev/null and b/.yarn/cache/@babel-parser-npm-8.0.0-rc.1-d05e9b70b4-d0c5baf877.zip differ diff --git a/.yarn/cache/@babel-types-npm-8.0.0-beta.4-f93521e790-31222a7005.zip b/.yarn/cache/@babel-types-npm-8.0.0-beta.4-f93521e790-31222a7005.zip new file mode 100644 index 000000000..fe802d6cb Binary files /dev/null and b/.yarn/cache/@babel-types-npm-8.0.0-beta.4-f93521e790-31222a7005.zip differ diff --git a/.yarn/cache/@babel-types-npm-8.0.0-rc.1-35e137a67f-34def05264.zip b/.yarn/cache/@babel-types-npm-8.0.0-rc.1-35e137a67f-34def05264.zip new file mode 100644 index 000000000..fecf4166d Binary files /dev/null and b/.yarn/cache/@babel-types-npm-8.0.0-rc.1-35e137a67f-34def05264.zip differ diff --git a/.yarn/cache/@emnapi-core-npm-1.8.1-9be0a25589-904ea60c91.zip b/.yarn/cache/@emnapi-core-npm-1.8.1-9be0a25589-904ea60c91.zip new file mode 100644 index 000000000..b97b75b57 Binary files /dev/null and b/.yarn/cache/@emnapi-core-npm-1.8.1-9be0a25589-904ea60c91.zip differ diff --git a/.yarn/cache/@emnapi-runtime-npm-1.8.1-1ce27dc028-26725e202d.zip b/.yarn/cache/@emnapi-runtime-npm-1.8.1-1ce27dc028-26725e202d.zip new file mode 100644 index 000000000..669c0bafe Binary files /dev/null and b/.yarn/cache/@emnapi-runtime-npm-1.8.1-1ce27dc028-26725e202d.zip differ diff --git a/.yarn/cache/@esbuild-darwin-arm64-npm-0.27.2-d675c4a521-10.zip b/.yarn/cache/@esbuild-darwin-arm64-npm-0.27.2-d675c4a521-10.zip new file mode 100644 index 000000000..df4de2225 Binary files /dev/null and b/.yarn/cache/@esbuild-darwin-arm64-npm-0.27.2-d675c4a521-10.zip differ diff --git a/.yarn/cache/@esbuild-darwin-x64-npm-0.27.2-ae63bf405f-10.zip b/.yarn/cache/@esbuild-darwin-x64-npm-0.27.2-ae63bf405f-10.zip new file mode 100644 index 000000000..987fc4966 Binary files /dev/null and b/.yarn/cache/@esbuild-darwin-x64-npm-0.27.2-ae63bf405f-10.zip differ diff --git a/.yarn/cache/@esbuild-linux-arm64-npm-0.27.2-bf1b0979ac-10.zip b/.yarn/cache/@esbuild-linux-arm64-npm-0.27.2-bf1b0979ac-10.zip new file mode 100644 index 000000000..32c8cc871 Binary files /dev/null and b/.yarn/cache/@esbuild-linux-arm64-npm-0.27.2-bf1b0979ac-10.zip differ diff --git a/.yarn/cache/@esbuild-linux-x64-npm-0.27.2-11f1a3d9db-10.zip b/.yarn/cache/@esbuild-linux-x64-npm-0.27.2-11f1a3d9db-10.zip new file mode 100644 index 000000000..eea4066e3 Binary files /dev/null and b/.yarn/cache/@esbuild-linux-x64-npm-0.27.2-11f1a3d9db-10.zip differ diff --git a/.yarn/cache/@esbuild-win32-arm64-npm-0.27.2-78a0e828ec-10.zip b/.yarn/cache/@esbuild-win32-arm64-npm-0.27.2-78a0e828ec-10.zip new file mode 100644 index 000000000..e3bec141d Binary files /dev/null and b/.yarn/cache/@esbuild-win32-arm64-npm-0.27.2-78a0e828ec-10.zip differ diff --git a/.yarn/cache/@esbuild-win32-x64-npm-0.27.2-fb03408001-10.zip b/.yarn/cache/@esbuild-win32-x64-npm-0.27.2-fb03408001-10.zip new file mode 100644 index 000000000..549aacedc Binary files /dev/null and b/.yarn/cache/@esbuild-win32-x64-npm-0.27.2-fb03408001-10.zip differ diff --git a/.yarn/cache/@jridgewell-gen-mapping-npm-0.3.13-9bd96ac800-902f8261dc.zip b/.yarn/cache/@jridgewell-gen-mapping-npm-0.3.13-9bd96ac800-902f8261dc.zip new file mode 100644 index 000000000..e130971fd Binary files /dev/null and b/.yarn/cache/@jridgewell-gen-mapping-npm-0.3.13-9bd96ac800-902f8261dc.zip differ diff --git a/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.31-1ae81d75ac-da0283270e.zip b/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.31-1ae81d75ac-da0283270e.zip new file mode 100644 index 000000000..d61ababcd Binary files /dev/null and b/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.31-1ae81d75ac-da0283270e.zip differ diff --git a/.yarn/cache/@napi-rs-wasm-runtime-npm-1.1.1-c9debf141f-080e7f2aef.zip b/.yarn/cache/@napi-rs-wasm-runtime-npm-1.1.1-c9debf141f-080e7f2aef.zip new file mode 100644 index 000000000..db34c520d Binary files /dev/null and b/.yarn/cache/@napi-rs-wasm-runtime-npm-1.1.1-c9debf141f-080e7f2aef.zip differ diff --git a/.yarn/cache/@oxc-project-types-npm-0.110.0-2eb76fb91a-427a130ca2.zip b/.yarn/cache/@oxc-project-types-npm-0.110.0-2eb76fb91a-427a130ca2.zip new file mode 100644 index 000000000..50c8681a4 Binary files /dev/null and b/.yarn/cache/@oxc-project-types-npm-0.110.0-2eb76fb91a-427a130ca2.zip differ diff --git a/.yarn/cache/@quansync-fs-npm-1.0.0-869f097647-8a27892b13.zip b/.yarn/cache/@quansync-fs-npm-1.0.0-869f097647-8a27892b13.zip new file mode 100644 index 000000000..7281201bb Binary files /dev/null and b/.yarn/cache/@quansync-fs-npm-1.0.0-869f097647-8a27892b13.zip differ diff --git a/.yarn/cache/@rolldown-binding-darwin-arm64-npm-1.0.0-rc.1-4132962059-10.zip b/.yarn/cache/@rolldown-binding-darwin-arm64-npm-1.0.0-rc.1-4132962059-10.zip new file mode 100644 index 000000000..ee2d45701 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-darwin-arm64-npm-1.0.0-rc.1-4132962059-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-darwin-x64-npm-1.0.0-rc.1-e1b0f227a4-10.zip b/.yarn/cache/@rolldown-binding-darwin-x64-npm-1.0.0-rc.1-e1b0f227a4-10.zip new file mode 100644 index 000000000..73836a8f3 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-darwin-x64-npm-1.0.0-rc.1-e1b0f227a4-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-arm64-gnu-npm-1.0.0-rc.1-bae23cc55a-10.zip b/.yarn/cache/@rolldown-binding-linux-arm64-gnu-npm-1.0.0-rc.1-bae23cc55a-10.zip new file mode 100644 index 000000000..168b98dbe Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-arm64-gnu-npm-1.0.0-rc.1-bae23cc55a-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-arm64-musl-npm-1.0.0-rc.1-848846c606-10.zip b/.yarn/cache/@rolldown-binding-linux-arm64-musl-npm-1.0.0-rc.1-848846c606-10.zip new file mode 100644 index 000000000..1ff6e70b7 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-arm64-musl-npm-1.0.0-rc.1-848846c606-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-x64-gnu-npm-1.0.0-rc.1-7e87daaa07-10.zip b/.yarn/cache/@rolldown-binding-linux-x64-gnu-npm-1.0.0-rc.1-7e87daaa07-10.zip new file mode 100644 index 000000000..b23886d13 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-x64-gnu-npm-1.0.0-rc.1-7e87daaa07-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-x64-musl-npm-1.0.0-rc.1-ce157db0ca-10.zip b/.yarn/cache/@rolldown-binding-linux-x64-musl-npm-1.0.0-rc.1-ce157db0ca-10.zip new file mode 100644 index 000000000..c30e79426 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-x64-musl-npm-1.0.0-rc.1-ce157db0ca-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-win32-arm64-msvc-npm-1.0.0-rc.1-e5e5323bfb-10.zip b/.yarn/cache/@rolldown-binding-win32-arm64-msvc-npm-1.0.0-rc.1-e5e5323bfb-10.zip new file mode 100644 index 000000000..79f4d48d8 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-win32-arm64-msvc-npm-1.0.0-rc.1-e5e5323bfb-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-win32-x64-msvc-npm-1.0.0-rc.1-d378dd46eb-10.zip b/.yarn/cache/@rolldown-binding-win32-x64-msvc-npm-1.0.0-rc.1-d378dd46eb-10.zip new file mode 100644 index 000000000..dfa277e46 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-win32-x64-msvc-npm-1.0.0-rc.1-d378dd46eb-10.zip differ diff --git a/.yarn/cache/@rolldown-pluginutils-npm-1.0.0-rc.1-c71b2c5059-b8fdae059c.zip b/.yarn/cache/@rolldown-pluginutils-npm-1.0.0-rc.1-c71b2c5059-b8fdae059c.zip new file mode 100644 index 000000000..5bd5c7361 Binary files /dev/null and b/.yarn/cache/@rolldown-pluginutils-npm-1.0.0-rc.1-c71b2c5059-b8fdae059c.zip differ diff --git a/.yarn/cache/@types-jsesc-npm-2.5.1-3d8289fff0-25407775ed.zip b/.yarn/cache/@types-jsesc-npm-2.5.1-3d8289fff0-25407775ed.zip new file mode 100644 index 000000000..d1c21e278 Binary files /dev/null and b/.yarn/cache/@types-jsesc-npm-2.5.1-3d8289fff0-25407775ed.zip differ diff --git a/.yarn/cache/@types-node-npm-22.19.6-c82ef0b745-a5bac443b2.zip b/.yarn/cache/@types-node-npm-22.19.6-c82ef0b745-a5bac443b2.zip new file mode 100644 index 000000000..83dd5a645 Binary files /dev/null and b/.yarn/cache/@types-node-npm-22.19.6-c82ef0b745-a5bac443b2.zip differ diff --git a/.yarn/cache/@types-ws-npm-8.18.1-61dc106ff0-1ce05e3174.zip b/.yarn/cache/@types-ws-npm-8.18.1-61dc106ff0-1ce05e3174.zip new file mode 100644 index 000000000..5c915f403 Binary files /dev/null and b/.yarn/cache/@types-ws-npm-8.18.1-61dc106ff0-1ce05e3174.zip differ diff --git a/.yarn/cache/@typescript-ata-npm-0.9.8-0663e9063b-c0f9daf781.zip b/.yarn/cache/@typescript-ata-npm-0.9.8-0663e9063b-c0f9daf781.zip new file mode 100644 index 000000000..500bfe18e Binary files /dev/null and b/.yarn/cache/@typescript-ata-npm-0.9.8-0663e9063b-c0f9daf781.zip differ diff --git a/.yarn/cache/@vitest-expect-npm-4.0.17-b015851278-f260fefea5.zip b/.yarn/cache/@vitest-expect-npm-4.0.17-b015851278-f260fefea5.zip new file mode 100644 index 000000000..38acb8a0b Binary files /dev/null and b/.yarn/cache/@vitest-expect-npm-4.0.17-b015851278-f260fefea5.zip differ diff --git a/.yarn/cache/@vitest-mocker-npm-4.0.17-3277b0d6dc-4d938c298d.zip b/.yarn/cache/@vitest-mocker-npm-4.0.17-3277b0d6dc-4d938c298d.zip new file mode 100644 index 000000000..3bcb273a0 Binary files /dev/null and b/.yarn/cache/@vitest-mocker-npm-4.0.17-3277b0d6dc-4d938c298d.zip differ diff --git a/.yarn/cache/@vitest-pretty-format-npm-4.0.17-fb47e1d906-e50925f441.zip b/.yarn/cache/@vitest-pretty-format-npm-4.0.17-fb47e1d906-e50925f441.zip new file mode 100644 index 000000000..3fc925a3d Binary files /dev/null and b/.yarn/cache/@vitest-pretty-format-npm-4.0.17-fb47e1d906-e50925f441.zip differ diff --git a/.yarn/cache/@vitest-runner-npm-4.0.17-d25da0ba46-75c62ac09b.zip b/.yarn/cache/@vitest-runner-npm-4.0.17-d25da0ba46-75c62ac09b.zip new file mode 100644 index 000000000..9564cfdc3 Binary files /dev/null and b/.yarn/cache/@vitest-runner-npm-4.0.17-d25da0ba46-75c62ac09b.zip differ diff --git a/.yarn/cache/@vitest-snapshot-npm-4.0.17-10d3668aa3-0cda8970f4.zip b/.yarn/cache/@vitest-snapshot-npm-4.0.17-10d3668aa3-0cda8970f4.zip new file mode 100644 index 000000000..56eb9fd66 Binary files /dev/null and b/.yarn/cache/@vitest-snapshot-npm-4.0.17-10d3668aa3-0cda8970f4.zip differ diff --git a/.yarn/cache/@vitest-spy-npm-4.0.17-85c387d906-23313980c5.zip b/.yarn/cache/@vitest-spy-npm-4.0.17-85c387d906-23313980c5.zip new file mode 100644 index 000000000..b99dad0e1 Binary files /dev/null and b/.yarn/cache/@vitest-spy-npm-4.0.17-85c387d906-23313980c5.zip differ diff --git a/.yarn/cache/@vitest-utils-npm-4.0.17-9f377c3c9c-b8b96f8c2c.zip b/.yarn/cache/@vitest-utils-npm-4.0.17-9f377c3c9c-b8b96f8c2c.zip new file mode 100644 index 000000000..efb9d2e0c Binary files /dev/null and b/.yarn/cache/@vitest-utils-npm-4.0.17-9f377c3c9c-b8b96f8c2c.zip differ diff --git a/.yarn/cache/ansis-npm-4.2.0-35ae97bdc2-493e15fad2.zip b/.yarn/cache/ansis-npm-4.2.0-35ae97bdc2-493e15fad2.zip new file mode 100644 index 000000000..0719e6447 Binary files /dev/null and b/.yarn/cache/ansis-npm-4.2.0-35ae97bdc2-493e15fad2.zip differ diff --git a/.yarn/cache/ast-kit-npm-3.0.0-beta.1-eee5b0fb06-63c8f80f71.zip b/.yarn/cache/ast-kit-npm-3.0.0-beta.1-eee5b0fb06-63c8f80f71.zip new file mode 100644 index 000000000..b50f29a39 Binary files /dev/null and b/.yarn/cache/ast-kit-npm-3.0.0-beta.1-eee5b0fb06-63c8f80f71.zip differ diff --git a/.yarn/cache/birpc-npm-4.0.0-2cc419e494-f4418e2a04.zip b/.yarn/cache/birpc-npm-4.0.0-2cc419e494-f4418e2a04.zip new file mode 100644 index 000000000..982376952 Binary files /dev/null and b/.yarn/cache/birpc-npm-4.0.0-2cc419e494-f4418e2a04.zip differ diff --git a/.yarn/cache/chai-npm-6.2.2-e1795cadaa-13cda42cc4.zip b/.yarn/cache/chai-npm-6.2.2-e1795cadaa-13cda42cc4.zip new file mode 100644 index 000000000..0accfad37 Binary files /dev/null and b/.yarn/cache/chai-npm-6.2.2-e1795cadaa-13cda42cc4.zip differ diff --git a/.yarn/cache/chokidar-npm-5.0.0-2f70d31c86-a1c2a4ee6e.zip b/.yarn/cache/chokidar-npm-5.0.0-2f70d31c86-a1c2a4ee6e.zip new file mode 100644 index 000000000..de48a7b82 Binary files /dev/null and b/.yarn/cache/chokidar-npm-5.0.0-2f70d31c86-a1c2a4ee6e.zip differ diff --git a/.yarn/cache/commander-npm-14.0.3-93ab31471d-dfa9ebe2a4.zip b/.yarn/cache/commander-npm-14.0.3-93ab31471d-dfa9ebe2a4.zip new file mode 100644 index 000000000..9b63f2535 Binary files /dev/null and b/.yarn/cache/commander-npm-14.0.3-93ab31471d-dfa9ebe2a4.zip differ diff --git a/.yarn/cache/defu-npm-6.1.4-c791c7f2cc-aeffdb4730.zip b/.yarn/cache/defu-npm-6.1.4-c791c7f2cc-aeffdb4730.zip new file mode 100644 index 000000000..df708b6ab Binary files /dev/null and b/.yarn/cache/defu-npm-6.1.4-c791c7f2cc-aeffdb4730.zip differ diff --git a/.yarn/cache/dts-resolver-npm-2.1.3-5deb33a062-9dfa79be6f.zip b/.yarn/cache/dts-resolver-npm-2.1.3-5deb33a062-9dfa79be6f.zip new file mode 100644 index 000000000..a095b39b8 Binary files /dev/null and b/.yarn/cache/dts-resolver-npm-2.1.3-5deb33a062-9dfa79be6f.zip differ diff --git a/.yarn/cache/empathic-npm-2.0.0-440d97be6e-90f47d93f8.zip b/.yarn/cache/empathic-npm-2.0.0-440d97be6e-90f47d93f8.zip new file mode 100644 index 000000000..daca95502 Binary files /dev/null and b/.yarn/cache/empathic-npm-2.0.0-440d97be6e-90f47d93f8.zip differ diff --git a/.yarn/cache/esbuild-npm-0.27.2-7789e62c6d-7f1229328b.zip b/.yarn/cache/esbuild-npm-0.27.2-7789e62c6d-7f1229328b.zip new file mode 100644 index 000000000..18b308c08 Binary files /dev/null and b/.yarn/cache/esbuild-npm-0.27.2-7789e62c6d-7f1229328b.zip differ diff --git a/.yarn/cache/expect-type-npm-1.3.0-95a4384745-a5fada3d0c.zip b/.yarn/cache/expect-type-npm-1.3.0-95a4384745-a5fada3d0c.zip new file mode 100644 index 000000000..20a597e23 Binary files /dev/null and b/.yarn/cache/expect-type-npm-1.3.0-95a4384745-a5fada3d0c.zip differ diff --git a/.yarn/cache/framer-plugin-npm-3.10.3-f82e9d58a5-c677a26146.zip b/.yarn/cache/framer-plugin-npm-3.10.3-f82e9d58a5-c677a26146.zip new file mode 100644 index 000000000..0d9ed6da3 Binary files /dev/null and b/.yarn/cache/framer-plugin-npm-3.10.3-f82e9d58a5-c677a26146.zip differ diff --git a/.yarn/cache/get-tsconfig-npm-4.13.0-009b232bdd-3603c6da30.zip b/.yarn/cache/get-tsconfig-npm-4.13.0-009b232bdd-3603c6da30.zip new file mode 100644 index 000000000..521c2617f Binary files /dev/null and b/.yarn/cache/get-tsconfig-npm-4.13.0-009b232bdd-3603c6da30.zip differ diff --git a/.yarn/cache/hookable-npm-6.0.1-a0fed3cec4-9fccaaa07d.zip b/.yarn/cache/hookable-npm-6.0.1-a0fed3cec4-9fccaaa07d.zip new file mode 100644 index 000000000..3d2a8b02e Binary files /dev/null and b/.yarn/cache/hookable-npm-6.0.1-a0fed3cec4-9fccaaa07d.zip differ diff --git a/.yarn/cache/import-without-cache-npm-0.2.5-ce20052738-b58c16deaa.zip b/.yarn/cache/import-without-cache-npm-0.2.5-ce20052738-b58c16deaa.zip new file mode 100644 index 000000000..31d362c05 Binary files /dev/null and b/.yarn/cache/import-without-cache-npm-0.2.5-ce20052738-b58c16deaa.zip differ diff --git a/.yarn/cache/jsesc-npm-3.1.0-2f4f998cd7-20bd37a142.zip b/.yarn/cache/jsesc-npm-3.1.0-2f4f998cd7-20bd37a142.zip new file mode 100644 index 000000000..0701df326 Binary files /dev/null and b/.yarn/cache/jsesc-npm-3.1.0-2f4f998cd7-20bd37a142.zip differ diff --git a/.yarn/cache/magic-string-npm-0.30.21-9a226cb21e-57d5691f41.zip b/.yarn/cache/magic-string-npm-0.30.21-9a226cb21e-57d5691f41.zip new file mode 100644 index 000000000..53485dc72 Binary files /dev/null and b/.yarn/cache/magic-string-npm-0.30.21-9a226cb21e-57d5691f41.zip differ diff --git a/.yarn/cache/obug-npm-2.1.1-029730d296-bdcf921336.zip b/.yarn/cache/obug-npm-2.1.1-029730d296-bdcf921336.zip new file mode 100644 index 000000000..ca87e6388 Binary files /dev/null and b/.yarn/cache/obug-npm-2.1.1-029730d296-bdcf921336.zip differ diff --git a/.yarn/cache/prettier-npm-3.7.4-78f94d4194-b4d00ea13b.zip b/.yarn/cache/prettier-npm-3.7.4-78f94d4194-b4d00ea13b.zip new file mode 100644 index 000000000..fde1fe689 Binary files /dev/null and b/.yarn/cache/prettier-npm-3.7.4-78f94d4194-b4d00ea13b.zip differ diff --git a/.yarn/cache/quansync-npm-1.0.0-0707dd9045-fba7a8e87a.zip b/.yarn/cache/quansync-npm-1.0.0-0707dd9045-fba7a8e87a.zip new file mode 100644 index 000000000..c024033bb Binary files /dev/null and b/.yarn/cache/quansync-npm-1.0.0-0707dd9045-fba7a8e87a.zip differ diff --git a/.yarn/cache/readdirp-npm-5.0.0-82b01a282e-a17a591b51.zip b/.yarn/cache/readdirp-npm-5.0.0-82b01a282e-a17a591b51.zip new file mode 100644 index 000000000..f62693664 Binary files /dev/null and b/.yarn/cache/readdirp-npm-5.0.0-82b01a282e-a17a591b51.zip differ diff --git a/.yarn/cache/resolve-pkg-maps-npm-1.0.0-135b70c854-0763150adf.zip b/.yarn/cache/resolve-pkg-maps-npm-1.0.0-135b70c854-0763150adf.zip new file mode 100644 index 000000000..8e3561c41 Binary files /dev/null and b/.yarn/cache/resolve-pkg-maps-npm-1.0.0-135b70c854-0763150adf.zip differ diff --git a/.yarn/cache/rolldown-npm-1.0.0-rc.1-200c3e039e-669a5f8e79.zip b/.yarn/cache/rolldown-npm-1.0.0-rc.1-200c3e039e-669a5f8e79.zip new file mode 100644 index 000000000..b1f24d133 Binary files /dev/null and b/.yarn/cache/rolldown-npm-1.0.0-rc.1-200c3e039e-669a5f8e79.zip differ diff --git a/.yarn/cache/rolldown-plugin-dts-npm-0.21.8-261945d964-a26149f786.zip b/.yarn/cache/rolldown-plugin-dts-npm-0.21.8-261945d964-a26149f786.zip new file mode 100644 index 000000000..587d1c271 Binary files /dev/null and b/.yarn/cache/rolldown-plugin-dts-npm-0.21.8-261945d964-a26149f786.zip differ diff --git a/.yarn/cache/semver-npm-7.7.3-9cf7b3b46c-8dbc3168e0.zip b/.yarn/cache/semver-npm-7.7.3-9cf7b3b46c-8dbc3168e0.zip new file mode 100644 index 000000000..c94393ee4 Binary files /dev/null and b/.yarn/cache/semver-npm-7.7.3-9cf7b3b46c-8dbc3168e0.zip differ diff --git a/.yarn/cache/std-env-npm-3.10.0-30d3e2646f-19c9cda4f3.zip b/.yarn/cache/std-env-npm-3.10.0-30d3e2646f-19c9cda4f3.zip new file mode 100644 index 000000000..8803cc08f Binary files /dev/null and b/.yarn/cache/std-env-npm-3.10.0-30d3e2646f-19c9cda4f3.zip differ diff --git a/.yarn/cache/tinyexec-npm-1.0.2-321b713e56-cb709ed424.zip b/.yarn/cache/tinyexec-npm-1.0.2-321b713e56-cb709ed424.zip new file mode 100644 index 000000000..4e06ed7d2 Binary files /dev/null and b/.yarn/cache/tinyexec-npm-1.0.2-321b713e56-cb709ed424.zip differ diff --git a/.yarn/cache/tinyrainbow-npm-3.0.3-06ed35d14d-169cc63c15.zip b/.yarn/cache/tinyrainbow-npm-3.0.3-06ed35d14d-169cc63c15.zip new file mode 100644 index 000000000..55660b3fd Binary files /dev/null and b/.yarn/cache/tinyrainbow-npm-3.0.3-06ed35d14d-169cc63c15.zip differ diff --git a/.yarn/cache/tree-kill-npm-1.2.2-3da0e5a759-49117f5f41.zip b/.yarn/cache/tree-kill-npm-1.2.2-3da0e5a759-49117f5f41.zip new file mode 100644 index 000000000..c9ef40137 Binary files /dev/null and b/.yarn/cache/tree-kill-npm-1.2.2-3da0e5a759-49117f5f41.zip differ diff --git a/.yarn/cache/tsdown-npm-0.20.1-4cc070cc58-aa590e87a8.zip b/.yarn/cache/tsdown-npm-0.20.1-4cc070cc58-aa590e87a8.zip new file mode 100644 index 000000000..20252411c Binary files /dev/null and b/.yarn/cache/tsdown-npm-0.20.1-4cc070cc58-aa590e87a8.zip differ diff --git a/.yarn/cache/tsx-npm-4.21.0-3bc9626d81-7afedeff85.zip b/.yarn/cache/tsx-npm-4.21.0-3bc9626d81-7afedeff85.zip new file mode 100644 index 000000000..27615df9a Binary files /dev/null and b/.yarn/cache/tsx-npm-4.21.0-3bc9626d81-7afedeff85.zip differ diff --git a/.yarn/cache/typescript-npm-5.9.3-48715be868-c089d9d3da.zip b/.yarn/cache/typescript-npm-5.9.3-48715be868-c089d9d3da.zip new file mode 100644 index 000000000..0eabff58d Binary files /dev/null and b/.yarn/cache/typescript-npm-5.9.3-48715be868-c089d9d3da.zip differ diff --git a/.yarn/cache/typescript-patch-6fda4d02cf-696e1b017b.zip b/.yarn/cache/typescript-patch-6fda4d02cf-696e1b017b.zip new file mode 100644 index 000000000..6cd392703 Binary files /dev/null and b/.yarn/cache/typescript-patch-6fda4d02cf-696e1b017b.zip differ diff --git a/.yarn/cache/unconfig-core-npm-7.4.2-b40a0ca292-837d196508.zip b/.yarn/cache/unconfig-core-npm-7.4.2-b40a0ca292-837d196508.zip new file mode 100644 index 000000000..3f7ff8f9e Binary files /dev/null and b/.yarn/cache/unconfig-core-npm-7.4.2-b40a0ca292-837d196508.zip differ diff --git a/.yarn/cache/unrun-npm-0.2.26-f47f1d6f75-6cb3f58f3b.zip b/.yarn/cache/unrun-npm-0.2.26-f47f1d6f75-6cb3f58f3b.zip new file mode 100644 index 000000000..12c101766 Binary files /dev/null and b/.yarn/cache/unrun-npm-0.2.26-f47f1d6f75-6cb3f58f3b.zip differ diff --git a/.yarn/cache/vite-npm-7.3.1-330baf2f0d-62e48ffa42.zip b/.yarn/cache/vite-npm-7.3.1-330baf2f0d-62e48ffa42.zip new file mode 100644 index 000000000..26ec0ade3 Binary files /dev/null and b/.yarn/cache/vite-npm-7.3.1-330baf2f0d-62e48ffa42.zip differ diff --git a/.yarn/cache/vitest-npm-4.0.17-5c1875fbc1-792cf5ecdb.zip b/.yarn/cache/vitest-npm-4.0.17-5c1875fbc1-792cf5ecdb.zip new file mode 100644 index 000000000..6d7acddc9 Binary files /dev/null and b/.yarn/cache/vitest-npm-4.0.17-5c1875fbc1-792cf5ecdb.zip differ diff --git a/.yarn/cache/ws-npm-8.19.0-c967c046a5-26e4901e93.zip b/.yarn/cache/ws-npm-8.19.0-c967c046a5-26e4901e93.zip new file mode 100644 index 000000000..457091195 Binary files /dev/null and b/.yarn/cache/ws-npm-8.19.0-c967c046a5-26e4901e93.zip differ diff --git a/packages/code-link-cli/README.md b/packages/code-link-cli/README.md new file mode 100644 index 000000000..66b29ab73 --- /dev/null +++ b/packages/code-link-cli/README.md @@ -0,0 +1,3 @@ +# Framer Code Link CLI + +Two-way syncing Framer of code components between Framer and your computer. diff --git a/packages/code-link-cli/package.json b/packages/code-link-cli/package.json new file mode 100644 index 000000000..c0231d4f2 --- /dev/null +++ b/packages/code-link-cli/package.json @@ -0,0 +1,40 @@ +{ + "name": "framer-code-link", + "version": "0.4.5", + "description": "CLI tool for syncing Framer code components - controller-centric architecture", + "main": "dist/index.mjs", + "type": "module", + "bin": "./dist/index.mjs", + "files": [ + "dist" + ], + "scripts": { + "dev": "NODE_ENV=development tsx src/index.ts", + "build": "tsdown", + "start": "node dist/index.mjs", + "test": "vitest run" + }, + "keywords": [ + "framer", + "sync", + "code-components" + ], + "author": "", + "license": "MIT", + "dependencies": { + "@typescript/ata": "^0.9.8", + "chokidar": "^5.0.0", + "commander": "^14.0.3", + "prettier": "^3.7.4", + "typescript": "^5.9.3", + "ws": "^8.18.3" + }, + "devDependencies": { + "@code-link/shared": "workspace:*", + "@types/node": "^22.19.2", + "@types/ws": "^8.18.1", + "tsdown": "^0.20.1", + "tsx": "^4.21.0", + "vitest": "^4.0.15" + } +} diff --git a/packages/code-link-cli/src/controller.test.ts b/packages/code-link-cli/src/controller.test.ts new file mode 100644 index 000000000..fdedb4f66 --- /dev/null +++ b/packages/code-link-cli/src/controller.test.ts @@ -0,0 +1,636 @@ +import { describe, expect, it } from "vitest" +import type { WebSocket } from "ws" +import { transition } from "./controller.ts" +import { filterEchoedFiles } from "./helpers/files.ts" +import { createHashTracker } from "./utils/hash-tracker.ts" + +// Readable coverage of core controller functionality + +const mockSocket = {} as WebSocket + +function disconnectedState() { + return { + mode: "disconnected" as const, + socket: null, + pendingRemoteChanges: [], + pendingOperations: new Map(), + nextOperationId: 1, + } +} + +function watchingState() { + return { + mode: "watching" as const, + socket: mockSocket, + pendingRemoteChanges: [], + pendingOperations: new Map(), + nextOperationId: 1, + } +} + +function handshakingState() { + return { + mode: "handshaking" as const, + socket: mockSocket, + pendingRemoteChanges: [], + pendingOperations: new Map(), + nextOperationId: 1, + } +} + +function snapshotProcessingState() { + return { + mode: "snapshot_processing" as const, + socket: mockSocket, + pendingRemoteChanges: [], + pendingOperations: new Map(), + nextOperationId: 1, + } +} + +function conflictResolutionState( + pendingConflicts: { + fileName: string + localContent: string | null + remoteContent: string | null + localModifiedAt?: number + remoteModifiedAt?: number + lastSyncedAt?: number + localClean?: boolean + }[] +) { + return { + mode: "conflict_resolution" as const, + socket: mockSocket, + pendingConflicts, + pendingRemoteChanges: [], + pendingOperations: new Map(), + nextOperationId: 1, + } +} + +describe("Code Link", () => { + // FIRST-TIME SYNC + // When CLI connects to a project for the first time + + describe("First-Time Sync", () => { + it("downloads new files from Framer", () => { + const state = snapshotProcessingState() + const result = transition(state, { + type: "CONFLICTS_DETECTED", + conflicts: [], + safeWrites: [ + { name: "Button.tsx", content: "export const Button = () => ", + }, + }) + + expect(result.effects.some(e => e.type === "SEND_LOCAL_CHANGE")).toBe(true) + const effect = result.effects.find(e => e.type === "SEND_LOCAL_CHANGE") + expect(effect).toMatchObject({ fileName: "Button.tsx" }) + }) + + it("pulls Framer edits to disk", () => { + const state = watchingState() + const result = transition(state, { + type: "REMOTE_FILE_CHANGE", + file: { name: "Button.tsx", content: "updated from framer", modifiedAt: Date.now() }, + }) + + expect(result.effects.some(e => e.type === "WRITE_FILES")).toBe(true) + }) + + it("queues changes during initial sync", () => { + // Changes arriving during snapshot processing are queued, not applied immediately + const state = snapshotProcessingState() + const result = transition(state, { + type: "REMOTE_FILE_CHANGE", + file: { name: "Button.tsx", content: "late arrival", modifiedAt: Date.now() }, + }) + + expect(result.state.pendingRemoteChanges).toHaveLength(1) + expect(result.effects.some(e => e.type === "WRITE_FILES")).toBe(false) + }) + + it("creates new local file and uploads to Framer", () => { + const state = watchingState() + const result = transition(state, { + type: "WATCHER_EVENT", + event: { + kind: "add", + relativePath: "NewComponent.tsx", + content: "export const New = () =>
New
", + }, + }) + + expect(result.effects.some(e => e.type === "SEND_LOCAL_CHANGE")).toBe(true) + }) + }) + + // FOLDER STRUCTURES + // Nested paths like components/Button.tsx + + describe("Folder Structures", () => { + it("downloads files to nested paths", () => { + const state = snapshotProcessingState() + const result = transition(state, { + type: "CONFLICTS_DETECTED", + conflicts: [], + safeWrites: [ + { + name: "components/Button.tsx", + content: "export const Button = () => + + + ) +} + +interface DeletePanelProps { + files: PendingDelete[] + onConfirm: () => void + onKeep: () => void +} + +function DeletePanel({ files, onConfirm, onKeep }: DeletePanelProps) { + const multiple = files.length > 1 + const text = multiple + ? { + title: "Confirm Deletions", + description: + "The following code files were deleted locally and will be permanently removed from this Project.", + } + : { + title: "Confirm Deletion", + description: "Code file was deleted locally and will be permanently removed from this Project.", + } + + const lines = files.map(file => file.content?.split("\n").length ?? 0) + + if (files.length === 0 || files[0] === undefined) return null + + return ( +
+
+
+

{text.title}

+

{text.description}

+
+ {multiple ? ( + <> +
+
+
+
File
+
Lines
+
+
+
+
    + {files.map((file, index) => ( +
  • +
    {file.fileName}
    +
    + -{lines[index]} +
    +
  • + ))} +
+ + ) : ( +
+
{files[0].fileName}
+
+ -{lines[0]} +
+
+ )} + +
+
+ + +
+
+ ) +} + +interface ConflictPanelProps { + conflicts: ConflictSummary[] + onResolve: (choice: "local" | "remote") => void +} + +function ConflictPanel({ conflicts, onResolve }: ConflictPanelProps) { + return ( +
+
+
+

Resolve Conflicts

+

The following code files have changed in Framer and locally. Select which set of changes to keep.

+
+
+
+
+
File
+
Local
+
Framer
+
+
+
+
    + {conflicts.map(conflict => { + // Show unique lines on each side + const diff = + conflict.localContent !== null && conflict.remoteContent !== null + ? computeLineDiff(conflict.remoteContent, conflict.localContent) + : null + + // diff.added = lines only in local + // diff.removed = lines only in remote + + const LocalBadge = () => { + if (conflict.localContent === null) { + return deleted + } + if (!diff || diff.added === 0) { + return ±0 + } + return +{diff.added} + } + + const FramerBadge = () => { + if (conflict.remoteContent === null) { + return deleted + } + if (!diff || diff.removed === 0) { + return ±0 + } + return +{diff.removed} + } + + return ( +
  • +
    {conflict.fileName}
    +
    + +
    +
    + +
    +
  • + ) + })} +
+
+
+ + +
+
+ ) +} + +function createMessageHandler({ + dispatch, + api, + syncTracker, +}: { + dispatch: (action: Action) => void + api: CodeFilesAPI + syncTracker: SyncTracker +}) { + return async function handleMessage(message: CliToPluginMessage, socket: WebSocket) { + log.debug("Handling message:", message.type) + + switch (message.type) { + case "request-files": + log.debug("Publishing snapshot to CLI") + await api.publishSnapshot(socket) + dispatch({ + type: "set-mode", + mode: "syncing", + }) + break + case "file-change": + log.debug("Applying remote change:", message.fileName) + await api.applyRemoteChange(message.fileName, message.content, socket) + syncTracker.remember(message.fileName, message.content) + dispatch({ type: "set-mode", mode: "idle" }) + break + case "file-delete": + if (message.requireConfirmation) { + log.debug(`Delete requires confirmation for ${message.fileNames.length} file(s)`) + const files: PendingDelete[] = [] + for (const fileName of message.fileNames) { + const content = await api.readCurrentContent(fileName) + files.push({ fileName, content }) + } + dispatch({ + type: "pending-deletes", + files, + }) + } else { + for (const fileName of message.fileNames) { + log.debug("Deleting file:", fileName) + await api.applyRemoteDelete(fileName) + } + } + break + case "conflicts-detected": + log.debug(`Received ${message.conflicts.length} conflicts from CLI`) + dispatch({ type: "conflicts", conflicts: message.conflicts }) + break + case "conflict-version-request": { + log.debug(`Fetching conflict versions for ${message.conflicts.length} files`) + const versions = await api.fetchConflictVersions(message.conflicts) + log.debug(`Sending version response for ${versions.length} files`) + socket.send( + JSON.stringify({ + type: "conflict-version-response", + versions, + }) + ) + break + } + case "sync-complete": + log.debug("Sync complete, transitioning to idle") + dispatch({ type: "set-mode", mode: "idle" }) + break + default: + log.warn("Unknown message type:", (message as unknown as { type: string }).type) + break + } + } +} diff --git a/plugins/code-link/src/api.ts b/plugins/code-link/src/api.ts new file mode 100644 index 000000000..fa2cb3f39 --- /dev/null +++ b/plugins/code-link/src/api.ts @@ -0,0 +1,189 @@ +import { canonicalFileName, ensureExtension, type SyncTracker } from "@code-link/shared" +import { framer } from "framer-plugin" +import * as log from "./utils/logger" + +/** + * Plugin API Handlers + * + * Tries to be as stateless as possible. + */ + +export class CodeFilesAPI { + private lastSnapshot = new Map() + + private async getCodeFilesWithCanonicalNames() { + // Always all files instead of single file calls. + // The API internally does that anyways. + // Also ensures everything is fresh. + let codeFiles + try { + codeFiles = await framer.getCodeFiles() + } catch (err) { + log.error("Failed to fetch code files", err) + return [] + } + + return codeFiles.map(file => { + const source = file.path || file.name + return { + name: canonicalFileName(source), + content: file.content, + } + }) + } + + async publishSnapshot(socket: WebSocket) { + const files = await this.getCodeFilesWithCanonicalNames() + socket.send(JSON.stringify({ type: "file-list", files })) + this.lastSnapshot.clear() + files.forEach(file => this.lastSnapshot.set(file.name, file.content)) + } + + async handleFramerFilesChanged(socket: WebSocket, tracker: SyncTracker) { + const files = await this.getCodeFilesWithCanonicalNames() + const seen = new Set() + + for (const file of files) { + seen.add(file.name) + + const previous = this.lastSnapshot.get(file.name) + if (previous !== file.content) { + // Generally only a small number of files change. + // So we just send each change one by one. + socket.send( + JSON.stringify({ + type: "file-change", + fileName: file.name, + content: file.content, + }) + ) + tracker.remember(file.name, file.content) + this.lastSnapshot.set(file.name, file.content) + } + } + + for (const fileName of Array.from(this.lastSnapshot.keys())) { + if (!seen.has(fileName)) { + socket.send( + JSON.stringify({ + type: "file-delete", + fileNames: [fileName], + requireConfirmation: false, + }) + ) + this.lastSnapshot.delete(fileName) + } + } + } + + async applyRemoteChange(fileName: string, content: string, socket: WebSocket) { + const normalizedName = canonicalFileName(fileName) + // Update snapshot BEFORE upsert to prevent race with file subscription + this.lastSnapshot.set(normalizedName, content) + + const updatedAt = await upsertFramerFile(fileName, content) + // Send file-synced message with timestamp + const syncTimestamp = updatedAt ?? Date.now() + log.debug( + `Confirming sync for ${fileName} with timestamp ${new Date(syncTimestamp).toISOString()} (${syncTimestamp})` + ) + socket.send( + JSON.stringify({ + type: "file-synced", + fileName: normalizedName, + remoteModifiedAt: syncTimestamp, + }) + ) + } + + async applyRemoteDelete(fileName: string) { + await deleteFramerFile(fileName) + this.lastSnapshot.delete(canonicalFileName(fileName)) + } + + async readCurrentContent(fileName: string) { + const files = await this.getCodeFilesWithCanonicalNames() + const normalizedName = canonicalFileName(fileName) + return files.find(file => file.name === normalizedName)?.content + } + + async fetchConflictVersions(requests: { fileName: string; lastSyncedAt?: number }[]) { + log.debug(`Fetching versions for ${String(requests.length)} files`) + + let codeFiles + try { + codeFiles = await framer.getCodeFiles() + } catch (err) { + log.error("Failed to fetch code files", err) + return requests.map(r => ({ + fileName: r.fileName, + latestRemoteVersionMs: undefined, + })) + } + + const versionPromises = requests.map(async request => { + const file = codeFiles.find( + f => canonicalFileName(f.path || f.name) === canonicalFileName(request.fileName) + ) + + if (!file) { + log.warn(`File ${request.fileName} not found in Framer`) + return { + fileName: request.fileName, + latestRemoteVersionMs: undefined, + } + } + + try { + // We need to find the timestamp for the last save to know if we can auto-resolve safetly + const versions = await file.getVersions() + if (versions.length > 0 && versions[0]?.createdAt) { + const latestRemoteVersionMs = Date.parse(versions[0].createdAt) + log.debug(`${request.fileName}: ${versions[0].createdAt} (${latestRemoteVersionMs})`) + return { + fileName: request.fileName, + latestRemoteVersionMs, + } + } + } catch (err) { + log.error(`Failed to fetch versions for ${request.fileName}`, err) + } + + return { + fileName: request.fileName, + latestRemoteVersionMs: undefined, + } + }) + + const results = await Promise.all(versionPromises) + log.debug(`Returning version data for ${String(results.length)} files`) + return results + } +} + +async function upsertFramerFile(fileName: string, content: string): Promise { + const normalisedName = canonicalFileName(fileName) + const codeFiles = await framer.getCodeFiles() + const existing = codeFiles.find(file => canonicalFileName(file.path || file.name) === normalisedName) + + if (existing) { + await existing.setFileContent(content) + return Date.now() + } + + await framer.createCodeFile(ensureExtension(normalisedName), content, { + editViaPlugin: false, + }) + + return Date.now() +} + +async function deleteFramerFile(fileName: string) { + const normalisedName = canonicalFileName(fileName) + const codeFiles = await framer.getCodeFiles() + const existing = codeFiles.find(file => canonicalFileName(file.path || file.name) === normalisedName) + + if (existing) { + await existing.remove() + } +} diff --git a/plugins/code-link/src/main.tsx b/plugins/code-link/src/main.tsx new file mode 100644 index 000000000..e3db46486 --- /dev/null +++ b/plugins/code-link/src/main.tsx @@ -0,0 +1,21 @@ +import "framer-plugin/framer.css" +import "./App.css" + +import React from "react" +import ReactDOM from "react-dom/client" +import { App } from "./App.tsx" +import { LogLevel, setLogLevel } from "./utils/logger" + +// Enable debug logging in development +if (import.meta.env.DEV) { + setLogLevel(LogLevel.DEBUG) +} + +const root = document.getElementById("root") +if (!root) throw new Error("Root element not found") + +ReactDOM.createRoot(root).render( + + + +) diff --git a/plugins/code-link/src/utils/clipboard.ts b/plugins/code-link/src/utils/clipboard.ts new file mode 100644 index 000000000..983461011 --- /dev/null +++ b/plugins/code-link/src/utils/clipboard.ts @@ -0,0 +1,22 @@ +export async function copyToClipboard(text: string): Promise { + // Try execCommand first (no permissions needed) + if (execCommandCopy(text)) return + // Fall back to modern API if execCommand fails + await navigator.clipboard.writeText(text) +} +function execCommandCopy(text: string): boolean { + try { + const textarea = document.createElement("textarea") + textarea.value = text + textarea.style.position = "fixed" + textarea.style.opacity = "0" + document.body.appendChild(textarea) + textarea.select() + // eslint-disable-next-line @typescript-eslint/no-deprecated + const success = document.execCommand("copy") + document.body.removeChild(textarea) + return success + } catch { + return false + } +} diff --git a/plugins/code-link/src/utils/diffing.ts b/plugins/code-link/src/utils/diffing.ts new file mode 100644 index 000000000..0b8d68b69 --- /dev/null +++ b/plugins/code-link/src/utils/diffing.ts @@ -0,0 +1,19 @@ +/** Compute line-based diff: lines added/removed going from `from` to `to` */ +export function computeLineDiff(from: string, to: string): { added: number; removed: number } { + const fromLines = from.split("\n") + const toLines = to.split("\n") + const fromSet = new Set(fromLines) + const toSet = new Set(toLines) + + let added = 0 + let removed = 0 + + for (const line of toLines) { + if (!fromSet.has(line)) added++ + } + for (const line of fromLines) { + if (!toSet.has(line)) removed++ + } + + return { added, removed } +} diff --git a/plugins/code-link/src/utils/logger.ts b/plugins/code-link/src/utils/logger.ts new file mode 100644 index 000000000..eef07abc8 --- /dev/null +++ b/plugins/code-link/src/utils/logger.ts @@ -0,0 +1,40 @@ +/** + * Logging utilities for consistent output + */ + +export enum LogLevel { + DEBUG = 0, + INFO = 1, + WARN = 2, + ERROR = 3, +} + +let currentLevel = LogLevel.INFO + +export function setLogLevel(level: LogLevel): void { + currentLevel = level +} + +export function debug(message: string, ...args: unknown[]): void { + if (currentLevel <= LogLevel.DEBUG) { + console.debug(`[DEBUG] ${message}`, ...args) + } +} + +export function info(message: string, ...args: unknown[]): void { + if (currentLevel <= LogLevel.INFO) { + console.info(`[INFO] ${message}`, ...args) + } +} + +export function warn(message: string, ...args: unknown[]): void { + if (currentLevel <= LogLevel.WARN) { + console.warn(`[WARN] ${message}`, ...args) + } +} + +export function error(message: string, ...args: unknown[]): void { + if (currentLevel <= LogLevel.ERROR) { + console.error(`[ERROR] ${message}`, ...args) + } +} diff --git a/plugins/code-link/src/utils/useConstant.ts b/plugins/code-link/src/utils/useConstant.ts new file mode 100644 index 000000000..4b33338ac --- /dev/null +++ b/plugins/code-link/src/utils/useConstant.ts @@ -0,0 +1,10 @@ +import { useRef } from "react" + +// Only init the constant once +export function useConstant(init: () => T): T { + const ref = useRef(null) + + ref.current ??= init() + + return ref.current +} diff --git a/plugins/code-link/src/vite-env.d.ts b/plugins/code-link/src/vite-env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/plugins/code-link/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/plugins/code-link/tsconfig.json b/plugins/code-link/tsconfig.json new file mode 100644 index 000000000..69ad5d606 --- /dev/null +++ b/plugins/code-link/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src", "*"] +} diff --git a/yarn.lock b/yarn.lock index 427bba63e..ed64fedd2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -51,6 +51,27 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:8.0.0-beta.4": + version: 8.0.0-beta.4 + resolution: "@babel/generator@npm:8.0.0-beta.4" + dependencies: + "@babel/parser": "npm:^8.0.0-beta.4" + "@babel/types": "npm:^8.0.0-beta.4" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + "@types/jsesc": "npm:^2.5.0" + jsesc: "npm:^3.0.2" + checksum: 10/79a2130a454f43f80c4d4289eaa3b83afd7ed27e62878c0b070108ee321a3602e3edbcff213a80b16c2b0a7913ef3150ccb14cef3cdccc155c296d0fbb96cac6 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^8.0.0-beta.4, @babel/helper-string-parser@npm:^8.0.0-rc.1": + version: 8.0.0-rc.1 + resolution: "@babel/helper-string-parser@npm:8.0.0-rc.1" + checksum: 10/9c7b34ecce6a1a03a3a2fbd2f09f46bb47a961f432ee2c279e120855c40258b1715cd1bf2ed27618c03ee13d4310356381ad123ec37648d2756c5594bd128682 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-validator-identifier@npm:7.27.1" @@ -58,6 +79,35 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^8.0.0-beta.4, @babel/helper-validator-identifier@npm:^8.0.0-rc.1": + version: 8.0.0-rc.1 + resolution: "@babel/helper-validator-identifier@npm:8.0.0-rc.1" + checksum: 10/75d6d5201c64fec916b539210b77f41585b3fc31f197c17a874e1ace818014080dba5909eb24f84daad451810f2e9b7f09a2b3f23978b9c9c9875ed63d3f83fb + languageName: node + linkType: hard + +"@babel/parser@npm:8.0.0-beta.4": + version: 8.0.0-beta.4 + resolution: "@babel/parser@npm:8.0.0-beta.4" + dependencies: + "@babel/types": "npm:^8.0.0-beta.4" + bin: + parser: ./bin/babel-parser.js + checksum: 10/41ea150c87ad2153efa245013fc6f6fa5be303403e2de0c4f2547f8529b92f242ae7a8a19f076a0bf63c494595fe40924421a6fbf4bc944378570d9df7849b82 + languageName: node + linkType: hard + +"@babel/parser@npm:^8.0.0-beta.4": + version: 8.0.0-rc.1 + resolution: "@babel/parser@npm:8.0.0-rc.1" + dependencies: + "@babel/types": "npm:^8.0.0-rc.1" + bin: + parser: ./bin/babel-parser.js + checksum: 10/d0c5baf877a0ee9e0b0626f21f22d4911405abf66504b102c7544aff8a0925e33d8841934ceb834f3d989f7992fffcaff7be8d433b5779ed1924e1692c182016 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.12.5": version: 7.27.6 resolution: "@babel/runtime@npm:7.27.6" @@ -65,6 +115,26 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:8.0.0-beta.4": + version: 8.0.0-beta.4 + resolution: "@babel/types@npm:8.0.0-beta.4" + dependencies: + "@babel/helper-string-parser": "npm:^8.0.0-beta.4" + "@babel/helper-validator-identifier": "npm:^8.0.0-beta.4" + checksum: 10/31222a70050c3845c44c1339a7bc75bc6bcea48da754f8e8d59e36605d3bac9ce29707078a6ef44ddb102f6493aea508e73e35ea849683d3844cb412f35f85ce + languageName: node + linkType: hard + +"@babel/types@npm:^8.0.0-beta.4, @babel/types@npm:^8.0.0-rc.1": + version: 8.0.0-rc.1 + resolution: "@babel/types@npm:8.0.0-rc.1" + dependencies: + "@babel/helper-string-parser": "npm:^8.0.0-rc.1" + "@babel/helper-validator-identifier": "npm:^8.0.0-rc.1" + checksum: 10/34def05264164b579c8648a9b44449b567a79c4f34b285353d1e225c0d012a2931747547f05781a41ce99806f43920e2ca6319bd628be09b44ae9dce77576ec3 + languageName: node + linkType: hard + "@biomejs/biome@npm:^2.2.4": version: 2.2.4 resolution: "@biomejs/biome@npm:2.2.4" @@ -156,6 +226,15 @@ __metadata: languageName: node linkType: hard +"@code-link/shared@workspace:*, @code-link/shared@workspace:packages/code-link-shared": + version: 0.0.0-use.local + resolution: "@code-link/shared@workspace:packages/code-link-shared" + dependencies: + typescript: "npm:^5.9.3" + vitest: "npm:^4.0.15" + languageName: unknown + linkType: soft + "@emnapi/core@npm:^1.4.3, @emnapi/core@npm:^1.4.5": version: 1.5.0 resolution: "@emnapi/core@npm:1.5.0" @@ -166,6 +245,16 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:^1.7.1": + version: 1.8.1 + resolution: "@emnapi/core@npm:1.8.1" + dependencies: + "@emnapi/wasi-threads": "npm:1.1.0" + tslib: "npm:^2.4.0" + checksum: 10/904ea60c91fc7d8aeb4a8f2c433b8cfb47c50618f2b6f37429fc5093c857c6381c60628a5cfbc3a7b0d75b0a288f21d4ed2d4533e82f92c043801ef255fd6a5c + languageName: node + linkType: hard + "@emnapi/runtime@npm:^1.4.3, @emnapi/runtime@npm:^1.4.5": version: 1.5.0 resolution: "@emnapi/runtime@npm:1.5.0" @@ -175,6 +264,15 @@ __metadata: languageName: node linkType: hard +"@emnapi/runtime@npm:^1.7.1": + version: 1.8.1 + resolution: "@emnapi/runtime@npm:1.8.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/26725e202d4baefdc4a6ba770f703dfc80825a27c27a08c22bac1e1ce6f8f75c47b4fe9424d9b63239463c33ef20b650f08d710da18dfa1164a95e5acb865dba + languageName: node + linkType: hard + "@emnapi/wasi-threads@npm:1.1.0, @emnapi/wasi-threads@npm:^1.0.4": version: 1.1.0 resolution: "@emnapi/wasi-threads@npm:1.1.0" @@ -191,6 +289,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/aix-ppc64@npm:0.27.2" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/android-arm64@npm:0.25.9" @@ -198,6 +303,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/android-arm64@npm:0.27.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/android-arm@npm:0.25.9" @@ -205,6 +317,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/android-arm@npm:0.27.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/android-x64@npm:0.25.9" @@ -212,6 +331,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/android-x64@npm:0.27.2" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/darwin-arm64@npm:0.25.9" @@ -219,6 +345,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/darwin-arm64@npm:0.27.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/darwin-x64@npm:0.25.9" @@ -226,6 +359,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/darwin-x64@npm:0.27.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/freebsd-arm64@npm:0.25.9" @@ -233,6 +373,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/freebsd-arm64@npm:0.27.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/freebsd-x64@npm:0.25.9" @@ -240,6 +387,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/freebsd-x64@npm:0.27.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/linux-arm64@npm:0.25.9" @@ -247,6 +401,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-arm64@npm:0.27.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/linux-arm@npm:0.25.9" @@ -254,6 +415,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-arm@npm:0.27.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/linux-ia32@npm:0.25.9" @@ -261,6 +429,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-ia32@npm:0.27.2" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/linux-loong64@npm:0.25.9" @@ -268,6 +443,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-loong64@npm:0.27.2" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/linux-mips64el@npm:0.25.9" @@ -275,6 +457,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-mips64el@npm:0.27.2" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/linux-ppc64@npm:0.25.9" @@ -282,6 +471,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-ppc64@npm:0.27.2" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/linux-riscv64@npm:0.25.9" @@ -289,6 +485,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-riscv64@npm:0.27.2" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/linux-s390x@npm:0.25.9" @@ -296,6 +499,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-s390x@npm:0.27.2" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/linux-x64@npm:0.25.9" @@ -303,6 +513,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-x64@npm:0.27.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-arm64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/netbsd-arm64@npm:0.25.9" @@ -310,6 +527,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/netbsd-arm64@npm:0.27.2" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/netbsd-x64@npm:0.25.9" @@ -317,6 +541,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/netbsd-x64@npm:0.27.2" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-arm64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/openbsd-arm64@npm:0.25.9" @@ -324,6 +555,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/openbsd-arm64@npm:0.27.2" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/openbsd-x64@npm:0.25.9" @@ -331,6 +569,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/openbsd-x64@npm:0.27.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openharmony-arm64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/openharmony-arm64@npm:0.25.9" @@ -338,6 +583,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openharmony-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/openharmony-arm64@npm:0.27.2" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/sunos-x64@npm:0.25.9" @@ -345,6 +597,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/sunos-x64@npm:0.27.2" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/win32-arm64@npm:0.25.9" @@ -352,6 +611,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/win32-arm64@npm:0.27.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/win32-ia32@npm:0.25.9" @@ -359,6 +625,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/win32-ia32@npm:0.27.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.25.9": version: 0.25.9 resolution: "@esbuild/win32-x64@npm:0.25.9" @@ -366,6 +639,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/win32-x64@npm:0.27.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.7.0, @eslint-community/eslint-utils@npm:^4.8.0": version: 4.9.0 resolution: "@eslint-community/eslint-utils@npm:4.9.0" @@ -601,6 +881,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.12": + version: 0.3.13 + resolution: "@jridgewell/gen-mapping@npm:0.3.13" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10/902f8261dcf450b4af7b93f9656918e02eec80a2169e155000cb2059f90113dd98f3ccf6efc6072cee1dd84cac48cade51da236972d942babc40e4c23da4d62a + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.8 resolution: "@jridgewell/gen-mapping@npm:0.3.8" @@ -636,7 +926,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.5": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5": version: 1.5.5 resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" checksum: 10/5d9d207b462c11e322d71911e55e21a4e2772f71ffe8d6f1221b8eb5ae6774458c1d242f897fb0814e8714ca9a6b498abfa74dfe4f434493342902b1a48b33a5 @@ -653,6 +943,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10/da0283270e691bdb5543806077548532791608e52386cfbbf3b9e8fb00457859d1bd01d512851161c886eb3a2f3ce6fd9bcf25db8edf3bddedd275bd4a88d606 + languageName: node + linkType: hard + "@napi-rs/wasm-runtime@npm:^0.2.12": version: 0.2.12 resolution: "@napi-rs/wasm-runtime@npm:0.2.12" @@ -664,6 +964,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^1.1.1": + version: 1.1.1 + resolution: "@napi-rs/wasm-runtime@npm:1.1.1" + dependencies: + "@emnapi/core": "npm:^1.7.1" + "@emnapi/runtime": "npm:^1.7.1" + "@tybys/wasm-util": "npm:^0.10.1" + checksum: 10/080e7f2aefb84e09884d21c650a2cbafdf25bfd2634693791b27e36eec0ddaa3c1656a943f8c913ac75879a0b04e68f8a827897ee655ab54a93169accf05b194 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -720,6 +1031,13 @@ __metadata: languageName: node linkType: hard +"@oxc-project/types@npm:=0.110.0": + version: 0.110.0 + resolution: "@oxc-project/types@npm:0.110.0" + checksum: 10/427a130ca22bfbc1c67652309022a7d9ed452ec9fcb05cd13e9601bfb3a68a3755a50e731a10e84849937850c55b0cfc24f708e3e84710b229790f7fac22c423 + languageName: node + linkType: hard + "@phosphor-icons/core@npm:^2.1.1": version: 2.1.1 resolution: "@phosphor-icons/core@npm:2.1.1" @@ -751,6 +1069,15 @@ __metadata: languageName: node linkType: hard +"@quansync/fs@npm:^1.0.0": + version: 1.0.0 + resolution: "@quansync/fs@npm:1.0.0" + dependencies: + quansync: "npm:^1.0.0" + checksum: 10/8a27892b1330c01e1312e09e9fd92f676fa89d13fa5a201cb5b9b2f99347ef6bac67a2f6f69fe3e64612427eabf45f88b4294cc5d5d33e0031bb5263b5cd37c9 + languageName: node + linkType: hard + "@radix-ui/number@npm:1.1.1": version: 1.1.1 resolution: "@radix-ui/number@npm:1.1.1" @@ -2068,6 +2395,99 @@ __metadata: languageName: node linkType: hard +"@rolldown/binding-android-arm64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-x64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.1" + dependencies: + "@napi-rs/wasm-runtime": "npm:^1.1.1" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rolldown/pluginutils@npm:1.0.0-beta.32": version: 1.0.0-beta.32 resolution: "@rolldown/pluginutils@npm:1.0.0-beta.32" @@ -2075,6 +2495,13 @@ __metadata: languageName: node linkType: hard +"@rolldown/pluginutils@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "@rolldown/pluginutils@npm:1.0.0-rc.1" + checksum: 10/b8fdae059c580d60815210da501d287564b034f2a83221862484f0a3a4efbd6d6c6c6ef7a695645c8ad94f1fc45aea440f0141df46774c151099cae68e40daba + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.50.2": version: 4.50.2 resolution: "@rollup/rollup-android-arm-eabi@npm:4.50.2" @@ -2630,7 +3057,7 @@ __metadata: languageName: node linkType: hard -"@tybys/wasm-util@npm:^0.10.0": +"@tybys/wasm-util@npm:^0.10.0, @tybys/wasm-util@npm:^0.10.1": version: 0.10.1 resolution: "@tybys/wasm-util@npm:0.10.1" dependencies: @@ -2738,6 +3165,13 @@ __metadata: languageName: node linkType: hard +"@types/jsesc@npm:^2.5.0": + version: 2.5.1 + resolution: "@types/jsesc@npm:2.5.1" + checksum: 10/25407775ed621790d2eec0cc51e194bd0d67a82e39204fd9748899c249ef965e17d9e6560f6c658773714f6d45a259465f3639790bb55750ebb168ee23801596 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.15": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" @@ -2773,6 +3207,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^22.19.2": + version: 22.19.6 + resolution: "@types/node@npm:22.19.6" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10/a5bac443b2c7ca4ceb4a381618c37012d71add696e98351be698aa81e00f20a09fb4aee5bc07f11472080e663602b18ed02233f45242cde9b4eda13140629258 + languageName: node + linkType: hard + "@types/papaparse@npm:^5.3.16": version: 5.3.16 resolution: "@types/papaparse@npm:5.3.16" @@ -2838,6 +3281,15 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^8.18.1": + version: 8.18.1 + resolution: "@types/ws@npm:8.18.1" + dependencies: + "@types/node": "npm:*" + checksum: 10/1ce05e3174dcacf28dae0e9b854ef1c9a12da44c7ed73617ab6897c5cbe4fccbb155a20be5508ae9a7dde2f83bd80f5cf3baa386b934fc4b40889ec963e94f3a + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:8.44.0": version: 8.44.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.44.0" @@ -2975,6 +3427,15 @@ __metadata: languageName: node linkType: hard +"@typescript/ata@npm:^0.9.8": + version: 0.9.8 + resolution: "@typescript/ata@npm:0.9.8" + peerDependencies: + typescript: ">=4.4.4" + checksum: 10/c0f9daf7818fff7f94030387e6bb6e8e270b1d6191ce2937040f039fedb977f5c96363610bb4ff99cb061b87a4b00213a5b79b28d85759ed876984e802b01cd9 + languageName: node + linkType: hard + "@vitejs/plugin-react-swc@npm:^4.0.1": version: 4.0.1 resolution: "@vitejs/plugin-react-swc@npm:4.0.1" @@ -3000,6 +3461,20 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:4.0.17": + version: 4.0.17 + resolution: "@vitest/expect@npm:4.0.17" + dependencies: + "@standard-schema/spec": "npm:^1.0.0" + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:4.0.17" + "@vitest/utils": "npm:4.0.17" + chai: "npm:^6.2.1" + tinyrainbow: "npm:^3.0.3" + checksum: 10/f260fefea527aae652be8d71ff188d45f958b7299a4577d1c3ed15bc87e6b20a6abb30ec6419c826259863d8bdbc1122e82cc499fb9eb63aaa43d3a5be1b7f76 + languageName: node + linkType: hard + "@vitest/mocker@npm:3.2.4": version: 3.2.4 resolution: "@vitest/mocker@npm:3.2.4" @@ -3019,6 +3494,25 @@ __metadata: languageName: node linkType: hard +"@vitest/mocker@npm:4.0.17": + version: 4.0.17 + resolution: "@vitest/mocker@npm:4.0.17" + dependencies: + "@vitest/spy": "npm:4.0.17" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.21" + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10/4d938c298dd7e63d23efc56a81e254a8a453b0157b378d4b7af57a40dd2687c24a0e1f2e2499f8d17fe302e6d6d515e67c6a5fbfbff75dee2cfd51c37cf4c7dc + languageName: node + linkType: hard + "@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": version: 3.2.4 resolution: "@vitest/pretty-format@npm:3.2.4" @@ -3028,6 +3522,15 @@ __metadata: languageName: node linkType: hard +"@vitest/pretty-format@npm:4.0.17": + version: 4.0.17 + resolution: "@vitest/pretty-format@npm:4.0.17" + dependencies: + tinyrainbow: "npm:^3.0.3" + checksum: 10/e50925f44168b8108a5094e44fd739b7183457c101eb020e88b5556a2f857808d0c9d045113aec83815a20d4aaaf9b7a522a1c651ce111de18daa686891b37a0 + languageName: node + linkType: hard + "@vitest/runner@npm:3.2.4": version: 3.2.4 resolution: "@vitest/runner@npm:3.2.4" @@ -3039,6 +3542,16 @@ __metadata: languageName: node linkType: hard +"@vitest/runner@npm:4.0.17": + version: 4.0.17 + resolution: "@vitest/runner@npm:4.0.17" + dependencies: + "@vitest/utils": "npm:4.0.17" + pathe: "npm:^2.0.3" + checksum: 10/75c62ac09b506d2707baad72c9a8ca6addb9bb179548d9ec9af3f7f2303b2e03f4001480c9657325718b15f2997fc39168c027d8d88794c0f8c04800c640c055 + languageName: node + linkType: hard + "@vitest/snapshot@npm:3.2.4": version: 3.2.4 resolution: "@vitest/snapshot@npm:3.2.4" @@ -3050,6 +3563,17 @@ __metadata: languageName: node linkType: hard +"@vitest/snapshot@npm:4.0.17": + version: 4.0.17 + resolution: "@vitest/snapshot@npm:4.0.17" + dependencies: + "@vitest/pretty-format": "npm:4.0.17" + magic-string: "npm:^0.30.21" + pathe: "npm:^2.0.3" + checksum: 10/0cda8970f484bdc5777347cc317f020dc7773ddf0cea996ab5fff453966310c64e9a97854b04998cf0635e8118c12e2235c7a5f921fdfc288dc63dc27c3116d8 + languageName: node + linkType: hard + "@vitest/spy@npm:3.2.4": version: 3.2.4 resolution: "@vitest/spy@npm:3.2.4" @@ -3059,6 +3583,13 @@ __metadata: languageName: node linkType: hard +"@vitest/spy@npm:4.0.17": + version: 4.0.17 + resolution: "@vitest/spy@npm:4.0.17" + checksum: 10/23313980c512b00c08a1c64f6ed15dc7c295bb7b09feab571a3cc96536de2f07432109256717f9deb7f1b8c9ba9ac28f7e617cf639654bc564f6ea5a341ad8f4 + languageName: node + linkType: hard + "@vitest/ui@npm:^3.2.4": version: 3.2.4 resolution: "@vitest/ui@npm:3.2.4" @@ -3087,6 +3618,16 @@ __metadata: languageName: node linkType: hard +"@vitest/utils@npm:4.0.17": + version: 4.0.17 + resolution: "@vitest/utils@npm:4.0.17" + dependencies: + "@vitest/pretty-format": "npm:4.0.17" + tinyrainbow: "npm:^3.0.3" + checksum: 10/b8b96f8c2c4fee13f4ef4927e56bbf98c2d4f3a61428d9721c5578c96e2a0953892dfccfad3e0c1a7b3105e3d24f93f826f8338c82c72b9f8bc32b50bc9072a1 + languageName: node + linkType: hard + "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -3191,6 +3732,13 @@ __metadata: languageName: node linkType: hard +"ansis@npm:^4.2.0": + version: 4.2.0 + resolution: "ansis@npm:4.2.0" + checksum: 10/493e15fad267bd6e3e275d6886c3b3c96a075784d9eae3e16d16383d488e94cc3deb1b357e1246f572599767360548ef9e5b7eab9b72e4ee3f7bad9ce6bc8797 + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -3260,6 +3808,17 @@ __metadata: languageName: node linkType: hard +"ast-kit@npm:^3.0.0-beta.1": + version: 3.0.0-beta.1 + resolution: "ast-kit@npm:3.0.0-beta.1" + dependencies: + "@babel/parser": "npm:^8.0.0-beta.4" + estree-walker: "npm:^3.0.3" + pathe: "npm:^2.0.3" + checksum: 10/63c8f80f71d905a3ca23a2cd02e9e9bba4e617353db80e58e4a48ca31f5a51c594e3d5bf7d1b61faf98b5f4c9a4db52bd2e8fa69e01e5b17a737b10abbd087f9 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -3310,6 +3869,13 @@ __metadata: languageName: node linkType: hard +"birpc@npm:^4.0.0": + version: 4.0.0 + resolution: "birpc@npm:4.0.0" + checksum: 10/f4418e2a0451f41eb6f20b3c9a4d6c007b335bbc0fe1d6eddf44bc2fd2d44f26594a3b0a24fc43107b0288a2a56959507b37478faed20e3da0d2587ed0fa1557 + languageName: node + linkType: hard + "blurhash@npm:^2.0.5": version: 2.0.5 resolution: "blurhash@npm:2.0.5" @@ -3440,6 +4006,13 @@ __metadata: languageName: node linkType: hard +"chai@npm:^6.2.1": + version: 6.2.2 + resolution: "chai@npm:6.2.2" + checksum: 10/13cda42cc40aa46da04a41cf7e5c61df6b6ae0b4e8a8c8b40e04d6947e4d7951377ea8c14f9fa7fe5aaa9e8bd9ba414f11288dc958d4cee6f5221b9436f2778f + languageName: node + linkType: hard + "chalk@npm:^4.0.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -3490,6 +4063,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^5.0.0": + version: 5.0.0 + resolution: "chokidar@npm:5.0.0" + dependencies: + readdirp: "npm:^5.0.0" + checksum: 10/a1c2a4ee6ee81ba6409712c295a47be055fb9de1186dfbab33c1e82f28619de962ba02fc5f9d433daaedc96c35747460d8b2079ac2907de2c95e3f7cce913113 + languageName: node + linkType: hard + "chownr@npm:^3.0.0": version: 3.0.0 resolution: "chownr@npm:3.0.0" @@ -3560,6 +4142,19 @@ __metadata: languageName: unknown linkType: soft +"code-link@workspace:plugins/code-link": + version: 0.0.0-use.local + resolution: "code-link@workspace:plugins/code-link" + dependencies: + "@code-link/shared": "workspace:*" + "@types/react": "npm:^18.3.24" + "@types/react-dom": "npm:^18.3.7" + framer-plugin: "npm:3.10.3" + react: "npm:^18.3.1" + react-dom: "npm:^18.3.1" + languageName: unknown + linkType: soft + "code-versions@workspace:plugins/code-versions": version: 0.0.0-use.local resolution: "code-versions@workspace:plugins/code-versions" @@ -3639,6 +4234,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^14.0.3": + version: 14.0.3 + resolution: "commander@npm:14.0.3" + checksum: 10/dfa9ebe2a433d277de5cb0252d23b10a543d245d892db858d23b516336a835c50fd4f52bee4cd13c705cc8acb6f03dc632c73dd806f7d06d3353eb09953dd17a + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -3854,6 +4456,13 @@ __metadata: languageName: node linkType: hard +"defu@npm:^6.1.4": + version: 6.1.4 + resolution: "defu@npm:6.1.4" + checksum: 10/aeffdb47300f45b4fdef1c5bd3880ac18ea7a1fd5b8a8faf8df29350ff03bf16dd34f9800205cab513d476e4c0a3783aa0cff0a433aff0ac84a67ddc4c8a2d64 + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -3986,6 +4595,18 @@ __metadata: languageName: unknown linkType: soft +"dts-resolver@npm:^2.1.3": + version: 2.1.3 + resolution: "dts-resolver@npm:2.1.3" + peerDependencies: + oxc-resolver: ">=11.0.0" + peerDependenciesMeta: + oxc-resolver: + optional: true + checksum: 10/9dfa79be6f5a4dabc318274a6069cc237e3121307afa604bada4e8cbbf5c30403d916ec49059ce473b18fed1a28eb1d13353bb0fb82c4231b5cb4d332ff12f51 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -4014,6 +4635,13 @@ __metadata: languageName: node linkType: hard +"empathic@npm:^2.0.0": + version: 2.0.0 + resolution: "empathic@npm:2.0.0" + checksum: 10/90f47d93f8d1db3aa00ce1bfae2940bf76379dbb34bd562edbd92c3564a173cb1d6bd3cadb645fad0224839c25886abde801155d9b972dda6add7a5cc8b35d48 + languageName: node + linkType: hard + "encoding-sniffer@npm:^0.2.1": version: 0.2.1 resolution: "encoding-sniffer@npm:0.2.1" @@ -4189,7 +4817,96 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10/fc174ae7f646ad413adb641c7e46f16be575e462ed209866b55d5954d382e5da839e3f3f89a8e42e2b71d48895cc636ba43523011249fe5ff9c63d8d39d3a364 + checksum: 10/fc174ae7f646ad413adb641c7e46f16be575e462ed209866b55d5954d382e5da839e3f3f89a8e42e2b71d48895cc636ba43523011249fe5ff9c63d8d39d3a364 + languageName: node + linkType: hard + +"esbuild@npm:^0.27.0, esbuild@npm:~0.27.0": + version: 0.27.2 + resolution: "esbuild@npm:0.27.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.2" + "@esbuild/android-arm": "npm:0.27.2" + "@esbuild/android-arm64": "npm:0.27.2" + "@esbuild/android-x64": "npm:0.27.2" + "@esbuild/darwin-arm64": "npm:0.27.2" + "@esbuild/darwin-x64": "npm:0.27.2" + "@esbuild/freebsd-arm64": "npm:0.27.2" + "@esbuild/freebsd-x64": "npm:0.27.2" + "@esbuild/linux-arm": "npm:0.27.2" + "@esbuild/linux-arm64": "npm:0.27.2" + "@esbuild/linux-ia32": "npm:0.27.2" + "@esbuild/linux-loong64": "npm:0.27.2" + "@esbuild/linux-mips64el": "npm:0.27.2" + "@esbuild/linux-ppc64": "npm:0.27.2" + "@esbuild/linux-riscv64": "npm:0.27.2" + "@esbuild/linux-s390x": "npm:0.27.2" + "@esbuild/linux-x64": "npm:0.27.2" + "@esbuild/netbsd-arm64": "npm:0.27.2" + "@esbuild/netbsd-x64": "npm:0.27.2" + "@esbuild/openbsd-arm64": "npm:0.27.2" + "@esbuild/openbsd-x64": "npm:0.27.2" + "@esbuild/openharmony-arm64": "npm:0.27.2" + "@esbuild/sunos-x64": "npm:0.27.2" + "@esbuild/win32-arm64": "npm:0.27.2" + "@esbuild/win32-ia32": "npm:0.27.2" + "@esbuild/win32-x64": "npm:0.27.2" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10/7f1229328b0efc63c4184a61a7eb303df1e99818cc1d9e309fb92600703008e69821e8e984e9e9f54a627da14e0960d561db3a93029482ef96dc82dd267a60c2 languageName: node linkType: hard @@ -4365,6 +5082,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.2.2": + version: 1.3.0 + resolution: "expect-type@npm:1.3.0" + checksum: 10/a5fada3d0c621649261f886e7d93e6bf80ce26d8a86e5d517e38301b8baec8450ab2cb94ba6e7a0a6bf2fc9ee55f54e1b06938ef1efa52ddcfeffbfa01acbbcc + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.2 resolution: "exponential-backoff@npm:3.1.2" @@ -4541,6 +5265,27 @@ __metadata: languageName: node linkType: hard +"framer-code-link@workspace:packages/code-link-cli": + version: 0.0.0-use.local + resolution: "framer-code-link@workspace:packages/code-link-cli" + dependencies: + "@code-link/shared": "workspace:*" + "@types/node": "npm:^22.19.2" + "@types/ws": "npm:^8.18.1" + "@typescript/ata": "npm:^0.9.8" + chokidar: "npm:^5.0.0" + commander: "npm:^14.0.3" + prettier: "npm:^3.7.4" + tsdown: "npm:^0.20.1" + tsx: "npm:^4.21.0" + typescript: "npm:^5.9.3" + vitest: "npm:^4.0.15" + ws: "npm:^8.18.3" + bin: + framer-code-link: ./dist/index.mjs + languageName: unknown + linkType: soft + "framer-motion@npm:^12.23.12": version: 12.23.12 resolution: "framer-motion@npm:12.23.12" @@ -4584,6 +5329,16 @@ __metadata: languageName: node linkType: hard +"framer-plugin@npm:3.10.3": + version: 3.10.3 + resolution: "framer-plugin@npm:3.10.3" + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + checksum: 10/c677a261461cc3a79605cd74fc9de746de7c32e531a0c6a7aba0d5794af1c6c194cdea3576a6e74034c0228e7cc5a8ca8b0e40c213fe85e0dacece7cc01ce6c2 + languageName: node + linkType: hard + "framer-plugin@npm:3.7.0-alpha.0": version: 3.7.0-alpha.0 resolution: "framer-plugin@npm:3.7.0-alpha.0" @@ -4683,6 +5438,15 @@ __metadata: languageName: node linkType: hard +"get-tsconfig@npm:^4.13.0, get-tsconfig@npm:^4.7.5": + version: 4.13.0 + resolution: "get-tsconfig@npm:4.13.0" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10/3603c6da30e312636e4c20461e779114c9126601d1eca70ee4e36e3e3c00e3c21892d2d920027333afa2cc9e20998a436b14abe03a53cde40742581cb0e9ceb2 + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -4852,6 +5616,13 @@ __metadata: languageName: node linkType: hard +"hookable@npm:^6.0.1": + version: 6.0.1 + resolution: "hookable@npm:6.0.1" + checksum: 10/9fccaaa07dabaadc2fa4f15afa00548b89dd8042a1165b94cb95118324b59b824e94686c5c9f710f74b87e860b885e2e31dfd086ca1008b011cc59993c65a93b + languageName: node + linkType: hard + "htmlparser2@npm:^10.0.0": version: 10.0.0 resolution: "htmlparser2@npm:10.0.0" @@ -4959,6 +5730,13 @@ __metadata: languageName: node linkType: hard +"import-without-cache@npm:^0.2.5": + version: 0.2.5 + resolution: "import-without-cache@npm:0.2.5" + checksum: 10/b58c16deaa0c97f08b1c34798d22a2b1108dfe9d6319dc3250fa8c6d0c5221d1bda899471546faf58a5968c919f177b1df3670a6fb49dfafbeceed0830ec86d6 + languageName: node + linkType: hard + "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -5095,6 +5873,15 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10/20bd37a142eca5d1794f354db8f1c9aeb54d85e1f5c247b371de05d23a9751ecd7bd3a9c4fc5298ea6fa09a100dafb4190fa5c98c6610b75952c3487f3ce7967 + languageName: node + linkType: hard + "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -5337,6 +6124,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.21": + version: 0.30.21 + resolution: "magic-string@npm:0.30.21" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + checksum: 10/57d5691f41ed40d962d8bd300148114f53db67fadbff336207db10a99f2bdf4a1be9cac3a68ee85dba575912ee1d4402e4396408196ec2d3afd043b076156221 + languageName: node + linkType: hard + "make-fetch-happen@npm:^14.0.3": version: 14.0.3 resolution: "make-fetch-happen@npm:14.0.3" @@ -5686,6 +6482,13 @@ __metadata: languageName: node linkType: hard +"obug@npm:^2.1.1": + version: 2.1.1 + resolution: "obug@npm:2.1.1" + checksum: 10/bdcf9213361786688019345f3452b95a1dc73710e4b403c82a1994b98bad6abc31b26cb72a482128c5fd53ea9daf6fbb7d0e0e7b2b7e9c8be6d779deeccee07f + languageName: node + linkType: hard + "ogl@npm:^1.0.11": version: 1.0.11 resolution: "ogl@npm:1.0.11" @@ -5972,6 +6775,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:^3.7.4": + version: 3.7.4 + resolution: "prettier@npm:3.7.4" + bin: + prettier: bin/prettier.cjs + checksum: 10/b4d00ea13baed813cb777c444506632fb10faaef52dea526cacd03085f01f6db11fc969ccebedf05bf7d93c3960900994c6adf1b150e28a31afd5cfe7089b313 + languageName: node + linkType: hard + "pretty-format@npm:^27.0.2": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" @@ -6039,6 +6851,13 @@ __metadata: languageName: node linkType: hard +"quansync@npm:^1.0.0": + version: 1.0.0 + resolution: "quansync@npm:1.0.0" + checksum: 10/fba7a8e87ae8ed99648aba16ce5fbe0fb8a1ae00b18407447f0273feab413b6e50f1fcdfb106e88da700766c80d89c4303e2f0685baee2f10f055e6b2a5879cf + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -6332,6 +7151,13 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:^5.0.0": + version: 5.0.0 + resolution: "readdirp@npm:5.0.0" + checksum: 10/a17a591b51d8b912083660df159e8bd17305dc1a9ef27c869c818bd95ff59e3a6496f97e91e724ef433e789d559d24e39496ea1698822eb5719606dc9c1a923d + languageName: node + linkType: hard + "recharts@npm:^3.2.0": version: 3.2.0 resolution: "recharts@npm:3.2.0" @@ -6450,6 +7276,13 @@ __metadata: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10/0763150adf303040c304009231314d1e84c6e5ebfa2d82b7d94e96a6e82bacd1dcc0b58ae257315f3c8adb89a91d8d0f12928241cba2df1680fbe6f60bf99b0e + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -6464,6 +7297,89 @@ __metadata: languageName: node linkType: hard +"rolldown-plugin-dts@npm:^0.21.5": + version: 0.21.8 + resolution: "rolldown-plugin-dts@npm:0.21.8" + dependencies: + "@babel/generator": "npm:8.0.0-beta.4" + "@babel/parser": "npm:8.0.0-beta.4" + "@babel/types": "npm:8.0.0-beta.4" + ast-kit: "npm:^3.0.0-beta.1" + birpc: "npm:^4.0.0" + dts-resolver: "npm:^2.1.3" + get-tsconfig: "npm:^4.13.0" + obug: "npm:^2.1.1" + peerDependencies: + "@ts-macro/tsc": ^0.3.6 + "@typescript/native-preview": ">=7.0.0-dev.20250601.1" + rolldown: ^1.0.0-beta.57 + typescript: ^5.0.0 + vue-tsc: ~3.2.0 + peerDependenciesMeta: + "@ts-macro/tsc": + optional: true + "@typescript/native-preview": + optional: true + typescript: + optional: true + vue-tsc: + optional: true + checksum: 10/a26149f786d082fc0e9c9682d2319c27a4d1c88796be9fa5975f9af7c228f2cd00fea2dc4ed27ee11ac35d487e6bd695e2be4bdbbd1285960e3026a9b0bae513 + languageName: node + linkType: hard + +"rolldown@npm:1.0.0-rc.1": + version: 1.0.0-rc.1 + resolution: "rolldown@npm:1.0.0-rc.1" + dependencies: + "@oxc-project/types": "npm:=0.110.0" + "@rolldown/binding-android-arm64": "npm:1.0.0-rc.1" + "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.1" + "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.1" + "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.1" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.1" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.1" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.1" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.1" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.1" + "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.1" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.1" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.1" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.1" + "@rolldown/pluginutils": "npm:1.0.0-rc.1" + dependenciesMeta: + "@rolldown/binding-android-arm64": + optional: true + "@rolldown/binding-darwin-arm64": + optional: true + "@rolldown/binding-darwin-x64": + optional: true + "@rolldown/binding-freebsd-x64": + optional: true + "@rolldown/binding-linux-arm-gnueabihf": + optional: true + "@rolldown/binding-linux-arm64-gnu": + optional: true + "@rolldown/binding-linux-arm64-musl": + optional: true + "@rolldown/binding-linux-x64-gnu": + optional: true + "@rolldown/binding-linux-x64-musl": + optional: true + "@rolldown/binding-openharmony-arm64": + optional: true + "@rolldown/binding-wasm32-wasi": + optional: true + "@rolldown/binding-win32-arm64-msvc": + optional: true + "@rolldown/binding-win32-x64-msvc": + optional: true + bin: + rolldown: bin/cli.mjs + checksum: 10/669a5f8e793aaef5b2d48a486e88afc681e675a0988d6962a4ff0586c80862a238f9712fc0eb3762989486be4a2c85df6d01e4147a46f451d3f8614e9265b65c + languageName: node + linkType: hard + "rollup@npm:^4.43.0": version: 4.50.2 resolution: "rollup@npm:4.50.2" @@ -6601,6 +7517,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.7.3": + version: 7.7.3 + resolution: "semver@npm:7.7.3" + bin: + semver: bin/semver.js + checksum: 10/8dbc3168e057a38fc322af909c7f5617483c50caddba135439ff09a754b20bdd6482a5123ff543dad4affa488ecf46ec5fb56d61312ad20bb140199b88dfaea9 + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -6700,6 +7625,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.10.0": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10/19c9cda4f370b1ffae2b8b08c72167d8c3e5cfa972aaf5c6873f85d0ed2faa729407f5abb194dc33380708c00315002febb6f1e1b484736bfcf9361ad366013a + languageName: node + linkType: hard + "std-env@npm:^3.9.0": version: 3.9.0 resolution: "std-env@npm:3.9.0" @@ -6870,6 +7802,13 @@ __metadata: languageName: node linkType: hard +"tinyexec@npm:^1.0.2": + version: 1.0.2 + resolution: "tinyexec@npm:1.0.2" + checksum: 10/cb709ed4240e873d3816e67f851d445f5676e0ae3a52931a60ff571d93d388da09108c8057b62351766133ee05ff3159dd56c3a0fbd39a5933c6639ce8771405 + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15": version: 0.2.15 resolution: "tinyglobby@npm:0.2.15" @@ -6894,6 +7833,13 @@ __metadata: languageName: node linkType: hard +"tinyrainbow@npm:^3.0.3": + version: 3.0.3 + resolution: "tinyrainbow@npm:3.0.3" + checksum: 10/169cc63c15e1378674180f3207c82c05bfa58fc79992e48792e8d97b4b759012f48e95297900ede24a81f0087cf329a0d85bb81109739eacf03c650127b3f6c1 + languageName: node + linkType: hard + "tinyspy@npm:^4.0.3": version: 4.0.3 resolution: "tinyspy@npm:4.0.3" @@ -6924,6 +7870,15 @@ __metadata: languageName: node linkType: hard +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 10/49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + "ts-api-utils@npm:^2.1.0": version: 2.1.0 resolution: "ts-api-utils@npm:2.1.0" @@ -6940,6 +7895,52 @@ __metadata: languageName: node linkType: hard +"tsdown@npm:^0.20.1": + version: 0.20.1 + resolution: "tsdown@npm:0.20.1" + dependencies: + ansis: "npm:^4.2.0" + cac: "npm:^6.7.14" + defu: "npm:^6.1.4" + empathic: "npm:^2.0.0" + hookable: "npm:^6.0.1" + import-without-cache: "npm:^0.2.5" + obug: "npm:^2.1.1" + picomatch: "npm:^4.0.3" + rolldown: "npm:1.0.0-rc.1" + rolldown-plugin-dts: "npm:^0.21.5" + semver: "npm:^7.7.3" + tinyexec: "npm:^1.0.2" + tinyglobby: "npm:^0.2.15" + tree-kill: "npm:^1.2.2" + unconfig-core: "npm:^7.4.2" + unrun: "npm:^0.2.26" + peerDependencies: + "@arethetypeswrong/core": ^0.18.1 + "@vitejs/devtools": "*" + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 + peerDependenciesMeta: + "@arethetypeswrong/core": + optional: true + "@vitejs/devtools": + optional: true + publint: + optional: true + typescript: + optional: true + unplugin-lightningcss: + optional: true + unplugin-unused: + optional: true + bin: + tsdown: dist/run.mjs + checksum: 10/aa590e87a8d13c6cc3ab0f11cc7747e7c0d64505975df51d584efcce1263ed4934a63988c80a688fa8aee3a19d5dadae6a3ff50920cd5d5609422605ae3cac53 + languageName: node + linkType: hard + "tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.7.0, tslib@npm:^2.8.0": version: 2.8.1 resolution: "tslib@npm:2.8.1" @@ -6947,6 +7948,22 @@ __metadata: languageName: node linkType: hard +"tsx@npm:^4.21.0": + version: 4.21.0 + resolution: "tsx@npm:4.21.0" + dependencies: + esbuild: "npm:~0.27.0" + fsevents: "npm:~2.3.3" + get-tsconfig: "npm:^4.7.5" + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: 10/7afedeff855ba98c47dc28b33d7e8e253c4dc1f791938db402d79c174bdf806b897c1a5f91e5b1259c112520c816f826b4c5d98f0bad7e95b02dec66fedb64d2 + languageName: node + linkType: hard + "turbo-darwin-64@npm:2.5.6": version: 2.5.6 resolution: "turbo-darwin-64@npm:2.5.6" @@ -7052,6 +8069,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/c089d9d3da2729fd4ac517f9b0e0485914c4b3c26f80dc0cffcb5de1719a17951e92425d55db59515c1a7ddab65808466debb864d0d56dcf43f27007d0709594 + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A^5.9.2#optional!builtin": version: 5.9.2 resolution: "typescript@patch:typescript@npm%3A5.9.2#optional!builtin::version=5.9.2&hash=5786d5" @@ -7062,6 +8089,26 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10/696e1b017bc2635f4e0c94eb4435357701008e2f272f553d06e35b494b8ddc60aa221145e286c28ace0c89ee32827a28c2040e3a69bdc108b1a5dc8fb40b72e3 + languageName: node + linkType: hard + +"unconfig-core@npm:^7.4.2": + version: 7.4.2 + resolution: "unconfig-core@npm:7.4.2" + dependencies: + "@quansync/fs": "npm:^1.0.0" + quansync: "npm:^1.0.0" + checksum: 10/837d196508e11be4b182560448f07ca7506db9d2f607d43738f6d64d6a3182a6c71b73339de94ea05ee60cfcdfd29e59e0806902267967ffe522cae60b5b4b4d + languageName: node + linkType: hard + "undici-types@npm:~6.21.0": version: 6.21.0 resolution: "undici-types@npm:6.21.0" @@ -7101,6 +8148,22 @@ __metadata: languageName: node linkType: hard +"unrun@npm:^0.2.26": + version: 0.2.26 + resolution: "unrun@npm:0.2.26" + dependencies: + rolldown: "npm:1.0.0-rc.1" + peerDependencies: + synckit: ^0.11.11 + peerDependenciesMeta: + synckit: + optional: true + bin: + unrun: dist/cli.mjs + checksum: 10/6cb3f58f3b2151aa5135dc60925b142a9c7323ec5b74a7ca0a84aaafe4d01f751b729b97c407da4d291a3691060538d699adf49cf3f80d38de6003fb19323a66 + languageName: node + linkType: hard + "unsplash@workspace:plugins/unsplash": version: 0.0.0-use.local resolution: "unsplash@workspace:plugins/unsplash" @@ -7324,6 +8387,61 @@ __metadata: languageName: node linkType: hard +"vite@npm:^6.0.0 || ^7.0.0": + version: 7.3.1 + resolution: "vite@npm:7.3.1" + dependencies: + esbuild: "npm:^0.27.0" + fdir: "npm:^6.5.0" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10/62e48ffa4283b688f0049005405a004447ad38ffc99a0efea4c3aa9b7eed739f7402b43f00668c0ee5a895b684dc953d62f0722d8a92c5b2f6c95f051bceb208 + languageName: node + linkType: hard + "vite@npm:^7.1.11": version: 7.1.11 resolution: "vite@npm:7.1.11" @@ -7435,6 +8553,65 @@ __metadata: languageName: node linkType: hard +"vitest@npm:^4.0.15": + version: 4.0.17 + resolution: "vitest@npm:4.0.17" + dependencies: + "@vitest/expect": "npm:4.0.17" + "@vitest/mocker": "npm:4.0.17" + "@vitest/pretty-format": "npm:4.0.17" + "@vitest/runner": "npm:4.0.17" + "@vitest/snapshot": "npm:4.0.17" + "@vitest/spy": "npm:4.0.17" + "@vitest/utils": "npm:4.0.17" + es-module-lexer: "npm:^1.7.0" + expect-type: "npm:^1.2.2" + magic-string: "npm:^0.30.21" + obug: "npm:^2.1.1" + pathe: "npm:^2.0.3" + picomatch: "npm:^4.0.3" + std-env: "npm:^3.10.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^1.0.2" + tinyglobby: "npm:^0.2.15" + tinyrainbow: "npm:^3.0.3" + vite: "npm:^6.0.0 || ^7.0.0" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@opentelemetry/api": ^1.9.0 + "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 + "@vitest/browser-playwright": 4.0.17 + "@vitest/browser-preview": 4.0.17 + "@vitest/browser-webdriverio": 4.0.17 + "@vitest/ui": 4.0.17 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@opentelemetry/api": + optional: true + "@types/node": + optional: true + "@vitest/browser-playwright": + optional: true + "@vitest/browser-preview": + optional: true + "@vitest/browser-webdriverio": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10/792cf5ecdb2c0c2a61fc7beacec800413dcc5b68ad5e18f74795cdbfe513d58e3b6e437571c728c9992920f52d0640a5264aaf8c3702454b2637ff93451cf567 + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -7551,6 +8728,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.18.3": + version: 8.19.0 + resolution: "ws@npm:8.19.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10/26e4901e93abaf73af9f26a93707c95b4845e91a7a347ec8c569e6e9be7f9df066f6c2b817b2d685544e208207898a750b78461e6e8d810c11a370771450c31b + languageName: node + linkType: hard + "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8"