diff --git a/.github/workflows/ninja_i18n.yml b/.github/workflows/ninja_i18n.yml new file mode 100644 index 0000000..9a7bb77 --- /dev/null +++ b/.github/workflows/ninja_i18n.yml @@ -0,0 +1,21 @@ +name: Ninja i18n action + +on: pull_request_target + +# explicitly configure permissions, in case your GITHUB_TOKEN workflow permissions are set to read-only in repository settings +permissions: + pull-requests: write # Necessary to comment on PRs + issues: read # Necessary to read issue comments + contents: read # Necessary to access the repo content + +jobs: + ninja-i18n: + name: Ninja i18n - GitHub Lint Action + runs-on: ubuntu-latest + + steps: + - name: Run Ninja i18n + # @main ensures that the latest version of the action is used + uses: opral/ninja-i18n-action@main + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..629f094 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["inlang.vs-code-extension"] +} diff --git a/messages/en.json b/messages/en.json new file mode 100644 index 0000000..587a02a --- /dev/null +++ b/messages/en.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "transcript": "Real-time Transcription", + "Itanalysis": "Intelligent Analysis", + "educational": "Educational Focus", + "tr_details": "Capture every valuable insight from your discussions with our advanced speech-to-text technology.", + "ia_details": "Get AI-powered insights and suggestions to improve discussion quality and participation.", + "ef_details": "Purpose-built for educational environments with features that support meaningful learning.", + "Ai_describe": "Our AI-powered system emphasizes student-led discussions while providing structured guidance, making it easier for teachers to direct learning and analyze outcomes.", + "intro": "Hinagiku helps educators facilitate more engaging and productive discussions through real-time transcription and intelligent analysis.", + "welcome": "Welcome to Hinagiku!", + "profile": "Profile", + "dashboard": "Go to Dashboard", + "signOut": "Sign out", + "login": "Login", + "started": "Get Started", + "learn": "Learn More", + "whyChoose": "Why Choose Hinagiku?", + "whyChooseDesc": "Our platform combines cutting-edge technology with educational expertise to enhance learning outcomes.", + "howItWorks": "How It Works", + "howItWorksDesc": "Hinagiku enhances the Think-Pair-Share learning technique with AI assistance throughout the entire process.", + "preparation": "1. Preparation", + "preparationDesc": "Teachers create discussion templates and set up dynamic timelines for structured learning sessions.", + "joinSession": "2. Join Session", + "joinSessionDesc": "Students easily join discussions by scanning a session QR code, then form or join groups.", + "discussion": "3. Discussion", + "discussionDesc": "AI assists in guiding individual reflection, group discussions, and helps maintain focus on the topic.", + "analysis": "4. Analysis", + "analysisDesc": "Get visual summaries and insights from discussions to understand class perspectives and engagement.", + "communityDriven": "Community-Driven Templates", + "communityDrivenDesc": "Access and share discussion templates with educators worldwide. Build upon proven discussion frameworks or contribute your own.", + "browseTemplates": "Browse public templates from experienced educators", + "forkTemplates": "Fork and customize existing templates for your needs", + "shareTemplates": "Share your successful discussion formats with the community", + "collaborateTemplates": "Collaborate with other educators to improve templates", + "exploreTemplates": "Explore Templates", + "storyBehind": "The Story Behind Our Name", + "storyBehindDesc": "Hinagiku (雛菊), or Daisy in English, is an intelligent system designed to support discussions in educational environments.", + "realTime": "One of Hinagiku's key features is its real-time voice transcription and analysis, which helps hosts provide timely and insightful feedback, setting it apart from other educational tools.", + "coreValues": "We chose the name Hinagiku because it reflects our core values: resilience, simplicity, and growth—much like the daisy flower itself, which flourishes in diverse conditions.", + "mission": "Our mission is to help participants and hosts connect meaningfully by providing tools that facilitate better communication and collaboration in classrooms.", + "openSource": "Open Source", + "openSourceDesc": "Hinagiku is open source and available on GitHub. We welcome contributions from the community!" +} diff --git a/messages/zh.json b/messages/zh.json new file mode 100644 index 0000000..9031275 --- /dev/null +++ b/messages/zh.json @@ -0,0 +1,45 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "transcript": "即時轉錄", + "Itanalysis": "智慧分析", + "educational": "教育焦點", + "tr_details": "使用我們先進的語音轉文字技術捕獲討論中的每一個寶貴見解。", + "ia_details": "獲取AI提供的見解和建議,以提高討論品質和參與度。", + "ef_details": "專為教育環境而設計,具被助於有效學習的功能。", + "Ai_describe": "我們的AI系統強調學生主導的討論,同時提供結構化指導,使教師更容易引導學習並分析結果。", + "intro": "Hinagiku透過即時轉錄和智慧分析幫助教育工作者促進更具吸引力和生產力的討論。", + "welcome": "歡迎來到Hinagiku!", + "profile": "個人資料", + "dashboard": "儀表板", + "signOut": "登出", + "login": "登入", + "started": "開始使用", + "learn": "了解更多", + "whyChoose": "為什麼選擇Hinagiku?", + "whyChooseDesc": "我們的平台結合了尖端技術和教育專業知識,以提高學習成果。", + "howItWorks": "它是如何工作的", + "howItWorksDesc": "Hinagiku在整個過程中通過AI輔助增強了Think-Pair-Share學習技術。", + "preparation": "1. 準備", + "preparationDesc": "教師創建討論模板並設置動態時間表以進行結構化學習會話。", + "joinSession": "2. 加入會話", + "joinSessionDesc": "學生通過掃描會話二維碼輕鬆加入討論,然後組建或加入小組。", + "discussion": "3. 討論", + "discussionDesc": "AI協助指導個人反思、小組討論,並幫助保持對主題的關注。", + "analysis": "4. 分析", + "analysisDesc": "從討論中獲取視覺摘要和見解,以了解班級的觀點和參與度。", + "communityDriven": "社區驅動的模板", + "communityDrivenDesc": "訪問並分享來自全球教育工作者的討論模板。在經過驗證的討論框架上進行構建或貢獻您自己的模板。", + "browseTemplates": "瀏覽來自經驗豐富的教育工作者的公共模板", + "forkTemplates": "分叉並自定義現有模板以滿足您的需求", + "shareTemplates": "與社區分享您成功的討論格式", + "collaborateTemplates": "與其他教育工作者合作改進模板", + "exploreTemplates": "探索模板", + "storyBehind": "我們名字背後的故事", + "storyBehindDesc": "Hinagiku(雛菊),或英文中的Daisy,是一個旨在支持教育環境中討論的智能系統。", + "realTime": "Hinagiku的一個關鍵功能是其實時語音轉錄和分析,這有助於主持人提供及時和有見地的反饋,使其與其他教育工具區分開來。", + "coreValues": "我們選擇Hinagiku這個名字是因為它反映了我們的核心價值觀:韌性、簡單和成長——就像雛菊花一樣,在不同的條件下茁壯成長。", + "mission": "我們的使命是通過提供促進更好溝通和協作的工具,幫助參與者和主持人有意義地聯繫。", + "openSource": "開源", + "openSourceDesc": "Hinagiku是開源的,並在GitHub上可用。我們歡迎社區的貢獻!", + "viewOnGitHub": "在GitHub上查看" +} diff --git a/package.json b/package.json index b82425d..5eb337b 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,8 @@ "vite": "^5.4.14", "vite-plugin-static-copy": "^2.2.0", "vitest": "^2.1.9", - "zod": "^3.24.2" + "zod": "^3.24.2", + "@inlang/paraglide-js": "1.11.8" }, "lint-staged": { "*.{yml,yaml,json,js,ts,css,html,svelte}": [ @@ -85,5 +86,8 @@ "eslint --fix" ] }, - "packageManager": "pnpm@9.15.1" + "packageManager": "pnpm@9.15.1", + "dependencies": { + "@inlang/paraglide-sveltekit": "0.15.5" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8dbf7c2..6bb254d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,6 +6,10 @@ settings: importers: .: + dependencies: + '@inlang/paraglide-sveltekit': + specifier: 0.15.5 + version: 0.15.5(@sveltejs/kit@2.17.2(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.20.1)(vite@5.4.14(@types/node@22.13.4)))(svelte@5.20.1)(vite@5.4.14(@types/node@22.13.4)))(debug@4.4.0) devDependencies: '@aws-sdk/client-s3': specifier: ^3.749.0 @@ -28,6 +32,9 @@ importers: '@hinagiku/ffmpeg-core': specifier: 0.12.6-pcm-mpeg-only version: 0.12.6-pcm-mpeg-only + '@inlang/paraglide-js': + specifier: 1.11.8 + version: 1.11.8(debug@4.4.0) '@ricky0123/vad-web': specifier: ^0.0.22 version: 0.0.22 @@ -1748,6 +1755,145 @@ packages: } engines: { node: '>=18.18' } + '@inlang/detect-json-formatting@1.0.0': + resolution: + { + integrity: sha512-o0jeI8U4TgNlsPwI0y92jld8/18Loh2KEgHCYCJ42rCOdxFrA8R60cydlEd2/6jkdHFn5DxKj8rOyiKv3z9uOw== + } + + '@inlang/json-types@1.1.0': + resolution: + { + integrity: sha512-n6vS6AqETsCFbV4TdBvR/EH57waVXzKsMqeUQ+eH2Q6NUATfKhfLabgNms2A+QV3aedH/hLtb1pRmjl2ykBVZg== + } + peerDependencies: + '@sinclair/typebox': ^0.31.0 + + '@inlang/language-tag@1.5.1': + resolution: + { + integrity: sha512-+NlYDxDvN5h/TKUmkuQv+Ct1flxaVRousCbek7oFEk3/afZPVLNTJhm+cX2xiOg3tmi2KKrBLfy/V9oUDHj6GQ== + } + + '@inlang/message-lint-rule@1.4.7': + resolution: + { + integrity: sha512-FCiFe/H25fqhsIb/YTb0K7eDJqEYzdr6ectF0xG4zARiS7nXz0FHxk2niJrIO8kFkB4mx6tszsgQ0xqD5cHQag== + } + peerDependencies: + '@sinclair/typebox': ^0.31.17 + + '@inlang/message@2.1.0': + resolution: + { + integrity: sha512-Gr3wiErI7fW4iW11xgZzsJEUTjlZuz02fB/EO+ENTBlSHGyI1kzbCCeNqLr1mnGdQYiOxfuZxY0S4G5C6Pju3Q== + } + peerDependencies: + '@sinclair/typebox': ^0.31.17 + + '@inlang/module@1.2.14': + resolution: + { + integrity: sha512-Z7rRa6x3RkzjdvNA7x+KskNGdSBEO46X9c7bTl6eZmLXy0J9yGDn6s4jpYqQzyKRG8g5mEqWcRqcVqdNwzj5Gg== + } + peerDependencies: + '@sinclair/typebox': ^0.31.17 + + '@inlang/paraglide-js@1.11.8': + resolution: + { + integrity: sha512-PxzrmDP63fbMNF4/AtiLFTnUodFxVbOkLpIrOzPZvNuLg0wCWnsaBfNT87/rNjL/A7ZPzEBmuDi0P2pn8iB0Fw== + } + hasBin: true + + '@inlang/paraglide-sveltekit@0.15.5': + resolution: + { + integrity: sha512-6xLbZJAYbJBiXXriy+cCq4+SJ1u8vCIrom7m7akxNuG1G6F0kko3OTyMrouDca9WYR1+XD+uynn3wa5+LWTLTg== + } + hasBin: true + peerDependencies: + '@sveltejs/kit': ^2.4.3 + + '@inlang/paraglide-unplugin@1.9.5': + resolution: + { + integrity: sha512-5KklLBvl/y+R4SccWH74USTGQNFW5IwEyMLQ3WIHX9cHX2pnnA5wGqQxYg3EcgCyErHLc3+sm7EMNB5Z0dSeTg== + } + + '@inlang/paraglide-vite@1.3.5': + resolution: + { + integrity: sha512-yLa+gxA8el6RXXneeiqTnV9Od4Yh389lA+wSfiS+jDXY5vV/2j7Lpk2yuATLmxwI9i2nMP6c6yu8L0X77PA9dg== + } + + '@inlang/plugin-message-format@2.2.0': + resolution: + { + integrity: sha512-6MJLExr3OLqbR8gCP4UEgNMgdaJFFCug2GLmFwid7Ana4kObnbCA33YN3m3eN8p+lmnv7zpfW7oeyTZXZLoptg== + } + + '@inlang/plugin@2.4.14': + resolution: + { + integrity: sha512-HFI1t1tKs6jXqwKVl59vvt7kvMgg2Po7xA3IFijfJTZCt0tTI8txqeXCUV9jhUop29Hqj6a5zQd32BYv33Dulw== + } + peerDependencies: + '@sinclair/typebox': ^0.31.17 + + '@inlang/project-settings@2.4.2': + resolution: + { + integrity: sha512-Okus2JdwTzNebZHkXCrUH/zIWwqu7kWm/ZQaM6a31oRIEA2JdQJtyNGM8E/KrwGfEuq18U+WV03+tR3tkwsGvA== + } + peerDependencies: + '@sinclair/typebox': ^0.31.17 + + '@inlang/recommend-ninja@0.1.1': + resolution: + { + integrity: sha512-dthW8SA6LHUhPFXwKxYy92PG4dg4KeIS0jbgpplXxgoQAeouP6DHEa87kva2DXbk3kUbNz+/MFPjyaygBfamog== + } + + '@inlang/recommend-sherlock@0.1.1': + resolution: + { + integrity: sha512-8qZ8FJ/QqVh6YqKmHo3SxI4ENM0O80TCzETm+hxeQ2JzPKPFYucFINpLvUygiLFp/hJwhoI5TjRz6jNI2QdfMQ== + } + + '@inlang/result@1.1.0': + resolution: + { + integrity: sha512-zLGroi9EUiHuOjUOaglUVTFO7EWdo2OARMJLBO1Q5Ga/xJmSQb6XS1lhqEXBFAjgFarfEMX5YEJWWALogYV3wA== + } + + '@inlang/sdk@0.36.3': + resolution: + { + integrity: sha512-wjsavc44H24v74tdEQ13FqZZcr43T106oEfHJnBLzEP55Zz2JJWABLund+DEdosZx+9E8mJBEW5JlVnlBwP3Zw== + } + engines: { node: '>=18.0.0' } + + '@inlang/sdk@0.36.4': + resolution: + { + integrity: sha512-fTr0mkDx2ViZt/8lxaF9Mxj3m8LaqIhcjMJy+CdHREMc9UvpUhGLB7elMp061YysxnN1CFccAgLRug5VWK3yWw== + } + engines: { node: '>=18.0.0' } + + '@inlang/sdk@0.37.0': + resolution: + { + integrity: sha512-/uG/9HrJU+v5jY/nWKZAlI3diD8WdT5bAYuIZ3rVsnphvqV4iWvQwAp3H/K8F5QDJ+GEY79mhKfFhHcKMSiWng== + } + engines: { node: '>=18.0.0' } + + '@inlang/translatable@1.3.1': + resolution: + { + integrity: sha512-VAtle21vRpIrB+axtHFrFB0d1HtDaaNj+lV77eZQTJyOWbTFYTVIQJ8WAbyw9eu4F6h6QC2FutLyxjMomxfpcQ== + } + '@isaacs/cliui@8.0.2': resolution: { @@ -1801,6 +1947,18 @@ packages: integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== } + '@lix-js/client@2.2.1': + resolution: + { + integrity: sha512-6DTJdRN2L2a1A8OxW1Wqh3ZOORqq8+YlCALMF5UMoxhfHE4Fcq9FZztMkAV+KwhrDSsp0USWvD9myG0XX+v6QQ== + } + + '@lix-js/fs@2.2.0': + resolution: + { + integrity: sha512-B9X3FjD8WmdG7tbA44JuniSO0KdKBWnjfxl8zpgrDCkavrp/GP7U0xxBkc0WgeeoHjQ/pkqq9VqtWB2kS9jIUg== + } + '@mapbox/node-pre-gyp@2.0.0': resolution: { @@ -1830,6 +1988,200 @@ packages: } engines: { node: '>= 8' } + '@octokit/app@14.1.0': + resolution: + { + integrity: sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw== + } + engines: { node: '>= 18' } + + '@octokit/auth-app@6.1.3': + resolution: + { + integrity: sha512-dcaiteA6Y/beAlDLZOPNReN3FGHu+pARD6OHfh3T9f3EO09++ec+5wt3KtGGSSs2Mp5tI8fQwdMOEnrzBLfgUA== + } + engines: { node: '>= 18' } + + '@octokit/auth-oauth-app@7.1.0': + resolution: + { + integrity: sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA== + } + engines: { node: '>= 18' } + + '@octokit/auth-oauth-device@6.1.0': + resolution: + { + integrity: sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw== + } + engines: { node: '>= 18' } + + '@octokit/auth-oauth-user@4.1.0': + resolution: + { + integrity: sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ== + } + engines: { node: '>= 18' } + + '@octokit/auth-token@4.0.0': + resolution: + { + integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== + } + engines: { node: '>= 18' } + + '@octokit/auth-unauthenticated@5.0.1': + resolution: + { + integrity: sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg== + } + engines: { node: '>= 18' } + + '@octokit/core@5.2.0': + resolution: + { + integrity: sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg== + } + engines: { node: '>= 18' } + + '@octokit/endpoint@9.0.6': + resolution: + { + integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw== + } + engines: { node: '>= 18' } + + '@octokit/graphql@7.1.0': + resolution: + { + integrity: sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ== + } + engines: { node: '>= 18' } + + '@octokit/oauth-app@6.1.0': + resolution: + { + integrity: sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g== + } + engines: { node: '>= 18' } + + '@octokit/oauth-authorization-url@6.0.2': + resolution: + { + integrity: sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA== + } + engines: { node: '>= 18' } + + '@octokit/oauth-methods@4.1.0': + resolution: + { + integrity: sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw== + } + engines: { node: '>= 18' } + + '@octokit/openapi-types@20.0.0': + resolution: + { + integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA== + } + + '@octokit/openapi-types@23.0.1': + resolution: + { + integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g== + } + + '@octokit/plugin-paginate-graphql@4.0.1': + resolution: + { + integrity: sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A== + } + engines: { node: '>= 18' } + peerDependencies: + '@octokit/core': '>=5' + + '@octokit/plugin-paginate-rest@9.2.2': + resolution: + { + integrity: sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ== + } + engines: { node: '>= 18' } + peerDependencies: + '@octokit/core': '5' + + '@octokit/plugin-rest-endpoint-methods@10.4.1': + resolution: + { + integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg== + } + engines: { node: '>= 18' } + peerDependencies: + '@octokit/core': '5' + + '@octokit/plugin-retry@6.1.0': + resolution: + { + integrity: sha512-WrO3bvq4E1Xh1r2mT9w6SDFg01gFmP81nIG77+p/MqW1JeXXgL++6umim3t6x0Zj5pZm3rXAN+0HEjmmdhIRig== + } + engines: { node: '>= 18' } + peerDependencies: + '@octokit/core': '5' + + '@octokit/plugin-throttling@8.2.0': + resolution: + { + integrity: sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ== + } + engines: { node: '>= 18' } + peerDependencies: + '@octokit/core': ^5.0.0 + + '@octokit/request-error@5.1.1': + resolution: + { + integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g== + } + engines: { node: '>= 18' } + + '@octokit/request@8.4.1': + resolution: + { + integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw== + } + engines: { node: '>= 18' } + + '@octokit/types@12.6.0': + resolution: + { + integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw== + } + + '@octokit/types@13.8.0': + resolution: + { + integrity: sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A== + } + + '@octokit/webhooks-methods@4.1.0': + resolution: + { + integrity: sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ== + } + engines: { node: '>= 18' } + + '@octokit/webhooks-types@7.6.1': + resolution: + { + integrity: sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw== + } + + '@octokit/webhooks@12.3.1': + resolution: + { + integrity: sha512-BVwtWE3rRXB9IugmQTfKspqjNa8q+ab73ddkV9k1Zok3XbuOxJUi4lTYk5zBZDhfWb/Y2H+RO9Iggm25gsqeow== + } + engines: { node: '>= 18' } + '@opentelemetry/api-logs@0.52.1': resolution: { @@ -2326,6 +2678,12 @@ packages: cpu: [x64] os: [win32] + '@sinclair/typebox@0.31.28': + resolution: + { + integrity: sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ== + } + '@smithy/abort-controller@4.0.1': resolution: { @@ -2761,12 +3119,24 @@ packages: } engines: { node: '>= 10' } + '@types/aws-lambda@8.10.147': + resolution: + { + integrity: sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew== + } + '@types/body-parser@1.19.5': resolution: { integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== } + '@types/btoa-lite@1.0.2': + resolution: + { + integrity: sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg== + } + '@types/caseless@0.12.5': resolution: { @@ -3088,6 +3458,13 @@ packages: integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ== } + '@wolfy1339/lru-cache@11.0.2-patch.1': + resolution: + { + integrity: sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA== + } + engines: { node: 18 >=18.20 || 20 || >=22 } + '@yr/monotone-cubic-spline@1.0.3': resolution: { @@ -3168,6 +3545,13 @@ packages: } engines: { node: '>= 8.0.0' } + aggregate-error@3.1.0: + resolution: + { + integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + } + engines: { node: '>=8' } + ajv-formats@3.0.1: resolution: { @@ -3276,6 +3660,12 @@ packages: integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== } + array-timsort@1.0.3: + resolution: + { + integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== + } + arrify@2.0.1: resolution: { @@ -3290,6 +3680,12 @@ packages: } engines: { node: '>=12' } + async-lock@1.4.1: + resolution: + { + integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ== + } + async-mutex@0.5.0: resolution: { @@ -3324,6 +3720,12 @@ packages: peerDependencies: postcss: ^8.1.0 + axios@1.7.9: + resolution: + { + integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== + } + axobject-query@4.1.0: resolution: { @@ -3343,6 +3745,12 @@ packages: integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== } + before-after-hook@2.2.3: + resolution: + { + integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + } + bignumber.js@9.1.2: resolution: { @@ -3369,6 +3777,12 @@ packages: } engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } + bottleneck@2.19.5: + resolution: + { + integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== + } + bowser@2.11.0: resolution: { @@ -3402,6 +3816,12 @@ packages: engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true + btoa-lite@1.0.0: + resolution: + { + integrity: sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== + } + buffer-equal-constant-time@1.0.1: resolution: { @@ -3518,6 +3938,19 @@ packages: integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== } + clean-git-ref@2.0.1: + resolution: + { + integrity: sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw== + } + + clean-stack@2.2.0: + resolution: + { + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + } + engines: { node: '>=6' } + cli-cursor@5.0.0: resolution: { @@ -3578,6 +4011,20 @@ packages: } engines: { node: '>= 0.8' } + commander@11.1.0: + resolution: + { + integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + } + engines: { node: '>=16' } + + commander@12.1.0: + resolution: + { + integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== + } + engines: { node: '>=18' } + commander@13.1.0: resolution: { @@ -3592,12 +4039,26 @@ packages: } engines: { node: '>= 6' } + comment-json@4.2.5: + resolution: + { + integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw== + } + engines: { node: '>= 6' } + concat-map@0.0.1: resolution: { integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== } + consola@3.2.3: + resolution: + { + integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== + } + engines: { node: ^14.18.0 || >=16.10.0 } + consola@3.4.0: resolution: { @@ -3639,6 +4100,12 @@ packages: } engines: { node: '>= 0.6' } + core-util-is@1.0.3: + resolution: + { + integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + } + cors@2.8.5: resolution: { @@ -3646,6 +4113,14 @@ packages: } engines: { node: '>= 0.10' } + crc-32@1.2.2: + resolution: + { + integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + } + engines: { node: '>=0.8' } + hasBin: true + cross-spawn@7.0.6: resolution: { @@ -3661,6 +4136,12 @@ packages: engines: { node: '>=4' } hasBin: true + csstype@3.1.3: + resolution: + { + integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + } + data-uri-to-buffer@4.0.1: resolution: { @@ -3698,6 +4179,17 @@ packages: } engines: { node: '>=0.10.0' } + dedent@1.5.1: + resolution: + { + integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + } + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-eql@5.0.2: resolution: { @@ -3711,6 +4203,13 @@ packages: integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== } + deepmerge-ts@5.1.0: + resolution: + { + integrity: sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw== + } + engines: { node: '>=16.0.0' } + deepmerge@4.3.1: resolution: { @@ -3732,6 +4231,12 @@ packages: } engines: { node: '>= 0.8' } + deprecation@2.3.1: + resolution: + { + integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + } + destroy@1.2.0: resolution: { @@ -3746,6 +4251,12 @@ packages: } engines: { node: '>=8' } + devalue@4.3.3: + resolution: + { + integrity: sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg== + } + devalue@5.1.1: resolution: { @@ -4332,6 +4843,18 @@ packages: integrity: sha512-kwFD3n8/YW4EG8GlY3Od9IoKND97kitO+/ejISHSqpn3vw2i5K/+ZI8Jm2V+KC4fGdnfi0XZ+TzYqQb4Q1LshA== } + follow-redirects@1.15.9: + resolution: + { + integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + } + engines: { node: '>=4.0' } + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + foreground-child@3.3.0: resolution: { @@ -4589,6 +5112,13 @@ packages: } engines: { node: '>=14.0.0' } + guess-json-indent@2.0.0: + resolution: + { + integrity: sha512-3Tm6R43KhtZWEVSHZnFmYMV9+gf3Vu0HXNNYtPVk2s7o8eGwYlJPHrjLtYw/7HBc10YxV+bfzKMuOf24z5qFng== + } + engines: { node: '>=16.17.0' } + guid-typescript@1.0.9: resolution: { @@ -4610,6 +5140,13 @@ packages: } engines: { node: '>=8' } + has-own-prop@2.0.0: + resolution: + { + integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== + } + engines: { node: '>=8' } + has-symbols@1.1.0: resolution: { @@ -4717,13 +5254,20 @@ packages: { integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== } - engines: { node: '>=0.10.0' } + engines: { node: '>=0.10.0' } + + idb@7.1.1: + resolution: + { + integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + } - idb@7.1.1: + ignore@5.3.1: resolution: { - integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== + integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== } + engines: { node: '>= 4' } ignore@5.3.2: resolution: @@ -4758,6 +5302,13 @@ packages: } engines: { node: '>=0.8.19' } + indent-string@4.0.0: + resolution: + { + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + } + engines: { node: '>=8' } + inflight@1.0.6: resolution: { @@ -5385,6 +5936,13 @@ packages: integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== } + murmurhash3js@3.0.1: + resolution: + { + integrity: sha512-KL8QYUaxq7kUbcl0Yto51rMcYt7E/4N4BG3/c96Iqw1PQrTRspu8Cpx4TZ4Nunib1d4bEkIH3gjCYlP2RLBdow== + } + engines: { node: '>=0.10.0' } + mz@2.7.0: resolution: { @@ -5514,6 +6072,13 @@ packages: } engines: { node: '>= 0.4' } + octokit@3.1.2: + resolution: + { + integrity: sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng== + } + engines: { node: '>= 18' } + on-finished@2.4.1: resolution: { @@ -5622,6 +6187,12 @@ packages: integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== } + pako@1.0.11: + resolution: + { + integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + } + parent-module@1.0.1: resolution: { @@ -5737,6 +6308,13 @@ packages: } engines: { node: '>=0.10.0' } + pify@5.0.0: + resolution: + { + integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + } + engines: { node: '>=10' } + pirates@4.0.6: resolution: { @@ -5859,6 +6437,13 @@ packages: } engines: { node: ^10 || ^12 || >=14 } + posthog-node@4.6.0: + resolution: + { + integrity: sha512-Dq6sBTeBXfK0Ez9OWAl+lhUcSInGUshxtoe0b26gFZtnV4byWTEZtwitKB6Xel9wYx3pNHixKOTSIHC/6a6CIA== + } + engines: { node: '>=15.0.0' } + prelude-ls@1.2.1: resolution: { @@ -5995,6 +6580,12 @@ packages: } engines: { node: '>= 0.10' } + proxy-from-env@1.1.0: + resolution: + { + integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + } + punycode@2.3.1: resolution: { @@ -6064,6 +6655,13 @@ packages: } engines: { node: '>= 14.18.0' } + repeat-string@1.6.1: + resolution: + { + integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + } + engines: { node: '>=0.10' } + require-directory@2.1.1: resolution: { @@ -6239,6 +6837,13 @@ packages: integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== } + sha.js@2.4.11: + resolution: + { + integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + } + hasBin: true + shebang-command@2.0.0: resolution: { @@ -6321,6 +6926,12 @@ packages: } engines: { node: '>=18' } + solid-js@1.6.12: + resolution: + { + integrity: sha512-JFqRobfG3q5r1l4RYVOAukk6+FWtHpXGIjgh/GEsHKweN/kK+iHOtzUALE6+P5t/jIcSNeGiVitX8gmJg+cYvQ== + } + source-map-js@1.2.1: resolution: { @@ -6594,6 +7205,13 @@ packages: integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== } + throttle-debounce@5.0.2: + resolution: + { + integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== + } + engines: { node: '>=12.22' } + tinybench@2.9.0: resolution: { @@ -6713,6 +7331,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' + typescript@5.2.2: + resolution: + { + integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + } + engines: { node: '>=14.17' } + hasBin: true + typescript@5.7.3: resolution: { @@ -6753,6 +7379,18 @@ packages: integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== } + universal-github-app-jwt@1.2.0: + resolution: + { + integrity: sha512-dncpMpnsKBk0eetwfN8D8OUHGfiDhhJ+mtsbMl+7PfW7mYjiH8LIcqRmYMtzYLgSh47HjfdBtrBwIQ/gizKR3g== + } + + universal-user-agent@6.0.1: + resolution: + { + integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + } + universalify@2.0.1: resolution: { @@ -6767,6 +7405,13 @@ packages: } engines: { node: '>= 0.8' } + unplugin@1.16.1: + resolution: + { + integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w== + } + engines: { node: '>=14.0.0' } + update-browserslist-db@1.1.2: resolution: { @@ -6952,6 +7597,12 @@ packages: integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== } + webpack-virtual-modules@0.6.2: + resolution: + { + integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== + } + websocket-driver@0.7.4: resolution: { @@ -8383,6 +9034,211 @@ snapshots: '@humanwhocodes/retry@0.4.1': {} + '@inlang/detect-json-formatting@1.0.0': + dependencies: + guess-json-indent: 2.0.0 + + '@inlang/json-types@1.1.0(@sinclair/typebox@0.31.28)': + dependencies: + '@sinclair/typebox': 0.31.28 + + '@inlang/language-tag@1.5.1': + dependencies: + '@sinclair/typebox': 0.31.28 + + '@inlang/message-lint-rule@1.4.7(@sinclair/typebox@0.31.28)': + dependencies: + '@inlang/json-types': 1.1.0(@sinclair/typebox@0.31.28) + '@inlang/language-tag': 1.5.1 + '@inlang/message': 2.1.0(@sinclair/typebox@0.31.28) + '@inlang/project-settings': 2.4.2(@sinclair/typebox@0.31.28) + '@inlang/translatable': 1.3.1 + '@sinclair/typebox': 0.31.28 + + '@inlang/message@2.1.0(@sinclair/typebox@0.31.28)': + dependencies: + '@inlang/language-tag': 1.5.1 + '@sinclair/typebox': 0.31.28 + + '@inlang/module@1.2.14(@sinclair/typebox@0.31.28)': + dependencies: + '@inlang/message-lint-rule': 1.4.7(@sinclair/typebox@0.31.28) + '@inlang/plugin': 2.4.14(@sinclair/typebox@0.31.28) + '@sinclair/typebox': 0.31.28 + + '@inlang/paraglide-js@1.11.8(debug@4.4.0)': + dependencies: + '@inlang/detect-json-formatting': 1.0.0 + '@inlang/language-tag': 1.5.1 + '@inlang/plugin-message-format': 2.2.0 + '@inlang/recommend-ninja': 0.1.1 + '@inlang/recommend-sherlock': 0.1.1 + '@inlang/sdk': 0.37.0 + '@lix-js/client': 2.2.1 + '@lix-js/fs': 2.2.0 + commander: 11.1.0 + consola: 3.2.3 + dedent: 1.5.1 + json5: 2.2.3 + posthog-node: 4.6.0(debug@4.4.0) + transitivePeerDependencies: + - babel-plugin-macros + - debug + - supports-color + + '@inlang/paraglide-sveltekit@0.15.5(@sveltejs/kit@2.17.2(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.20.1)(vite@5.4.14(@types/node@22.13.4)))(svelte@5.20.1)(vite@5.4.14(@types/node@22.13.4)))(debug@4.4.0)': + dependencies: + '@inlang/paraglide-js': 1.11.8(debug@4.4.0) + '@inlang/paraglide-vite': 1.3.5(debug@4.4.0) + '@lix-js/client': 2.2.1 + '@sveltejs/kit': 2.17.2(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.20.1)(vite@5.4.14(@types/node@22.13.4)))(svelte@5.20.1)(vite@5.4.14(@types/node@22.13.4)) + commander: 12.1.0 + dedent: 1.5.1 + devalue: 4.3.3 + magic-string: 0.30.17 + svelte: 5.20.1 + transitivePeerDependencies: + - babel-plugin-macros + - debug + - supports-color + + '@inlang/paraglide-unplugin@1.9.5(debug@4.4.0)': + dependencies: + '@inlang/paraglide-js': 1.11.8(debug@4.4.0) + '@inlang/sdk': 0.37.0 + '@lix-js/client': 2.2.1 + typescript: 5.7.3 + unplugin: 1.16.1 + transitivePeerDependencies: + - babel-plugin-macros + - debug + - supports-color + + '@inlang/paraglide-vite@1.3.5(debug@4.4.0)': + dependencies: + '@inlang/paraglide-unplugin': 1.9.5(debug@4.4.0) + transitivePeerDependencies: + - babel-plugin-macros + - debug + - supports-color + + '@inlang/plugin-message-format@2.2.0': {} + + '@inlang/plugin@2.4.14(@sinclair/typebox@0.31.28)': + dependencies: + '@inlang/json-types': 1.1.0(@sinclair/typebox@0.31.28) + '@inlang/language-tag': 1.5.1 + '@inlang/message': 2.1.0(@sinclair/typebox@0.31.28) + '@inlang/project-settings': 2.4.2(@sinclair/typebox@0.31.28) + '@inlang/translatable': 1.3.1 + '@lix-js/fs': 2.2.0 + '@sinclair/typebox': 0.31.28 + + '@inlang/project-settings@2.4.2(@sinclair/typebox@0.31.28)': + dependencies: + '@inlang/json-types': 1.1.0(@sinclair/typebox@0.31.28) + '@inlang/language-tag': 1.5.1 + '@sinclair/typebox': 0.31.28 + + '@inlang/recommend-ninja@0.1.1': + dependencies: + '@inlang/sdk': 0.36.3 + '@lix-js/client': 2.2.1 + '@lix-js/fs': 2.2.0 + '@sinclair/typebox': 0.31.28 + js-yaml: 4.1.0 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + '@inlang/recommend-sherlock@0.1.1': + dependencies: + '@inlang/sdk': 0.36.4 + '@lix-js/fs': 2.2.0 + '@sinclair/typebox': 0.31.28 + comment-json: 4.2.5 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + '@inlang/result@1.1.0': {} + + '@inlang/sdk@0.36.3': + dependencies: + '@inlang/json-types': 1.1.0(@sinclair/typebox@0.31.28) + '@inlang/language-tag': 1.5.1 + '@inlang/message': 2.1.0(@sinclair/typebox@0.31.28) + '@inlang/message-lint-rule': 1.4.7(@sinclair/typebox@0.31.28) + '@inlang/module': 1.2.14(@sinclair/typebox@0.31.28) + '@inlang/plugin': 2.4.14(@sinclair/typebox@0.31.28) + '@inlang/project-settings': 2.4.2(@sinclair/typebox@0.31.28) + '@inlang/result': 1.1.0 + '@inlang/translatable': 1.3.1 + '@lix-js/client': 2.2.1 + '@lix-js/fs': 2.2.0 + '@sinclair/typebox': 0.31.28 + debug: 4.4.0 + dedent: 1.5.1 + deepmerge-ts: 5.1.0 + murmurhash3js: 3.0.1 + solid-js: 1.6.12 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + '@inlang/sdk@0.36.4': + dependencies: + '@inlang/json-types': 1.1.0(@sinclair/typebox@0.31.28) + '@inlang/language-tag': 1.5.1 + '@inlang/message': 2.1.0(@sinclair/typebox@0.31.28) + '@inlang/message-lint-rule': 1.4.7(@sinclair/typebox@0.31.28) + '@inlang/module': 1.2.14(@sinclair/typebox@0.31.28) + '@inlang/plugin': 2.4.14(@sinclair/typebox@0.31.28) + '@inlang/project-settings': 2.4.2(@sinclair/typebox@0.31.28) + '@inlang/result': 1.1.0 + '@inlang/translatable': 1.3.1 + '@lix-js/client': 2.2.1 + '@lix-js/fs': 2.2.0 + '@sinclair/typebox': 0.31.28 + debug: 4.4.0 + dedent: 1.5.1 + deepmerge-ts: 5.1.0 + murmurhash3js: 3.0.1 + solid-js: 1.6.12 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + '@inlang/sdk@0.37.0': + dependencies: + '@inlang/json-types': 1.1.0(@sinclair/typebox@0.31.28) + '@inlang/language-tag': 1.5.1 + '@inlang/message': 2.1.0(@sinclair/typebox@0.31.28) + '@inlang/message-lint-rule': 1.4.7(@sinclair/typebox@0.31.28) + '@inlang/module': 1.2.14(@sinclair/typebox@0.31.28) + '@inlang/plugin': 2.4.14(@sinclair/typebox@0.31.28) + '@inlang/project-settings': 2.4.2(@sinclair/typebox@0.31.28) + '@inlang/result': 1.1.0 + '@inlang/translatable': 1.3.1 + '@lix-js/client': 2.2.1 + '@lix-js/fs': 2.2.0 + '@sinclair/typebox': 0.31.28 + debug: 4.4.0 + dedent: 1.5.1 + deepmerge-ts: 5.1.0 + murmurhash3js: 3.0.1 + solid-js: 1.6.12 + throttle-debounce: 5.0.2 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + '@inlang/translatable@1.3.1': + dependencies: + '@inlang/language-tag': 1.5.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -8415,6 +9271,22 @@ snapshots: '@js-sdsl/ordered-map@4.4.2': {} + '@lix-js/client@2.2.1': + dependencies: + '@lix-js/fs': 2.2.0 + async-lock: 1.4.1 + clean-git-ref: 2.0.1 + crc-32: 1.2.2 + ignore: 5.3.1 + octokit: 3.1.2 + pako: 1.0.11 + pify: 5.0.0 + sha.js: 2.4.11 + + '@lix-js/fs@2.2.0': + dependencies: + typescript: 5.2.2 + '@mapbox/node-pre-gyp@2.0.0(encoding@0.1.13)': dependencies: consola: 3.4.0 @@ -8440,6 +9312,166 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.0 + '@octokit/app@14.1.0': + dependencies: + '@octokit/auth-app': 6.1.3 + '@octokit/auth-unauthenticated': 5.0.1 + '@octokit/core': 5.2.0 + '@octokit/oauth-app': 6.1.0 + '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.0) + '@octokit/types': 12.6.0 + '@octokit/webhooks': 12.3.1 + + '@octokit/auth-app@6.1.3': + dependencies: + '@octokit/auth-oauth-app': 7.1.0 + '@octokit/auth-oauth-user': 4.1.0 + '@octokit/request': 8.4.1 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.8.0 + deprecation: 2.3.1 + lru-cache: '@wolfy1339/lru-cache@11.0.2-patch.1' + universal-github-app-jwt: 1.2.0 + universal-user-agent: 6.0.1 + + '@octokit/auth-oauth-app@7.1.0': + dependencies: + '@octokit/auth-oauth-device': 6.1.0 + '@octokit/auth-oauth-user': 4.1.0 + '@octokit/request': 8.4.1 + '@octokit/types': 13.8.0 + '@types/btoa-lite': 1.0.2 + btoa-lite: 1.0.0 + universal-user-agent: 6.0.1 + + '@octokit/auth-oauth-device@6.1.0': + dependencies: + '@octokit/oauth-methods': 4.1.0 + '@octokit/request': 8.4.1 + '@octokit/types': 13.8.0 + universal-user-agent: 6.0.1 + + '@octokit/auth-oauth-user@4.1.0': + dependencies: + '@octokit/auth-oauth-device': 6.1.0 + '@octokit/oauth-methods': 4.1.0 + '@octokit/request': 8.4.1 + '@octokit/types': 13.8.0 + btoa-lite: 1.0.0 + universal-user-agent: 6.0.1 + + '@octokit/auth-token@4.0.0': {} + + '@octokit/auth-unauthenticated@5.0.1': + dependencies: + '@octokit/request-error': 5.1.1 + '@octokit/types': 12.6.0 + + '@octokit/core@5.2.0': + dependencies: + '@octokit/auth-token': 4.0.0 + '@octokit/graphql': 7.1.0 + '@octokit/request': 8.4.1 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.8.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + + '@octokit/endpoint@9.0.6': + dependencies: + '@octokit/types': 13.8.0 + universal-user-agent: 6.0.1 + + '@octokit/graphql@7.1.0': + dependencies: + '@octokit/request': 8.4.1 + '@octokit/types': 13.8.0 + universal-user-agent: 6.0.1 + + '@octokit/oauth-app@6.1.0': + dependencies: + '@octokit/auth-oauth-app': 7.1.0 + '@octokit/auth-oauth-user': 4.1.0 + '@octokit/auth-unauthenticated': 5.0.1 + '@octokit/core': 5.2.0 + '@octokit/oauth-authorization-url': 6.0.2 + '@octokit/oauth-methods': 4.1.0 + '@types/aws-lambda': 8.10.147 + universal-user-agent: 6.0.1 + + '@octokit/oauth-authorization-url@6.0.2': {} + + '@octokit/oauth-methods@4.1.0': + dependencies: + '@octokit/oauth-authorization-url': 6.0.2 + '@octokit/request': 8.4.1 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.8.0 + btoa-lite: 1.0.0 + + '@octokit/openapi-types@20.0.0': {} + + '@octokit/openapi-types@23.0.1': {} + + '@octokit/plugin-paginate-graphql@4.0.1(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + + '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/types': 12.6.0 + + '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/types': 12.6.0 + + '@octokit/plugin-retry@6.1.0(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.8.0 + bottleneck: 2.19.5 + + '@octokit/plugin-throttling@8.2.0(@octokit/core@5.2.0)': + dependencies: + '@octokit/core': 5.2.0 + '@octokit/types': 12.6.0 + bottleneck: 2.19.5 + + '@octokit/request-error@5.1.1': + dependencies: + '@octokit/types': 13.8.0 + deprecation: 2.3.1 + once: 1.4.0 + + '@octokit/request@8.4.1': + dependencies: + '@octokit/endpoint': 9.0.6 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.8.0 + universal-user-agent: 6.0.1 + + '@octokit/types@12.6.0': + dependencies: + '@octokit/openapi-types': 20.0.0 + + '@octokit/types@13.8.0': + dependencies: + '@octokit/openapi-types': 23.0.1 + + '@octokit/webhooks-methods@4.1.0': {} + + '@octokit/webhooks-types@7.6.1': {} + + '@octokit/webhooks@12.3.1': + dependencies: + '@octokit/request-error': 5.1.1 + '@octokit/webhooks-methods': 4.1.0 + '@octokit/webhooks-types': 7.6.1 + aggregate-error: 3.1.0 + '@opentelemetry/api-logs@0.52.1': dependencies: '@opentelemetry/api': 1.9.0 @@ -8735,6 +9767,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.34.7': optional: true + '@sinclair/typebox@0.31.28': {} + '@smithy/abort-controller@4.0.1': dependencies: '@smithy/types': 4.1.0 @@ -9130,11 +10164,15 @@ snapshots: '@tootallnate/once@2.0.0': {} + '@types/aws-lambda@8.10.147': {} + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 '@types/node': 22.13.4 + '@types/btoa-lite@1.0.2': {} + '@types/caseless@0.12.5': {} '@types/connect@3.4.38': @@ -9381,6 +10419,8 @@ snapshots: loupe: 3.1.3 tinyrainbow: 1.2.0 + '@wolfy1339/lru-cache@11.0.2-patch.1': {} + '@yr/monotone-cubic-spline@1.0.3': {} abbrev@3.0.0: {} @@ -9420,6 +10460,11 @@ snapshots: dependencies: humanize-ms: 1.2.1 + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -9481,10 +10526,14 @@ snapshots: array-flatten@1.1.1: {} + array-timsort@1.0.3: {} + arrify@2.0.1: {} assertion-error@2.0.1: {} + async-lock@1.4.1: {} + async-mutex@0.5.0: dependencies: tslib: 2.8.1 @@ -9507,12 +10556,22 @@ snapshots: postcss: 8.5.2 postcss-value-parser: 4.2.0 + axios@1.7.9(debug@4.4.0): + dependencies: + follow-redirects: 1.15.9(debug@4.4.0) + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + axobject-query@4.1.0: {} balanced-match@1.0.2: {} base64-js@1.5.1: {} + before-after-hook@2.2.3: {} + bignumber.js@9.1.2: {} binary-extensions@2.3.0: {} @@ -9538,6 +10597,8 @@ snapshots: transitivePeerDependencies: - supports-color + bottleneck@2.19.5: {} + bowser@2.11.0: {} brace-expansion@1.1.11: @@ -9560,6 +10621,8 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) + btoa-lite@1.0.0: {} + buffer-equal-constant-time@1.0.1: {} bytes@3.1.2: {} @@ -9621,6 +10684,10 @@ snapshots: cjs-module-lexer@1.4.3: {} + clean-git-ref@2.0.1: {} + + clean-stack@2.2.0: {} + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -9656,12 +10723,26 @@ snapshots: dependencies: delayed-stream: 1.0.0 + commander@11.1.0: {} + + commander@12.1.0: {} + commander@13.1.0: {} commander@4.1.1: {} + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + concat-map@0.0.1: {} + consola@3.2.3: {} + consola@3.4.0: {} content-disposition@0.5.4: @@ -9676,11 +10757,15 @@ snapshots: cookie@0.7.1: {} + core-util-is@1.0.3: {} + cors@2.8.5: dependencies: object-assign: 4.1.1 vary: 1.1.2 + crc-32@1.2.2: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -9689,6 +10774,8 @@ snapshots: cssesc@3.0.0: {} + csstype@3.1.3: {} + data-uri-to-buffer@4.0.1: {} debug@2.6.9: @@ -9701,20 +10788,28 @@ snapshots: decamelize@1.2.0: {} + dedent@1.5.1: {} + deep-eql@5.0.2: {} deep-is@0.1.4: {} + deepmerge-ts@5.1.0: {} + deepmerge@4.3.1: {} delayed-stream@1.0.0: {} depd@2.0.0: {} + deprecation@2.3.1: {} + destroy@1.2.0: {} detect-libc@2.0.3: {} + devalue@4.3.3: {} + devalue@5.1.1: {} didyoumean@1.2.2: {} @@ -10225,6 +11320,10 @@ snapshots: transitivePeerDependencies: - rollup + follow-redirects@1.15.9(debug@4.4.0): + optionalDependencies: + debug: 4.4.0 + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.6 @@ -10418,6 +11517,8 @@ snapshots: - encoding - supports-color + guess-json-indent@2.0.0: {} + guid-typescript@1.0.9: {} handlebars@4.7.8: @@ -10431,6 +11532,8 @@ snapshots: has-flag@4.0.0: {} + has-own-prop@2.0.0: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -10498,6 +11601,8 @@ snapshots: idb@7.1.1: {} + ignore@5.3.1: {} + ignore@5.3.2: {} import-fresh@3.3.1: @@ -10516,6 +11621,8 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -10830,6 +11937,8 @@ snapshots: ms@2.1.3: {} + murmurhash3js@3.0.1: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -10882,6 +11991,19 @@ snapshots: object-inspect@1.13.4: {} + octokit@3.1.2: + dependencies: + '@octokit/app': 14.1.0 + '@octokit/core': 5.2.0 + '@octokit/oauth-app': 6.1.0 + '@octokit/plugin-paginate-graphql': 4.0.1(@octokit/core@5.2.0) + '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.0) + '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.0) + '@octokit/plugin-retry': 6.1.0(@octokit/core@5.2.0) + '@octokit/plugin-throttling': 8.2.0(@octokit/core@5.2.0) + '@octokit/request-error': 5.1.1 + '@octokit/types': 12.6.0 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -10956,6 +12078,8 @@ snapshots: package-json-from-dist@1.0.1: {} + pako@1.0.11: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -10995,6 +12119,8 @@ snapshots: pify@2.3.0: {} + pify@5.0.0: {} + pirates@4.0.6: {} platform@1.3.6: {} @@ -11058,6 +12184,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + posthog-node@4.6.0(debug@4.4.0): + dependencies: + axios: 1.7.9(debug@4.4.0) + transitivePeerDependencies: + - debug + prelude-ls@1.2.1: {} prettier-plugin-organize-imports@4.1.0(prettier@3.5.1)(typescript@5.7.3): @@ -11124,6 +12256,8 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-from-env@1.1.0: {} + punycode@2.3.1: {} qrcode@1.5.4: @@ -11163,6 +12297,8 @@ snapshots: readdirp@4.1.2: {} + repeat-string@1.6.1: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -11289,6 +12425,11 @@ snapshots: setprototypeof@1.2.0: {} + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -11345,6 +12486,10 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 + solid-js@1.6.12: + dependencies: + csstype: 3.1.3 + source-map-js@1.2.1: {} source-map@0.6.1: {} @@ -11546,6 +12691,8 @@ snapshots: dependencies: any-promise: 1.3.0 + throttle-debounce@5.0.2: {} + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -11602,6 +12749,8 @@ snapshots: transitivePeerDependencies: - supports-color + typescript@5.2.2: {} + typescript@5.7.3: {} uglify-js@3.19.3: @@ -11617,10 +12766,22 @@ snapshots: dependencies: '@types/unist': 2.0.11 + universal-github-app-jwt@1.2.0: + dependencies: + '@types/jsonwebtoken': 9.0.8 + jsonwebtoken: 9.0.2 + + universal-user-agent@6.0.1: {} + universalify@2.0.1: {} unpipe@1.0.0: {} + unplugin@1.16.1: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: browserslist: 4.24.4 @@ -11732,6 +12893,8 @@ snapshots: webidl-conversions@3.0.1: {} + webpack-virtual-modules@0.6.2: {} + websocket-driver@0.7.4: dependencies: http-parser-js: 0.5.9 diff --git a/project.inlang/.gitignore b/project.inlang/.gitignore new file mode 100644 index 0000000..5e46596 --- /dev/null +++ b/project.inlang/.gitignore @@ -0,0 +1 @@ +cache \ No newline at end of file diff --git a/project.inlang/project_id b/project.inlang/project_id new file mode 100644 index 0000000..bd76d21 --- /dev/null +++ b/project.inlang/project_id @@ -0,0 +1 @@ +a0d20e22f1721da100c3d66eed681a8d8ca7deb6cf2863988e6ffb7abd75f391 \ No newline at end of file diff --git a/project.inlang/settings.json b/project.inlang/settings.json new file mode 100644 index 0000000..24b7354 --- /dev/null +++ b/project.inlang/settings.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://inlang.com/schema/project-settings", + "sourceLanguageTag": "en", + "languageTags": ["en", "zh"], + "modules": [ + "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-empty-pattern@latest/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-missing-translation@latest/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-without-source@latest/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@latest/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@latest/dist/index.js" + ], + "plugin.inlang.messageFormat": { + "pathPattern": "./messages/{languageTag}.json" + } +} diff --git a/src/app.d.ts b/src/app.d.ts index 79d2870..e0c4a9f 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,3 +1,5 @@ +import type { ParaglideLocals } from '@inlang/paraglide-sveltekit'; +import type { AvailableLanguageTag } from '../../lib/paraglide/runtime'; // See https://svelte.dev/docs/kit/types#app.d.ts // for information about these interfaces import type { DecodedIdToken } from 'firebase-admin/auth'; @@ -5,6 +7,8 @@ import type { DecodedIdToken } from 'firebase-admin/auth'; declare global { namespace App { interface Locals { + paraglide: ParaglideLocals; + user: DecodedIdToken | null; } // interface Error {} diff --git a/src/app.html b/src/app.html index 77a5ff5..ab396bb 100644 --- a/src/app.html +++ b/src/app.html @@ -1,5 +1,5 @@ - + diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 2c884b9..97635d5 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -1,7 +1,9 @@ +import { i18n } from '$lib/i18n'; import { adminAuth } from '$lib/server/firebase'; -import { type Handle } from '@sveltejs/kit'; +import type { Handle } from '@sveltejs/kit'; +import { sequence } from '@sveltejs/kit/hooks'; -export const handle: Handle = async ({ event, resolve }) => { +const authHandle: Handle = async ({ event, resolve }) => { const sessionCookie = event.cookies.get('session'); // No session cookie, user is not authenticated @@ -35,3 +37,5 @@ export const handle: Handle = async ({ event, resolve }) => { return resolve(event); }; + +export const handle = sequence(i18n.handle(), authHandle); diff --git a/src/hooks.ts b/src/hooks.ts new file mode 100644 index 0000000..38908d3 --- /dev/null +++ b/src/hooks.ts @@ -0,0 +1,4 @@ +// file initialized by the Paraglide-SvelteKit CLI - Feel free to edit it +import { i18n } from '$lib/i18n'; + +export const reroute = i18n.reroute(); diff --git a/src/lib/components/Navbar.svelte b/src/lib/components/Navbar.svelte index bed8d55..ce8ebb1 100644 --- a/src/lib/components/Navbar.svelte +++ b/src/lib/components/Navbar.svelte @@ -6,6 +6,7 @@ import { onMount } from 'svelte'; import { page } from '$app/state'; import { language } from '$lib/stores/language'; // Import the global language store + import { browser } from '$app/environment'; let hinagiku = $state('Hinagiku'); let highlight = $state(0); @@ -27,6 +28,16 @@ } }; + import { derived } from 'svelte/store'; + + const flagSrc = derived(language, ($language) => { + return browser + ? $language === 'zh' + ? '/icons/flag-zh.jpg' + : '/icons/flag-us.png' + : '/icons/flag-us.png'; + }); + onMount(() => { const interval = setInterval(() => { let newHighlight; @@ -77,12 +88,7 @@ {/if} - + setLanguage('en')}> English diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts new file mode 100644 index 0000000..89822bd --- /dev/null +++ b/src/lib/i18n.ts @@ -0,0 +1,5 @@ +// file initialized by the Paraglide-SvelteKit CLI - Feel free to edit it +import * as runtime from '$lib/paraglide/runtime.js'; +import { createI18n } from '@inlang/paraglide-sveltekit'; + +export const i18n = createI18n(runtime); diff --git a/src/lib/stores/language.ts b/src/lib/stores/language.ts index 42c6d2b..dc8b930 100644 --- a/src/lib/stores/language.ts +++ b/src/lib/stores/language.ts @@ -1,3 +1,20 @@ +import { browser } from '$app/environment'; import { writable } from 'svelte/store'; -export const language = writable<'en' | 'zh'>('en'); +function getSavedLanguage() { + if (browser) { + const saved = localStorage.getItem('language'); + if (saved === 'en' || saved === 'zh') { + return saved; + } + } + return 'en'; +} + +export const language = writable<'en' | 'zh'>(getSavedLanguage()); + +if (browser) { + language.subscribe((value) => { + localStorage.setItem('language', value); + }); +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 20d7395..16ab4eb 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,4 +1,7 @@ -
- - {@render children()} - -
+ +
+ + {@render children()} + +
+