diff --git a/.yarn/cache/@babel-generator-npm-7.28.6-18c2d22a25-ef2af927e8.zip b/.yarn/cache/@babel-generator-npm-7.28.6-18c2d22a25-ef2af927e8.zip new file mode 100644 index 000000000..429b96839 Binary files /dev/null and b/.yarn/cache/@babel-generator-npm-7.28.6-18c2d22a25-ef2af927e8.zip differ diff --git a/.yarn/cache/@babel-helper-string-parser-npm-7.27.1-d1471e0598-0ae29cc200.zip b/.yarn/cache/@babel-helper-string-parser-npm-7.27.1-d1471e0598-0ae29cc200.zip new file mode 100644 index 000000000..db113bb54 Binary files /dev/null and b/.yarn/cache/@babel-helper-string-parser-npm-7.27.1-d1471e0598-0ae29cc200.zip differ diff --git a/.yarn/cache/@babel-helper-validator-identifier-npm-7.28.5-1953d49d2b-8e5d9b0133.zip b/.yarn/cache/@babel-helper-validator-identifier-npm-7.28.5-1953d49d2b-8e5d9b0133.zip new file mode 100644 index 000000000..c67a0ac56 Binary files /dev/null and b/.yarn/cache/@babel-helper-validator-identifier-npm-7.28.5-1953d49d2b-8e5d9b0133.zip differ diff --git a/.yarn/cache/@babel-parser-npm-7.28.6-b41fd3a428-483a6fb5f9.zip b/.yarn/cache/@babel-parser-npm-7.28.6-b41fd3a428-483a6fb5f9.zip new file mode 100644 index 000000000..f2d7aa1e2 Binary files /dev/null and b/.yarn/cache/@babel-parser-npm-7.28.6-b41fd3a428-483a6fb5f9.zip differ diff --git a/.yarn/cache/@babel-types-npm-7.28.6-623ccfc882-f9c6e52b45.zip b/.yarn/cache/@babel-types-npm-7.28.6-623ccfc882-f9c6e52b45.zip new file mode 100644 index 000000000..acbaa915f Binary files /dev/null and b/.yarn/cache/@babel-types-npm-7.28.6-623ccfc882-f9c6e52b45.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.101.0-8e969d93d4-43a29933af.zip b/.yarn/cache/@oxc-project-types-npm-0.101.0-8e969d93d4-43a29933af.zip new file mode 100644 index 000000000..aeb9b821b Binary files /dev/null and b/.yarn/cache/@oxc-project-types-npm-0.101.0-8e969d93d4-43a29933af.zip differ diff --git a/.yarn/cache/@oxc-project-types-npm-0.107.0-b3e2180afb-6b31078ddc.zip b/.yarn/cache/@oxc-project-types-npm-0.107.0-b3e2180afb-6b31078ddc.zip new file mode 100644 index 000000000..53f869f7e Binary files /dev/null and b/.yarn/cache/@oxc-project-types-npm-0.107.0-b3e2180afb-6b31078ddc.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-beta.53-81c8545753-10.zip b/.yarn/cache/@rolldown-binding-darwin-arm64-npm-1.0.0-beta.53-81c8545753-10.zip new file mode 100644 index 000000000..840837c02 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-darwin-arm64-npm-1.0.0-beta.53-81c8545753-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-darwin-arm64-npm-1.0.0-beta.59-f99f338da2-10.zip b/.yarn/cache/@rolldown-binding-darwin-arm64-npm-1.0.0-beta.59-f99f338da2-10.zip new file mode 100644 index 000000000..f3d008e73 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-darwin-arm64-npm-1.0.0-beta.59-f99f338da2-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-darwin-x64-npm-1.0.0-beta.53-afe78a815c-10.zip b/.yarn/cache/@rolldown-binding-darwin-x64-npm-1.0.0-beta.53-afe78a815c-10.zip new file mode 100644 index 000000000..cfd2f6b0d Binary files /dev/null and b/.yarn/cache/@rolldown-binding-darwin-x64-npm-1.0.0-beta.53-afe78a815c-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-darwin-x64-npm-1.0.0-beta.59-be43460fae-10.zip b/.yarn/cache/@rolldown-binding-darwin-x64-npm-1.0.0-beta.59-be43460fae-10.zip new file mode 100644 index 000000000..f267ccea4 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-darwin-x64-npm-1.0.0-beta.59-be43460fae-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-arm64-gnu-npm-1.0.0-beta.53-5250bb6f3b-10.zip b/.yarn/cache/@rolldown-binding-linux-arm64-gnu-npm-1.0.0-beta.53-5250bb6f3b-10.zip new file mode 100644 index 000000000..42ef9f681 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-arm64-gnu-npm-1.0.0-beta.53-5250bb6f3b-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-arm64-gnu-npm-1.0.0-beta.59-f67f87e5f4-10.zip b/.yarn/cache/@rolldown-binding-linux-arm64-gnu-npm-1.0.0-beta.59-f67f87e5f4-10.zip new file mode 100644 index 000000000..c7a510e2e Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-arm64-gnu-npm-1.0.0-beta.59-f67f87e5f4-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-arm64-musl-npm-1.0.0-beta.53-1bf300c71a-10.zip b/.yarn/cache/@rolldown-binding-linux-arm64-musl-npm-1.0.0-beta.53-1bf300c71a-10.zip new file mode 100644 index 000000000..b6ffae765 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-arm64-musl-npm-1.0.0-beta.53-1bf300c71a-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-arm64-musl-npm-1.0.0-beta.59-61ab96801a-10.zip b/.yarn/cache/@rolldown-binding-linux-arm64-musl-npm-1.0.0-beta.59-61ab96801a-10.zip new file mode 100644 index 000000000..0e130b761 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-arm64-musl-npm-1.0.0-beta.59-61ab96801a-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-x64-gnu-npm-1.0.0-beta.53-b563c726f2-10.zip b/.yarn/cache/@rolldown-binding-linux-x64-gnu-npm-1.0.0-beta.53-b563c726f2-10.zip new file mode 100644 index 000000000..79c0447db Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-x64-gnu-npm-1.0.0-beta.53-b563c726f2-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-x64-gnu-npm-1.0.0-beta.59-0308fe446a-10.zip b/.yarn/cache/@rolldown-binding-linux-x64-gnu-npm-1.0.0-beta.59-0308fe446a-10.zip new file mode 100644 index 000000000..0418e7e8d Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-x64-gnu-npm-1.0.0-beta.59-0308fe446a-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-x64-musl-npm-1.0.0-beta.53-768a82203f-10.zip b/.yarn/cache/@rolldown-binding-linux-x64-musl-npm-1.0.0-beta.53-768a82203f-10.zip new file mode 100644 index 000000000..cefd35fdc Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-x64-musl-npm-1.0.0-beta.53-768a82203f-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-linux-x64-musl-npm-1.0.0-beta.59-c81f98a32d-10.zip b/.yarn/cache/@rolldown-binding-linux-x64-musl-npm-1.0.0-beta.59-c81f98a32d-10.zip new file mode 100644 index 000000000..a1213eb4d Binary files /dev/null and b/.yarn/cache/@rolldown-binding-linux-x64-musl-npm-1.0.0-beta.59-c81f98a32d-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-win32-arm64-msvc-npm-1.0.0-beta.53-3931203b8e-10.zip b/.yarn/cache/@rolldown-binding-win32-arm64-msvc-npm-1.0.0-beta.53-3931203b8e-10.zip new file mode 100644 index 000000000..f21e9dc0c Binary files /dev/null and b/.yarn/cache/@rolldown-binding-win32-arm64-msvc-npm-1.0.0-beta.53-3931203b8e-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-win32-arm64-msvc-npm-1.0.0-beta.59-dd2c1034e9-10.zip b/.yarn/cache/@rolldown-binding-win32-arm64-msvc-npm-1.0.0-beta.59-dd2c1034e9-10.zip new file mode 100644 index 000000000..e7442b623 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-win32-arm64-msvc-npm-1.0.0-beta.59-dd2c1034e9-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-win32-x64-msvc-npm-1.0.0-beta.53-217f392378-10.zip b/.yarn/cache/@rolldown-binding-win32-x64-msvc-npm-1.0.0-beta.53-217f392378-10.zip new file mode 100644 index 000000000..fa7ecd435 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-win32-x64-msvc-npm-1.0.0-beta.53-217f392378-10.zip differ diff --git a/.yarn/cache/@rolldown-binding-win32-x64-msvc-npm-1.0.0-beta.59-ecf18ffcc8-10.zip b/.yarn/cache/@rolldown-binding-win32-x64-msvc-npm-1.0.0-beta.59-ecf18ffcc8-10.zip new file mode 100644 index 000000000..cb8d0fc92 Binary files /dev/null and b/.yarn/cache/@rolldown-binding-win32-x64-msvc-npm-1.0.0-beta.59-ecf18ffcc8-10.zip differ diff --git a/.yarn/cache/@rolldown-pluginutils-npm-1.0.0-beta.53-0e2b6fa8ac-09dab7cbff.zip b/.yarn/cache/@rolldown-pluginutils-npm-1.0.0-beta.53-0e2b6fa8ac-09dab7cbff.zip new file mode 100644 index 000000000..be8dcec4e Binary files /dev/null and b/.yarn/cache/@rolldown-pluginutils-npm-1.0.0-beta.53-0e2b6fa8ac-09dab7cbff.zip differ diff --git a/.yarn/cache/@rolldown-pluginutils-npm-1.0.0-beta.59-e7d5cc666f-c09c2105d1.zip b/.yarn/cache/@rolldown-pluginutils-npm-1.0.0-beta.59-e7d5cc666f-c09c2105d1.zip new file mode 100644 index 000000000..bacbb84a7 Binary files /dev/null and b/.yarn/cache/@rolldown-pluginutils-npm-1.0.0-beta.59-e7d5cc666f-c09c2105d1.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-2.2.0-8d8a4e9bb7-82cf2a8c2d.zip b/.yarn/cache/ast-kit-npm-2.2.0-8d8a4e9bb7-82cf2a8c2d.zip new file mode 100644 index 000000000..cdccb81cc Binary files /dev/null and b/.yarn/cache/ast-kit-npm-2.2.0-8d8a4e9bb7-82cf2a8c2d.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.2-538b84c387-2d202db5e5.zip b/.yarn/cache/commander-npm-14.0.2-538b84c387-2d202db5e5.zip new file mode 100644 index 000000000..df1ef15be Binary files /dev/null and b/.yarn/cache/commander-npm-14.0.2-538b84c387-2d202db5e5.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.9.0-37940aa6dc-2d8249cc82.zip b/.yarn/cache/framer-plugin-npm-3.9.0-37940aa6dc-2d8249cc82.zip new file mode 100644 index 000000000..c25e796ca Binary files /dev/null and b/.yarn/cache/framer-plugin-npm-3.9.0-37940aa6dc-2d8249cc82.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-5.5.3-82b0342097-c6cec06f69.zip b/.yarn/cache/hookable-npm-5.5.3-82b0342097-c6cec06f69.zip new file mode 100644 index 000000000..161d861d3 Binary files /dev/null and b/.yarn/cache/hookable-npm-5.5.3-82b0342097-c6cec06f69.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-beta.53-db59d0aaea-40713f7a30.zip b/.yarn/cache/rolldown-npm-1.0.0-beta.53-db59d0aaea-40713f7a30.zip new file mode 100644 index 000000000..04429b8c8 Binary files /dev/null and b/.yarn/cache/rolldown-npm-1.0.0-beta.53-db59d0aaea-40713f7a30.zip differ diff --git a/.yarn/cache/rolldown-npm-1.0.0-beta.59-67c51c4a69-f3d3eea185.zip b/.yarn/cache/rolldown-npm-1.0.0-beta.59-67c51c4a69-f3d3eea185.zip new file mode 100644 index 000000000..628f42a9a Binary files /dev/null and b/.yarn/cache/rolldown-npm-1.0.0-beta.59-67c51c4a69-f3d3eea185.zip differ diff --git a/.yarn/cache/rolldown-plugin-dts-npm-0.18.4-b1bc8cfadd-d6157bdfa7.zip b/.yarn/cache/rolldown-plugin-dts-npm-0.18.4-b1bc8cfadd-d6157bdfa7.zip new file mode 100644 index 000000000..247e1a297 Binary files /dev/null and b/.yarn/cache/rolldown-plugin-dts-npm-0.18.4-b1bc8cfadd-d6157bdfa7.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.17.4-ea0f38adf5-1fe104c1e0.zip b/.yarn/cache/tsdown-npm-0.17.4-ea0f38adf5-1fe104c1e0.zip new file mode 100644 index 000000000..a8d97eea9 Binary files /dev/null and b/.yarn/cache/tsdown-npm-0.17.4-ea0f38adf5-1fe104c1e0.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.24-90e69b0b95-0532c89afa.zip b/.yarn/cache/unrun-npm-0.2.24-90e69b0b95-0532c89afa.zip new file mode 100644 index 000000000..8a85528e2 Binary files /dev/null and b/.yarn/cache/unrun-npm-0.2.24-90e69b0b95-0532c89afa.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..cacb3ea4b --- /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.2", + "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.17.4", + "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..1655ef9e3 --- /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.js" +import { filterEchoedFiles } from "./helpers/files.js" +import { createHashTracker } from "./utils/hash-tracker.js" + +// 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 98251554a..07f21ded7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -51,6 +51,26 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.28.5": + version: 7.28.6 + resolution: "@babel/generator@npm:7.28.6" + dependencies: + "@babel/parser": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10/ef2af927e8e0985d02ec4321a242da761a934e927539147c59fdd544034dc7f0e9846f6bf86209aca7a28aee2243ed0fad668adccd48f96d7d6866215173f9af + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10/0ae29cc2005084abdae2966afdb86ed14d41c9c37db02c3693d5022fba9f5d59b011d039380b8e537c34daf117c549f52b452398f576e908fb9db3c7abbb3a00 + 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 +78,24 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 10/8e5d9b0133702cfacc7f368bf792f0f8ac0483794877c6dca5fcb73810ee138e27527701826fb58a40a004f3a5ec0a2f3c3dd5e326d262530b119918f3132ba7 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.28.5, @babel/parser@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/parser@npm:7.28.6" + dependencies: + "@babel/types": "npm:^7.28.6" + bin: + parser: ./bin/babel-parser.js + checksum: 10/483a6fb5f9876ec9cbbb98816f2c94f39ae4d1158d35f87e1c4bf19a1f56027c96a1a3962ff0c8c46e8322a6d9e1c80d26b7f9668410df13d5b5769d9447b010 + languageName: node + linkType: hard + "@babel/runtime@npm:^7.12.5": version: 7.27.6 resolution: "@babel/runtime@npm:7.27.6" @@ -65,6 +103,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/types@npm:7.28.6" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.28.5" + checksum: 10/f9c6e52b451065aae5654686ecfc7de2d27dd0fbbc204ee2bd912a71daa359521a32f378981b1cf333ace6c8f86928814452cb9f388a7da59ad468038deb6b5f + languageName: node + linkType: hard + "@biomejs/biome@npm:^2.2.4": version: 2.2.4 resolution: "@biomejs/biome@npm:2.2.4" @@ -156,6 +204,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 +223,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 +242,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 +267,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 +281,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 +295,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 +309,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 +323,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 +337,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 +351,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 +365,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 +379,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 +393,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 +407,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 +421,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 +435,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 +449,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 +463,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 +477,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 +491,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 +505,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 +519,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 +533,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 +547,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 +561,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 +575,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 +589,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 +603,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 +617,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 +859,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 +904,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 +921,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 +942,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^1.1.0, @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 +1009,20 @@ __metadata: languageName: node linkType: hard +"@oxc-project/types@npm:=0.101.0": + version: 0.101.0 + resolution: "@oxc-project/types@npm:0.101.0" + checksum: 10/43a29933af8d29ed71e5c3f9d5bc23e41c629ed2a00bb53b661c278d6d64771caff8879047cad11ce511868eaeb16da9b132fd1d856bcda258eba91b9296cb32 + languageName: node + linkType: hard + +"@oxc-project/types@npm:=0.107.0": + version: 0.107.0 + resolution: "@oxc-project/types@npm:0.107.0" + checksum: 10/6b31078ddcb4c7c45d9f222d7b7d8a8af8ea9f53e05a2ab6caedc149282f4e701c903869ca3502392ca9aba7bb06f570b620bc0ad7aee64e46e51b36dc78d34d + 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 +1054,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 +2380,192 @@ __metadata: languageName: node linkType: hard +"@rolldown/binding-android-arm64@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0-beta.53" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-android-arm64@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0-beta.59" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-arm64@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-beta.53" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-arm64@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-beta.59" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-x64@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-beta.53" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-x64@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-beta.59" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-freebsd-x64@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-beta.53" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-freebsd-x64@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-beta.59" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.53" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-beta.59" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.53" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-beta.59" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.53" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-beta.59" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.53" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-beta.59" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.53" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-beta.59" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-openharmony-arm64@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-beta.53" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-openharmony-arm64@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-beta.59" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.53" + dependencies: + "@napi-rs/wasm-runtime": "npm:^1.1.0" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-beta.59" + 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-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.53" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-beta.59" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.53" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-beta.59" + 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 +2573,20 @@ __metadata: languageName: node linkType: hard +"@rolldown/pluginutils@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/pluginutils@npm:1.0.0-beta.53" + checksum: 10/09dab7cbff3143838310a003ea5e453b219b27d00f34a88efe4c0c4d2540f16d95b770db2be111a424d51947dc3a3598798124e3f3622a99337f7a7c3f6913b2 + languageName: node + linkType: hard + +"@rolldown/pluginutils@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "@rolldown/pluginutils@npm:1.0.0-beta.59" + checksum: 10/c09c2105d1a929798daca2e6bbf21a2663d2ac1c9ad0434ac39605fdc4dcf069ba4ec60921b1b72b9d3aaba653dedb7fadd9b5de7da5e5df36950cbe83cc16ce + 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 +3142,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: @@ -2773,6 +3285,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 +3359,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 +3505,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 +3539,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 +3572,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 +3600,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 +3620,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 +3641,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 +3661,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 +3696,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 +3810,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" @@ -3259,6 +3885,16 @@ __metadata: languageName: node linkType: hard +"ast-kit@npm:^2.2.0": + version: 2.2.0 + resolution: "ast-kit@npm:2.2.0" + dependencies: + "@babel/parser": "npm:^7.28.5" + pathe: "npm:^2.0.3" + checksum: 10/82cf2a8c2d5eadce177a62c1461b7374be5269e6d771e67d83f99d89ad5f75a4c3ba1d3bd71c931a2ecca061769240ed7968ddcee581697e7304375135ab2106 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -3309,6 +3945,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" @@ -3439,6 +4082,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" @@ -3489,6 +4139,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" @@ -3559,6 +4218,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.9.0" + 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" @@ -3638,6 +4310,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^14.0.2": + version: 14.0.2 + resolution: "commander@npm:14.0.2" + checksum: 10/2d202db5e5f9bb770112a3c1579b893d17ac6f6d932183077308bdd96d0f87f0bbe6a68b5b9ed2cf3b2514be6bb7de637480703c0e2db9741ee1b383237deb26 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -3853,6 +4532,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" @@ -3985,6 +4671,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" @@ -4013,6 +4711,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" @@ -4192,6 +4897,95 @@ __metadata: 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 + "escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -4364,6 +5158,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" @@ -4540,6 +5341,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.2" + prettier: "npm:^3.7.4" + tsdown: "npm:^0.17.4" + 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" @@ -4603,6 +5425,16 @@ __metadata: languageName: node linkType: hard +"framer-plugin@npm:3.9.0": + version: 3.9.0 + resolution: "framer-plugin@npm:3.9.0" + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + checksum: 10/2d8249cc82faadd57880e3fec97db7b3ed7aba5b8e80beb6c250ddf773e0d09265dc0990569bc898b193b790320b7ae89a71fa981c269ff685a3c465f8520713 + languageName: node + linkType: hard + "framer-plugin@npm:^3.6.0": version: 3.6.0 resolution: "framer-plugin@npm:3.6.0" @@ -4682,6 +5514,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" @@ -4851,6 +5692,13 @@ __metadata: languageName: node linkType: hard +"hookable@npm:^5.5.3": + version: 5.5.3 + resolution: "hookable@npm:5.5.3" + checksum: 10/c6cec06f693e99a8f8ebd55592efc68042b472a4a04522dde384620d9a2cd7f422003357bf5688525f4bb14454bb0e4188a26db847fb1f1e06875958dfc61cde + languageName: node + linkType: hard + "htmlparser2@npm:^10.0.0": version: 10.0.0 resolution: "htmlparser2@npm:10.0.0" @@ -4958,6 +5806,13 @@ __metadata: languageName: node linkType: hard +"import-without-cache@npm:^0.2.3": + 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" @@ -5094,6 +5949,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" @@ -5336,6 +6200,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" @@ -5685,6 +6558,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" @@ -5971,6 +6851,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" @@ -6038,6 +6927,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" @@ -6331,6 +7227,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" @@ -6449,6 +7352,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" @@ -6463,6 +7373,142 @@ __metadata: languageName: node linkType: hard +"rolldown-plugin-dts@npm:^0.18.3": + version: 0.18.4 + resolution: "rolldown-plugin-dts@npm:0.18.4" + dependencies: + "@babel/generator": "npm:^7.28.5" + "@babel/parser": "npm:^7.28.5" + "@babel/types": "npm:^7.28.5" + ast-kit: "npm:^2.2.0" + birpc: "npm:^4.0.0" + dts-resolver: "npm:^2.1.3" + get-tsconfig: "npm:^4.13.0" + magic-string: "npm:^0.30.21" + 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.51 + typescript: ^5.0.0 + vue-tsc: ~3.1.0 + peerDependenciesMeta: + "@ts-macro/tsc": + optional: true + "@typescript/native-preview": + optional: true + typescript: + optional: true + vue-tsc: + optional: true + checksum: 10/d6157bdfa742272550314b530468c937cf621ad9292b85b0b158ae6f02ac936e739935ff8dd4ca1070a77eb3f52cc8a00e3a4cf6da1c8d0fc470574070cbf620 + languageName: node + linkType: hard + +"rolldown@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "rolldown@npm:1.0.0-beta.53" + dependencies: + "@oxc-project/types": "npm:=0.101.0" + "@rolldown/binding-android-arm64": "npm:1.0.0-beta.53" + "@rolldown/binding-darwin-arm64": "npm:1.0.0-beta.53" + "@rolldown/binding-darwin-x64": "npm:1.0.0-beta.53" + "@rolldown/binding-freebsd-x64": "npm:1.0.0-beta.53" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-beta.53" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-beta.53" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-beta.53" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-beta.53" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0-beta.53" + "@rolldown/binding-openharmony-arm64": "npm:1.0.0-beta.53" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0-beta.53" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-beta.53" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-beta.53" + "@rolldown/pluginutils": "npm:1.0.0-beta.53" + 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/40713f7a30061a01dd9f921e5aeff7ca7bf17adb0b10b57e742e805f95a8e89862d35731c89f296ffc92716ce02d9b9d4ba13d7a0e888b806e5625e5400855ed + languageName: node + linkType: hard + +"rolldown@npm:1.0.0-beta.59": + version: 1.0.0-beta.59 + resolution: "rolldown@npm:1.0.0-beta.59" + dependencies: + "@oxc-project/types": "npm:=0.107.0" + "@rolldown/binding-android-arm64": "npm:1.0.0-beta.59" + "@rolldown/binding-darwin-arm64": "npm:1.0.0-beta.59" + "@rolldown/binding-darwin-x64": "npm:1.0.0-beta.59" + "@rolldown/binding-freebsd-x64": "npm:1.0.0-beta.59" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-beta.59" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-beta.59" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-beta.59" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-beta.59" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0-beta.59" + "@rolldown/binding-openharmony-arm64": "npm:1.0.0-beta.59" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0-beta.59" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-beta.59" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-beta.59" + "@rolldown/pluginutils": "npm:1.0.0-beta.59" + 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/f3d3eea18516bb6ed4e957b70e3829f03193e7addb22d722e92074c219250454642efd41ee1498c8c766e428dc5a51d7de67ff704181e051deaf7c9c5b5ebaa5 + languageName: node + linkType: hard + "rollup@npm:^4.43.0": version: 4.50.2 resolution: "rollup@npm:4.50.2" @@ -6600,6 +7646,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" @@ -6699,6 +7754,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 +7932,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 +7963,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 +8000,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 +8025,51 @@ __metadata: languageName: node linkType: hard +"tsdown@npm:^0.17.4": + version: 0.17.4 + resolution: "tsdown@npm:0.17.4" + dependencies: + ansis: "npm:^4.2.0" + cac: "npm:^6.7.14" + defu: "npm:^6.1.4" + empathic: "npm:^2.0.0" + hookable: "npm:^5.5.3" + import-without-cache: "npm:^0.2.3" + obug: "npm:^2.1.1" + rolldown: "npm:1.0.0-beta.53" + rolldown-plugin-dts: "npm:^0.18.3" + 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.19" + peerDependencies: + "@arethetypeswrong/core": ^0.18.1 + "@vitejs/devtools": ^0.0.0-alpha.19 + 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/1fe104c1e0297177774c9e46a0bdbaa17526509c74161b4fe3d7d30468eab509528055a2b24427b57ac8d0aad4e84e87388195b929aec6c1419d903829ba6d63 + 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 +8077,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 +8198,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 +8218,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 +8277,22 @@ __metadata: languageName: node linkType: hard +"unrun@npm:^0.2.19": + version: 0.2.24 + resolution: "unrun@npm:0.2.24" + dependencies: + rolldown: "npm:1.0.0-beta.59" + peerDependencies: + synckit: ^0.11.11 + peerDependenciesMeta: + synckit: + optional: true + bin: + unrun: dist/cli.mjs + checksum: 10/0532c89afad69e393271a67b7dc04ca76a8a615bae36b8e01f1bfcb7230c1e62759e41c264c145177b7a46365199b015ba9accaa1136bf128e491c5b4811484a + languageName: node + linkType: hard + "unsplash@workspace:plugins/unsplash": version: 0.0.0-use.local resolution: "unsplash@workspace:plugins/unsplash" @@ -7324,6 +8516,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 +8682,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 +8857,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"