Skip to content

refactor: lib subpath imports for kit v3 - #4190

Merged
KATO-Hiro merged 2 commits into
stagingfrom
refactor/lib-subpath-imports
Oct 18, 2026
Merged

KATO-Hiro merged 2 commits into
stagingfrom
refactor/lib-subpath-imports

Conversation

@KATO-Hiro

Copy link
Copy Markdown
Collaborator

概要

SvelteKit 3 では組み込みの $lib が削除され、kit.alias も非推奨になります。Kit 3 へ移行する前に、src/libへの import を package.json#imports の #lib/* に置き換えます。現行の Kit 2.70.3 のまま動作します。

変更内容

  • package.json に "imports": { "#lib/*": "./src/lib/*" } を追加
  • 282ファイル・676箇所の $lib/... を #lib/... に置換(下記の codemod で生成)
    • 拡張子を明示します。TS モジュールは .js、コンポーネントは .svelte、runes モジュール(実体が .svelte.ts)は .svelte.js です。
  • $lib の import を no-restricted-imports で禁止(.ts は oxlint、.svelte は ESLint)
    • Kit 2 は $lib をそのまま解決するので、規則が無いと新しいコードの $lib に Kit 3 移行まで気付けません。
  • docs/guides の規約(architecture・testing・testing-e2e・server-cache・prisma-db)を #lib に更新

手で編集したのは package.json・.oxlintrc.json・eslint.config.mjs と docs/guides の5ファイルです。残りの282ファイルは codemod の出力で、そのうち1ファイル(src/lib/clients/aizu_online_judge/clients.ts)だけ pnpm format が行幅で整形しています。

レビューの方法

置換部分は、この PR の base(dc9f2471)で codemod を再実行すると同じ結果になります。手での確認は、上記の手で編集したファイルに絞れます。

git switch --detach dc9f2471
python3 -I codemod_subpath_imports.py . lib   # 下記のスクリプトを保存して実行
pnpm format
git diff refactor/lib-subpath-imports -- src e2e prisma   # 差分なし

確認したこと

  • pnpm lint、pnpm check(0 errors、警告数は変更前と同じ)、pnpm test:unit(2726件)、pnpm build
  • E2E: signin / redirect_after_login / votes / workbook_edit / workbook_order(56件)
  • seed の import 経路(tsx で解決できる)
  • lint 規則が $lib を検出し、#lib を通すこと(一時ファイルで確認)
  • Codex の cross-review: Critical・Severe の指摘なし

lint 規則は vi.mock('$lib/...') と .svelte 内の動的 import() を検出しません。specifier をまとめて変えるときは rg -n '\$lib' src e2e prisma で残りを確かめてください(docs/guides/architecture.md に記載)。

作業中の branch がある方へ

この PR のマージ後に rebase すると、$lib の import が残っている箇所は lint で止まります。rebase 後に codemodを再実行すれば、新しく追加したファイルも含めて置換されます。何度実行しても結果は変わりません。

python3 -I codemod_subpath_imports.py . lib
pnpm format

E2E の spec では #lib を使わず、相対 import のままにしてください。Playwright のランナーは #lib/*.js を .ts の実体に対応付けられないためです。

codemod_subpath_imports.py
"""Rewrite alias specifiers to package.json subpath imports with an explicit extension.

Usage: python3 -I codemod_subpath_imports.py <repo-root> <lib|features>

- lib:      `$lib/...` -> `#lib/...`
- features: `$features/...` and `@/features/...` -> `#features/...`

The rewrite is idempotent, so it can be re-run on a branch after rebasing onto the change.
"""
import os
import re
import sys

root = sys.argv[1]
target = sys.argv[2]

# (specifier prefix, source directory relative to the root, replacement prefix)
RULES = {
    'lib': [('$lib/', 'src/lib', '#lib/')],
    'features': [
        ('$features/', 'src/features', '#features/'),
        ('@/features/', 'src/features', '#features/'),
    ],
}

if target not in RULES:
    sys.exit(f'unknown target: {target} (expected one of {", ".join(RULES)})')

rules = [
    (re.compile(r"""(['"])""" + re.escape(prefix) + r"""([^'"]+)\1"""), os.path.join(root, source), replacement)
    for prefix, source, replacement in RULES[target]
]

unresolved = []
changed_files = 0
changed_specs = 0
file_changes = 0
current_file = ''


def resolve(base_dir, path):
    # a `.js` specifier is kept as is because TypeScript and Vite map it to the `.ts` source;
    # other existing files keep their extension (e.g. `.svelte` components)
    if path.endswith('.js') or os.path.isfile(os.path.join(base_dir, path)):
        return path
    # `x.svelte` that only exists as `x.svelte.ts` is a runes module and becomes `x.svelte.js`
    candidates = [
        (path + '.ts', path + '.js'),
        (path + '.svelte.ts', path + '.svelte.js'),
        (path + '/index.ts', path + '/index.js'),
        (path + '.js', path + '.js'),
    ]
    for source, specifier in candidates:
        if os.path.isfile(os.path.join(base_dir, source)):
            return specifier
    return None


def make_replacer(base_dir, replacement):
    def replace_specifier(match):
        global changed_specs, file_changes
        resolved = resolve(base_dir, match.group(2))
        if resolved is None:
            unresolved.append((current_file, match.group(0)))
            return match.group(0)
        file_changes += 1
        changed_specs += 1
        return f'{match.group(1)}{replacement}{resolved}{match.group(1)}'

    return replace_specifier


for base in ('src', 'e2e', 'prisma'):
    for dirpath, dirnames, filenames in os.walk(os.path.join(root, base)):
        dirnames[:] = [name for name in dirnames if name not in ('node_modules', '.svelte-kit')]
        for filename in filenames:
            if not filename.endswith(('.ts', '.svelte', '.js')):
                continue
            full = os.path.join(dirpath, filename)
            current_file = os.path.relpath(full, root)
            text = open(full, encoding='utf-8').read()
            file_changes = 0
            new_text = text
            for pattern, base_dir, replacement in rules:
                new_text = pattern.sub(make_replacer(base_dir, replacement), new_text)
            if file_changes:
                open(full, 'w', encoding='utf-8').write(new_text)
                changed_files += 1

print(f'files changed: {changed_files}, specifiers changed: {changed_specs}, unresolved: {len(unresolved)}')
for item in unresolved:
    print('UNRESOLVED', item)

features モード($features・@/features → #features)は、後続の PR で使います。

🤖 Generated with Claude Code

KATO-Hiro and others added 2 commits October 18, 2026 13:09
SvelteKit 3 removes the built-in $lib alias and deprecates kit.alias.
Move src/lib imports to package.json#imports while still on Kit 2, so
that new code stops adding $lib imports before the Kit 3 migration.

- Add "#lib/*": "./src/lib/*" to package.json imports
- Rewrite 676 specifiers in 282 files with explicit extensions
  (.js for TS modules, .svelte for components, .svelte.js for runes
  modules); the rewrite is script-generated and reproducible
- Forbid $lib imports with no-restricted-imports in oxlint (.ts) and
  ESLint (.svelte), since Kit 2 still resolves $lib silently
- Update docs/guides rules to the #lib convention; E2E specs keep
  relative imports because the Playwright runner cannot map #lib/*.js
  to the .ts source

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
no-restricted-imports catches import/export declarations and dynamic
import() in .ts files, but not vi.mock specifiers or dynamic import()
in .svelte files. Document the gap and the rg sweep that covers it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 18, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 290 files, which is 190 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: Repository: AtCoder-NoviSteps/AtCoderNoviSteps/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: fa453267-17c3-429f-ac8a-c3de5ab8b8c7
📥 Commits

Reviewing files that changed from the base of the PR and between dc9f247 and 7aba5fe.

📒 Files selected for processing: 290
  • .oxlintrc.json
  • docs/guides/agent-rules/prisma-db.md
  • docs/guides/agent-rules/server-cache.md
  • docs/guides/agent-rules/testing-e2e.md
  • docs/guides/agent-rules/testing.md
  • docs/guides/architecture.md
  • eslint.config.mjs
  • package.json
  • src/features/account/components/delete/AccountDeletionForm.svelte
  • src/features/account/components/settings/AtCoderVerificationForm.svelte
  • src/features/account/services/atcoder_verification.test.ts
  • src/features/account/services/atcoder_verification.ts
  • src/features/auth/server/session.test.ts
  • src/features/auth/server/session.ts
  • src/features/auth/services/admin_access.test.ts
  • src/features/auth/services/admin_access.ts
  • src/features/auth/services/credentials.test.ts
  • src/features/auth/services/credentials.ts
  • src/features/auth/services/session_guards.ts
  • src/features/auth/utils/login.ts
  • src/features/auth/utils/signup.ts
  • src/features/tasks/components/contest-table/TaskTable.svelte
  • src/features/tasks/components/contest-table/TaskTableBodyCell.svelte
  • src/features/tasks/fixtures/contest-table/contest_table_provider.ts
  • src/features/tasks/stores/active_contest_type.svelte.ts
  • src/features/tasks/types/contest-table/contest_table_provider.ts
  • src/features/tasks/utils/contest-table/aalc_provider.test.ts
  • src/features/tasks/utils/contest-table/aalc_provider.ts
  • src/features/tasks/utils/contest-table/abc_providers.test.ts
  • src/features/tasks/utils/contest-table/abc_providers.ts
  • src/features/tasks/utils/contest-table/abs_provider.test.ts
  • src/features/tasks/utils/contest-table/abs_provider.ts
  • src/features/tasks/utils/contest-table/acl_providers.test.ts
  • src/features/tasks/utils/contest-table/acl_providers.ts
  • src/features/tasks/utils/contest-table/agc_provider.test.ts
  • src/features/tasks/utils/contest-table/agc_provider.ts
  • src/features/tasks/utils/contest-table/aoj_icpc_providers.test.ts
  • src/features/tasks/utils/contest-table/aoj_icpc_providers.ts
  • src/features/tasks/utils/contest-table/aoj_jag_providers.test.ts
  • src/features/tasks/utils/contest-table/aoj_jag_providers.ts
  • src/features/tasks/utils/contest-table/aoj_labels.test.ts
  • src/features/tasks/utils/contest-table/aoj_labels.ts
  • src/features/tasks/utils/contest-table/arc_providers.test.ts
  • src/features/tasks/utils/contest-table/arc_providers.ts
  • src/features/tasks/utils/contest-table/awc_provider.test.ts
  • src/features/tasks/utils/contest-table/awc_provider.ts
  • src/features/tasks/utils/contest-table/axc_like_provider.test.ts
  • src/features/tasks/utils/contest-table/axc_like_provider.ts
  • src/features/tasks/utils/contest-table/contest_table_provider_base.test.ts
  • src/features/tasks/utils/contest-table/contest_table_provider_base.ts
  • src/features/tasks/utils/contest-table/contest_table_provider_group.test.ts
  • src/features/tasks/utils/contest-table/contest_table_provider_group.ts
  • src/features/tasks/utils/contest-table/contest_table_provider_groups.test.ts
  • src/features/tasks/utils/contest-table/contest_table_provider_groups.ts
  • src/features/tasks/utils/contest-table/dp_providers.test.ts
  • src/features/tasks/utils/contest-table/dp_providers.ts
  • src/features/tasks/utils/contest-table/fps24_provider.test.ts
  • src/features/tasks/utils/contest-table/fps24_provider.ts
  • src/features/tasks/utils/contest-table/game24_provider.test.ts
  • src/features/tasks/utils/contest-table/game24_provider.ts
  • src/features/tasks/utils/contest-table/joi_providers.test.ts
  • src/features/tasks/utils/contest-table/joi_providers.ts
  • src/features/tasks/utils/contest-table/math_and_algorithm_provider.test.ts
  • src/features/tasks/utils/contest-table/math_and_algorithm_provider.ts
  • src/features/tasks/utils/contest-table/tessoku_book_providers.test.ts
  • src/features/tasks/utils/contest-table/tessoku_book_providers.ts
  • src/features/tasks/utils/contest-table/typical90_provider.test.ts
  • src/features/tasks/utils/contest-table/typical90_provider.ts
  • src/features/votes/actions/vote_actions.ts
  • src/features/votes/components/RelativeEvaluationBadge.svelte
  • src/features/votes/components/VotableGrade.svelte
  • src/features/votes/components/VoteDonutChart.svelte
  • src/features/votes/internal_clients/vote_grade.test.ts
  • src/features/votes/internal_clients/vote_grade.ts
  • src/features/votes/server/cache.test.ts
  • src/features/votes/server/cache.ts
  • src/features/votes/services/vote_grade.test.ts
  • src/features/votes/services/vote_grade.ts
  • src/features/votes/services/vote_statistics.test.ts
  • src/features/votes/services/vote_statistics.ts
  • src/features/votes/types/donut_graph.ts
  • src/features/votes/types/vote_result.ts
  • src/features/votes/utils/donut_chart.test.ts
  • src/features/votes/utils/donut_chart.ts
  • src/features/votes/utils/grade_options.test.ts
  • src/features/votes/utils/grade_options.ts
  • src/features/votes/utils/median.ts
  • src/features/votes/utils/relative_evaluation.test.ts
  • src/features/votes/utils/relative_evaluation.ts
  • src/features/workbooks/components/detail/CommentAndHint.svelte
  • src/features/workbooks/components/detail/WorkBookTasksTable.svelte
  • src/features/workbooks/components/list/AcceptedCounter.svelte
  • src/features/workbooks/components/list/CreatedByUserTable.svelte
  • src/features/workbooks/components/list/CurriculumTable.svelte
  • src/features/workbooks/components/list/CurriculumWorkBookList.svelte
  • src/features/workbooks/components/list/GradeTableBodyCell.svelte
  • src/features/workbooks/components/list/SolutionTable.svelte
  • src/features/workbooks/components/list/SolutionWorkBookList.svelte
  • src/features/workbooks/components/list/WorkBookList.svelte
  • src/features/workbooks/components/list/WorkbookAuthorActionsCell.svelte
  • src/features/workbooks/components/list/WorkbookCompletionCell.svelte
  • src/features/workbooks/components/list/WorkbookProgressCell.svelte
  • src/features/workbooks/components/list/WorkbookTabItem.svelte
  • src/features/workbooks/components/shared/WorkBookForm.svelte
  • src/features/workbooks/components/shared/WorkBookInputFields.svelte
  • src/features/workbooks/fixtures/workbook_placements.ts
  • src/features/workbooks/server/cache.ts
  • src/features/workbooks/services/workbook_placements/crud.test.ts
  • src/features/workbooks/services/workbook_placements/crud.ts
  • src/features/workbooks/services/workbook_placements/initializers.test.ts
  • src/features/workbooks/services/workbook_placements/initializers.ts
  • src/features/workbooks/services/workbooks.test.ts
  • src/features/workbooks/services/workbooks.ts
  • src/features/workbooks/types/workbook.ts
  • src/features/workbooks/types/workbook_placement.ts
  • src/features/workbooks/utils/solution_category_group.test.ts
  • src/features/workbooks/utils/solution_category_group.ts
  • src/features/workbooks/utils/workbook.ts
  • src/features/workbooks/utils/workbook_tasks.test.ts
  • src/features/workbooks/utils/workbook_tasks.ts
  • src/features/workbooks/utils/workbook_url_params.test.ts
  • src/features/workbooks/utils/workbook_url_params.ts
  • src/features/workbooks/utils/workbooks.test.ts
  • src/features/workbooks/utils/workbooks.ts
  • src/features/workbooks/zod/schema.test.ts
  • src/features/workbooks/zod/schema.ts
  • src/hooks.server.ts
  • src/lib/actions/prevent_enter_key.ts
  • src/lib/actions/update_task_result.ts
  • src/lib/clients/aizu_online_judge/clients.test.ts
  • src/lib/clients/aizu_online_judge/clients.ts
  • src/lib/clients/aizu_online_judge/utils.ts
  • src/lib/clients/atcoder/atcoder_problems.test.ts
  • src/lib/clients/atcoder/atcoder_problems.ts
  • src/lib/clients/cache.test.ts
  • src/lib/clients/cache_strategy.ts
  • src/lib/clients/contest_task_fetcher.ts
  • src/lib/clients/fixtures/record_requests.ts
  • src/lib/clients/http_client.ts
  • src/lib/clients/index.ts
  • src/lib/components/AuthForm.svelte
  • src/lib/components/Footer.svelte
  • src/lib/components/GradeLabel.svelte
  • src/lib/components/Header.svelte
  • src/lib/components/InputFieldWrapper.svelte
  • src/lib/components/LabelWithTooltips.svelte
  • src/lib/components/Messages/ErrorMessageAndReturnButton.svelte
  • src/lib/components/SubmissionButton.svelte
  • src/lib/components/SubmissionStatus/SubmissionStatusImage.svelte
  • src/lib/components/SubmissionStatus/UpdatingDropdown.svelte
  • src/lib/components/SubmissionStatus/UpdatingModal.svelte
  • src/lib/components/Tabs/ProblemListTabItem.svelte
  • src/lib/components/Tabs/TabItemWrapper.svelte
  • src/lib/components/TagForm.svelte
  • src/lib/components/TagListForEdit.svelte
  • src/lib/components/TaskForm.svelte
  • src/lib/components/TaskGradeList.svelte
  • src/lib/components/TaskGrades/GradeGuidelineTable.svelte
  • src/lib/components/TaskGrades/grade_guideline_table_data.ts
  • src/lib/components/TaskList.svelte
  • src/lib/components/TaskListSorted.svelte
  • src/lib/components/TaskSearchBox.svelte
  • src/lib/components/ThermometerProgressBar.svelte
  • src/lib/components/TooltipWrapper.svelte
  • src/lib/components/Trophies/CompletedTasks.svelte
  • src/lib/contests/fixtures/contest_name_and_task_index.ts
  • src/lib/contests/fixtures/contest_type.ts
  • src/lib/contests/types/contest.ts
  • src/lib/contests/utils/classification.test.ts
  • src/lib/contests/utils/classification.ts
  • src/lib/contests/utils/labels/aoj.test.ts
  • src/lib/contests/utils/labels/aoj.ts
  • src/lib/contests/utils/labels/atcoder_others.test.ts
  • src/lib/contests/utils/labels/axc.test.ts
  • src/lib/contests/utils/labels/index.test.ts
  • src/lib/contests/utils/labels/index.ts
  • src/lib/contests/utils/labels/joi.test.ts
  • src/lib/contests/utils/labels/past.test.ts
  • src/lib/contests/utils/labels/past.ts
  • src/lib/contests/utils/labels/universities.test.ts
  • src/lib/contests/utils/prefixes.ts
  • src/lib/contests/utils/priority.test.ts
  • src/lib/contests/utils/priority.ts
  • src/lib/contests/utils/task_index_label.test.ts
  • src/lib/server/tasks/cache.test.ts
  • src/lib/server/tasks/cache.ts
  • src/lib/services/answers.ts
  • src/lib/services/contest_task_pairs.ts
  • src/lib/services/submission_status.ts
  • src/lib/services/tags.test.ts
  • src/lib/services/tags.ts
  • src/lib/services/task_results.ts
  • src/lib/services/task_tags.ts
  • src/lib/services/tasks.ts
  • src/lib/services/users.ts
  • src/lib/stores/active_problem_list_tab.svelte.ts
  • src/lib/types/authorship.ts
  • src/lib/types/contest_task_pair.ts
  • src/lib/types/task.ts
  • src/lib/utils/account_transfer.ts
  • src/lib/utils/auth_forms.ts
  • src/lib/utils/authorship.test.ts
  • src/lib/utils/authorship.ts
  • src/lib/utils/contest_task_pair.ts
  • src/lib/utils/task.ts
  • src/lib/utils/task_filter.ts
  • src/lib/utils/task_grade.test.ts
  • src/lib/utils/task_grade.ts
  • src/lib/utils/url.test.ts
  • src/routes/(admin)/account_transfer/+page.server.ts
  • src/routes/(admin)/account_transfer/+page.svelte
  • src/routes/(admin)/tags/+page.server.ts
  • src/routes/(admin)/tags/+page.svelte
  • src/routes/(admin)/tags/[tag_id]/+page.server.ts
  • src/routes/(admin)/tags/[tag_id]/+page.svelte
  • src/routes/(admin)/tasks/+page.server.ts
  • src/routes/(admin)/tasks/+page.svelte
  • src/routes/(admin)/tasks/[task_id]/+page.server.ts
  • src/routes/(admin)/tasks/[task_id]/+page.svelte
  • src/routes/(admin)/tasks/_components/TaskTableForImport.svelte
  • src/routes/(admin)/tasks/_utils/contests.test.ts
  • src/routes/(admin)/tasks/_utils/contests.ts
  • src/routes/(admin)/tasks/grade/+page.server.ts
  • src/routes/(admin)/tasks/grade/+page.svelte
  • src/routes/(admin)/tasks/grade/_components/TaskGradeTable.svelte
  • src/routes/(admin)/tasks/grade/_utils/grade_table_filter.test.ts
  • src/routes/(admin)/tasks/grade/_utils/grade_table_filter.ts
  • src/routes/(admin)/workbooks/order/+page.svelte
  • src/routes/(admin)/workbooks/order/+server.ts
  • src/routes/(admin)/workbooks/order/_components/KanbanBoard.svelte
  • src/routes/(admin)/workbooks/order/_components/KanbanTabBar.svelte
  • src/routes/(admin)/workbooks/order/_fixtures/kanban.ts
  • src/routes/(admin)/workbooks/order/_utils/kanban.test.ts
  • src/routes/(admin)/workbooks/order/_utils/kanban.ts
  • src/routes/(auth)/login/+page.server.ts
  • src/routes/(auth)/login/+page.svelte
  • src/routes/(auth)/logout/+page.server.ts
  • src/routes/(auth)/signup/+page.server.ts
  • src/routes/(auth)/signup/+page.svelte
  • src/routes/+error.svelte
  • src/routes/+layout.server.ts
  • src/routes/+layout.svelte
  • src/routes/+page.server.ts
  • src/routes/+page.svelte
  • src/routes/about/+page.svelte
  • src/routes/about/SectionSnippets.svelte
  • src/routes/forgot_password/+page.server.ts
  • src/routes/forgot_password/+page.svelte
  • src/routes/problems/+page.server.ts
  • src/routes/problems/+page.svelte
  • src/routes/problems/[slug]/+page.server.ts
  • src/routes/problems/[slug]/+page.svelte
  • src/routes/problems/page_server.test.ts
  • src/routes/sitemap.xml/+server.ts
  • src/routes/users/[username]/+page.server.ts
  • src/routes/users/[username]/+page.svelte
  • src/routes/users/edit/+page.server.ts
  • src/routes/users/edit/+page.svelte
  • src/routes/votes/+page.svelte
  • src/routes/votes/[slug]/+page.server.ts
  • src/routes/votes/[slug]/+page.svelte
  • src/routes/votes/page_server.test.ts
  • src/routes/workbooks/+page.server.ts
  • src/routes/workbooks/+page.svelte
  • src/routes/workbooks/[slug]/+page.server.ts
  • src/routes/workbooks/[slug]/+page.svelte
  • src/routes/workbooks/create/+page.server.ts
  • src/routes/workbooks/create/+page.svelte
  • src/routes/workbooks/edit/[slug]/+page.server.ts
  • src/routes/workbooks/edit/[slug]/+page.svelte
  • src/test/lib/services/fixtures/task_results.ts
  • src/test/lib/services/task_results.test.ts
  • src/test/lib/services/tasks.test.ts
  • src/test/lib/services/users.test.ts
  • src/test/lib/stores/active_problem_list_tab.svelte.test.ts
  • src/test/lib/utils/account_transfer.test.ts
  • src/test/lib/utils/auth_forms.test.ts
  • src/test/lib/utils/contest_task_pair.test.ts
  • src/test/lib/utils/html.test.ts
  • src/test/lib/utils/task.test.ts
  • src/test/lib/utils/task_filter.test.ts
  • src/test/lib/utils/task_grade.test.ts
  • src/test/lib/utils/test_cases/account_transfer.ts
  • src/test/lib/utils/test_cases/task_results.ts
  • src/test/lib/utils/test_cases/task_table_header_name.ts
  • src/test/lib/utils/test_cases/task_url.ts
  • src/test/lib/utils/time.test.ts
  • src/test/lib/utils/url.test.ts
  • src/test/lib/zod/account_transfer_schema.test.ts
  • src/test/lib/zod/auth_schema.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@KATO-Hiro KATO-Hiro left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@KATO-Hiro
KATO-Hiro merged commit 485ce86 into staging Oct 18, 2026
3 checks passed
@KATO-Hiro
KATO-Hiro deleted the refactor/lib-subpath-imports branch October 18, 2026 13:36

This branch was successfully deployed

1 active deployment
preview — 7aba5fef Deployed Oct 18, 2026 by KATO-Hiro via preview #9016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant