Skip to content

Conversation

@kingston
Copy link
Collaborator

@kingston kingston commented Jul 4, 2025

Summary by CodeRabbit

  • New Features

    • Migrated React generators from React Router to TanStack Router for improved type safety and navigation.
    • Added a utility to convert string cases while preserving non-alphanumeric prefixes and suffixes.
  • Improvements

    • Refactored admin and web route generation to a more modular, hierarchical structure.
    • Updated file and directory naming conventions for generated components and pages.
    • Enhanced directory cleanup to ignore specific metadata files when removing empty folders.
    • Improved Sentry integration to support TanStack Router.
  • Bug Fixes

    • Fixed cycle detection in topological sorting for more complex graph scenarios.
  • Chores

    • Updated and expanded test coverage for directory utilities, string case conversion, and toposort cycle detection.
    • Cleaned up and removed deprecated code and configuration files related to React Router v6.
    • Improved ESLint rule for handling unused generator dependencies.

@vercel
Copy link

vercel bot commented Jul 4, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
baseplate-project-builder-web ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jul 4, 2025 9:13pm

@changeset-bot
Copy link

changeset-bot bot commented Jul 4, 2025

🦋 Changeset detected

Latest commit: 57fb163

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 17 packages
Name Type
@baseplate-dev/utils Patch
@baseplate-dev/sync Patch
@baseplate-dev/react-generators Patch
@baseplate-dev/core-generators Patch
@baseplate-dev/create-project Patch
@baseplate-dev/fastify-generators Patch
@baseplate-dev/project-builder-cli Patch
@baseplate-dev/project-builder-lib Patch
@baseplate-dev/project-builder-server Patch
@baseplate-dev/project-builder-test Patch
@baseplate-dev/project-builder-web Patch
@baseplate-dev/ui-components Patch
@baseplate-dev/plugin-storage Patch
@baseplate-dev/project-builder-common Patch
@baseplate-dev/plugin-auth Patch
@baseplate-dev/code-morph Patch
@baseplate-dev/tools Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link

coderabbitai bot commented Jul 4, 2025

Walkthrough

This update migrates the React code generation system from React Router to TanStack Router, refactoring route definitions, navigation, and generator logic accordingly. It removes legacy React Router-based route registration, restructures generator tasks, updates templates and configuration files, and introduces new utility functions and tests. The update also adapts Sentry integration and directory cleanup utilities, and enhances test coverage and code organization.

Changes

Files / Areas Change Summary
packages/react-generators/src/generators/core/react-router/*, .../admin/*, .../core/*, .../web/*, plugins/plugin-auth/src/auth0/generators/react/* Migrated route generation, templates, and navigation from React Router to TanStack Router; updated route definitions, navigation hooks, and generator logic; removed legacy route registration and related files.
packages/react-generators/src/constants/react-packages.ts Replaced react-router-dom with @tanstack/react-router and @tanstack/router-plugin in package list.
packages/react-generators/src/providers/routes.ts Simplified provider interfaces, removing route/layout registration methods.
packages/react-generators/src/utils/case.ts Removed unused dasherizeCamel function and dependency.
packages/react-generators/src/generators/core/_utils/*, .../react-not-found-handler/*, .../react-routes/* Deleted legacy route rendering utilities, not-found handler, and route generator files/configs.
packages/core-generators/src/renderers/extractor/utils/deduplicate-templates.ts Changed file sorting to process newest files first in deduplication.
packages/project-builder-server/src/compiler/admin/*, .../web/*, plugins/plugin-auth/src/auth0/core/node.ts Removed explicit id and layoutKey from route generator calls; restructured admin and web route trees.
packages/react-generators/src/generators/core/react-app/* Changed entry file from App.tsx (default export) to app.tsx (named export); updated imports and templates accordingly.
packages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsx Refactored navigation to use TanStack Router's Link instead of programmatic navigation.
packages/react-generators/src/generators/core/react-sentry/* Switched Sentry integration from React Router v6 to TanStack Router; simplified generator logic.
packages/utils/src/string/convert-case-with-prefix.ts, .../index.ts, .../convert-case-with-prefix.test.ts Added utility to convert string case while preserving non-alphanumeric prefix/suffix; added comprehensive tests and exports.
packages/sync/src/output/clean-deleted-files.ts, .../utils/directories.ts, .../directories.unit.test.ts Enhanced directory cleanup utilities to ignore specific files; improved and expanded test coverage.
packages/tools/eslint-configs/rules/no-unused-generator-dependencies.js Improved fix logic for removing unused dependency properties, handling commas correctly.
packages/utils/src/toposort/toposort.ts, .../toposort.unit.test.ts Improved cycle detection logic in toposort and added more comprehensive tests.

Sequence Diagram(s)

sequenceDiagram
    participant Generator as Code Generator
    participant TanstackRouter as @tanstack/react-router
    participant App as React App
    participant Sentry as Sentry Integration

    Generator->>TanstackRouter: Generate route definitions using createFileRoute/createRootRoute
    Generator->>App: Output app entrypoint and route files (app.tsx, app-routes.tsx, route tree)
    App->>TanstackRouter: Import and use generated routes
    App->>TanstackRouter: Render <AppRoutes /> using RouterProvider
    App->>Sentry: Initialize Sentry with tanstackRouterBrowserTracingIntegration(router)
Loading

Possibly related PRs

  • halfdomelabs/baseplate#585: Migrates routing logic from React Router to TanStack Router, closely matching this PR's core changes.
  • halfdomelabs/baseplate#519: Refactors generator logic and TypeScript code fragments, sharing a focus on generator system modernization.

📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7d97100 and 57fb163.

📒 Files selected for processing (3)
  • packages/react-generators/src/generators/core/react-app/templates/src/app/app.tsx (1 hunks)
  • packages/sync/src/utils/directories.ts (2 hunks)
  • packages/sync/src/utils/directories.unit.test.ts (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • packages/react-generators/src/generators/core/react-app/templates/src/app/app.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/sync/src/utils/directories.ts
🧰 Additional context used
📓 Path-based instructions (9)
`**/*.{ts,tsx}`: TypeScript with strict type checking Node 16 module resolution ...

**/*.{ts,tsx}: TypeScript with strict type checking
Node 16 module resolution - include file extensions in imports (.js)
Sort imports by group: external libs first, then local imports
Use camelCase for variables/functions, PascalCase for types/classes
Always include return types on top-level functions including React components (React.ReactElement)
Include absolute paths in import statements via tsconfig paths (@src/ is the alias for src/)
Order functions such that functions are placed below the variables/functions they use
If a particular interface or type is not exported, change the file so it is exported
Prefer using nullish coalescing operator (??) instead of logical or (||)
Use console.info/warn/error instead of console.log
Always use .js extensions in imports, even for TypeScript files
Specify explicit return types on all functions

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
`**/*.{unit,int}.test.ts`: Unit tests use `.unit.test.ts` suffix, integration te...

**/*.{unit,int}.test.ts: Unit tests use .unit.test.ts suffix, integration tests use .int.test.ts
Collocate tests with source files using .unit.test.ts or .int.test.ts suffixes

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
`**/*.test.ts`: Always import vitest globals explicitly (describe, it, expect) U...

**/*.test.ts: Always import vitest globals explicitly (describe, it, expect)
Use descriptive test names that explain what is being tested
Structure tests with clear setup, execution, and verification phases (Arrange-Act-Assert)
Always mock external API calls and file system operations in tests
Extract common setup code into test helpers
Include tests for error conditions and edge cases
Each test should be independent and not rely on others
Always reset mocks and clean up resources in afterEach
Leverage TypeScript for type-safe mocking in tests
Focus on testing public methods and behaviors, not implementation details
Each test should verify one specific behavior
Import test functions from 'vitest' (no globals)

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
`**/*`: Use kebab-case for file names

**/*: Use kebab-case for file names

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
`{packages,plugins}/**/*.{ts,tsx}`: Use TypeScript with strict type checking ena...

{packages,plugins}/**/*.{ts,tsx}: Use TypeScript with strict type checking enabled
All functions (excluding one-liner arrow functions) require explicit return types
Use camelCase for variables and functions
Use PascalCase for types and classes
Prefer functional programming patterns
Extract repeated components into distinct functions or components where applicable

📄 Source: CodeRabbit Inference Engine (.cursor/rules/code-style.mdc)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
`{packages,plugins}/**/*.unit.test.ts`: Unit tests use `.unit.test.ts` suffix

{packages,plugins}/**/*.unit.test.ts: Unit tests use .unit.test.ts suffix

📄 Source: CodeRabbit Inference Engine (.cursor/rules/code-style.mdc)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
`{packages,plugins}/**/*.{unit,int}.test.ts`: Always import vitest globals explicitly (describe, it, expect)

{packages,plugins}/**/*.{unit,int}.test.ts: Always import vitest globals explicitly (describe, it, expect)

📄 Source: CodeRabbit Inference Engine (.cursor/rules/code-style.mdc)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
`**/*.unit.test.{ts,tsx}`: Unit tests are colocated with source files using `.unit.test.ts` suffix

**/*.unit.test.{ts,tsx}: Unit tests are colocated with source files using .unit.test.ts suffix

📄 Source: CodeRabbit Inference Engine (.cursor/rules/tests.mdc)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
`**/*.test.{ts,tsx}`: For file system operations in tests, use memfs and mock 'node:fs' and 'node:fs/promises' with vi.mock

**/*.test.{ts,tsx}: For file system operations in tests, use memfs and mock 'node:fs' and 'node:fs/promises' with vi.mock

📄 Source: CodeRabbit Inference Engine (.cursor/rules/tests.mdc)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
packages/sync/src/utils/directories.unit.test.ts (14)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to **/*.test.{ts,tsx} : For file system operations in tests, use memfs and mock 'node:fs' and 'node:fs/promises' with vi.mock
Learnt from: kingston
PR: halfdomelabs/baseplate#510
File: packages/project-builder-server/src/sync/conflict-file-monitor.test.ts:19-24
Timestamp: 2025-04-23T06:44:30.952Z
Learning: When testing file operations in this codebase, the pattern is to use Vitest automocks for 'node:fs' and 'node:fs/promises' (without explicit implementation replacement) while populating a virtual filesystem with vol.fromJSON() from memfs. File operations in tests are performed directly via vol.promises methods.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{unit,int}.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to src/tests/**/*.{ts,tsx} : Test helpers are located in `src/tests/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to src/tests/**/*.{ts,tsx} : Test helpers are located in `src/tests/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Structure tests with clear setup, execution, and verification phases (Arrange-Act-Assert)
Learnt from: kingston
PR: halfdomelabs/baseplate#510
File: packages/project-builder-server/src/sync/conflict-file-monitor.test.ts:19-24
Timestamp: 2025-04-23T06:44:30.952Z
Learning: In this codebase, when testing file operations, Vitest's automocks for 'node:fs' and 'node:fs/promises' are used in conjunction with memfs, but without replacing the mock implementation explicitly in each test file. The virtual filesystem is populated using vol.fromJSON or similar methods, which works seamlessly with the automocks.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{unit,int}.test.ts : Collocate tests with source files using `.unit.test.ts` or `.int.test.ts` suffixes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Each test should be independent and not rely on others
Learnt from: kingston
PR: halfdomelabs/baseplate#510
File: packages/project-builder-server/src/sync/conflict-file-monitor.test.ts:19-24
Timestamp: 2025-04-23T06:44:30.952Z
Learning: In the project-builder-server test suite, Vitest automocks for 'node:fs' and 'node:fs/promises' are already configured to use memfs without needing explicit implementation replacement in each test file.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Import test functions from 'vitest' (no globals)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Always mock external API calls and file system operations in tests
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Include tests for error conditions and edge cases
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Test E2E
  • GitHub Check: Lint
  • GitHub Check: test
🔇 Additional comments (5)
packages/sync/src/utils/directories.unit.test.ts (5)

12-15: Excellent test structure improvement.

The addition of a top-level describe block with beforeEach hook provides better organization and ensures clean state between tests. This follows testing best practices.


39-70: Comprehensive test coverage for ignoreFiles functionality.

The new tests thoroughly cover the ignoreFiles parameter behavior:

  • Directory with only ignored files returns true
  • Directory with mixed ignored/non-ignored files returns false
  • Empty ignoreFiles array handling

The test logic and assertions are correct.


74-96: Well-structured test with clear AAA pattern.

The test properly uses:

  • Setup comments for clarity
  • Direct memfs operations (vol.unlinkSync) following codebase patterns
  • Appropriate assertions using vol.toJSON() and vol.existsSync()
  • Clear verification of expected directory removal behavior

169-192: Comprehensive test for ignoreFiles functionality.

The test correctly verifies that directories containing only ignored files are removed along with their ignored contents. The logic is sound:

  1. Creates structure with both regular file and ignored file
  2. Deletes the regular file
  3. Calls function with ignoreFiles parameter
  4. Verifies both the empty directory and the directory with only ignored files are removed

194-198: Good error handling test.

Testing graceful handling of non-existent directories is important for robustness. The test correctly verifies no exceptions are thrown.

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🔭 Outside diff range comments (1)
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx (1)

52-62: Add CSS class prefixes for plugin components.

According to the coding guidelines, all CSS classes in plugin components must be prefixed with the plugin name (auth-) to avoid style conflicts.

-    <div className="flex h-full items-center justify-center">
+    <div className="auth-flex auth-h-full auth-items-center auth-justify-center">
       {error ? (
-        <Card className="space-y-4 p-4">
+        <Card className="auth-space-y-4 auth-p-4">
           <Alert variant="error">{error}</Alert>
           <Button onClick={logOut}>Try Again</Button>
         </Card>
🧹 Nitpick comments (7)
packages/core-generators/src/renderers/extractor/utils/deduplicate-templates.ts (2)

8-8: Fix typo in JSDoc comment.

There's a typo in the JSDoc comment: "soruce files" should be "source files".

- * @param files Array of soruce files
+ * @param files Array of source files

24-26: Consider improving type safety for fileOptions access.

The type assertion (file.metadata.fileOptions as TemplateFileOptions) could be unsafe if the type is incorrect. Consider using a type guard or optional chaining with proper type checking.

- if (
-   'fileOptions' in file.metadata &&
-   (file.metadata.fileOptions as TemplateFileOptions).kind === 'singleton'
- ) {
+ if (
+   'fileOptions' in file.metadata &&
+   file.metadata.fileOptions &&
+   typeof file.metadata.fileOptions === 'object' &&
+   'kind' in file.metadata.fileOptions &&
+   file.metadata.fileOptions.kind === 'singleton'
+ ) {
packages/react-generators/src/generators/core/react/extractor.json (1)

45-45: importMapProviders can be dropped – it is noise here.

The extractor auto-infers providers; keeping an empty object adds churn to diffs.

-      "importMapProviders": {},
packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx (1)

1-1: Consider removing or replacing the @ts-nocheck directive.

The @ts-nocheck directive completely disables TypeScript checking for this file, which could hide type issues. Since this is a template file using placeholders like TPL_ROOT_ROUTE_OPTIONS, consider whether this directive is truly necessary or if more targeted type ignoring would be appropriate.

packages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsx (1)

3-3: Improve import specificity for better tree-shaking.

According to the coding guidelines, prefer importing specific types rather than the entire React namespace.

-import type React from 'react';
+import type { ReactElement } from 'react';

Then update the return type accordingly:

-function AuthenticatedAdminLayout(): React.ReactElement {
+function AuthenticatedAdminLayout(): ReactElement {
packages/utils/src/string/convert-case-with-prefix.test.ts (1)

1-291: Excellent comprehensive test coverage, but filename should follow guidelines.

The test suite is well-structured with proper Arrange-Act-Assert pattern and covers all important scenarios including edge cases. However, the filename should use .unit.test.ts suffix according to the coding guidelines for unit tests.

Consider renaming the file to follow the guidelines:

-convert-case-with-prefix.test.ts
+convert-case-with-prefix.unit.test.ts
packages/react-generators/src/generators/core/react-router/extractor.json (1)

28-37: Consider adding return type information for exported entities

The projectExports declares AppRoutes and router but doesn't specify their types. Per the coding guidelines, interfaces and types should be exported.

Consider documenting the expected types of these exports in a comment or through additional configuration to improve type safety and developer experience.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ef8e11e and 7d97100.

⛔ Files ignored due to path filters (67)
  • packages/react-generators/src/generators/admin/admin-bull-board/generated/template-paths.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-bull-board/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-crud-edit/generated/template-renderers.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-crud-edit/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-crud-list/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-home/generated/template-paths.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-home/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-layout/generated/index.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-layout/generated/template-paths.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-layout/generated/template-renderers.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-layout/generated/ts-import-providers.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/admin/admin-layout/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-app/generated/template-paths.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-app/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-not-found-handler/generated/index.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-not-found-handler/generated/template-paths.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-not-found-handler/generated/template-renderers.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-not-found-handler/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-router/generated/index.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-router/generated/template-paths.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-router/generated/template-renderers.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-router/generated/ts-import-providers.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-router/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-routes/generated/index.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-routes/generated/template-renderers.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-routes/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-sentry/generated/template-renderers.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react-sentry/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react/generated/template-paths.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react/generated/template-renderers.ts is excluded by !**/generated/**, !**/generated/**
  • packages/react-generators/src/generators/core/react/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/generated/template-paths.ts is excluded by !**/generated/**, !**/generated/**
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/generated/typed-templates.ts is excluded by !**/generated/**, !**/generated/**
  • tests/simple/baseplate/project-definition.json is excluded by !tests/**
  • tests/simple/packages/web/.prettierignore is excluded by !tests/**
  • tests/simple/packages/web/baseplate/file-id-map.json is excluded by !tests/**
  • tests/simple/packages/web/baseplate/generated/.prettierignore is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/eslint.config.js is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/index.html is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/package.json is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/app/app-routes.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/app/app.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/components/not-found-card/not-found-card.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/main.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/pages/NotFound.page.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/pages/index.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/route-tree.gen.ts is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/routes/__root.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/routes/index.tsx is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/src/services/sentry.ts is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/baseplate/generated/vite.config.ts is excluded by !**/generated/**, !tests/**, !**/generated/**
  • tests/simple/packages/web/eslint.config.js is excluded by !tests/**
  • tests/simple/packages/web/index.html is excluded by !tests/**
  • tests/simple/packages/web/package.json is excluded by !tests/**
  • tests/simple/packages/web/src/app/app-routes.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/app/app.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/components/not-found-card/not-found-card.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/main.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/pages/NotFound.page.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/pages/index.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/route-tree.gen.ts is excluded by !tests/**
  • tests/simple/packages/web/src/routes/__root.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/routes/home.gql is excluded by !tests/**
  • tests/simple/packages/web/src/routes/index.tsx is excluded by !tests/**
  • tests/simple/packages/web/src/services/sentry.ts is excluded by !tests/**
  • tests/simple/packages/web/vite.config.ts is excluded by !tests/**
  • tests/simple/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml, !tests/**
📒 Files selected for processing (74)
  • .changeset/four-comics-grab.md (1 hunks)
  • .changeset/large-olives-cheer.md (1 hunks)
  • .changeset/react-generators-tanstack-router.md (1 hunks)
  • packages/core-generators/src/renderers/extractor/utils/deduplicate-templates.ts (1 hunks)
  • packages/project-builder-server/src/compiler/admin/crud/index.ts (0 hunks)
  • packages/project-builder-server/src/compiler/admin/index.ts (2 hunks)
  • packages/project-builder-server/src/compiler/admin/sections.ts (0 hunks)
  • packages/project-builder-server/src/compiler/web/features.ts (0 hunks)
  • packages/project-builder-server/src/compiler/web/index.ts (1 hunks)
  • packages/react-generators/src/constants/react-packages.ts (1 hunks)
  • packages/react-generators/src/generators/admin/admin-bull-board/admin-bull-board.generator.ts (0 hunks)
  • packages/react-generators/src/generators/admin/admin-bull-board/extractor.json (2 hunks)
  • packages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsx (1 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts (6 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-edit/extractor.json (2 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx (2 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsx (1 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx (2 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.ts (2 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts (6 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-list/extractor.json (3 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsx (3 hunks)
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx (1 hunks)
  • packages/react-generators/src/generators/admin/admin-home/admin-home.generator.ts (1 hunks)
  • packages/react-generators/src/generators/admin/admin-home/extractor.json (2 hunks)
  • packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx (1 hunks)
  • packages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.ts (2 hunks)
  • packages/react-generators/src/generators/admin/admin-layout/extractor.json (1 hunks)
  • packages/react-generators/src/generators/admin/admin-layout/index.ts (1 hunks)
  • packages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsx (1 hunks)
  • packages/react-generators/src/generators/admin/admin-layout/templates/src/components/admin-layout/admin-layout.tsx (1 hunks)
  • packages/react-generators/src/generators/core/_utils/index.ts (0 hunks)
  • packages/react-generators/src/generators/core/_utils/render-routes.ts (0 hunks)
  • packages/react-generators/src/generators/core/index.ts (0 hunks)
  • packages/react-generators/src/generators/core/react-app/extractor.json (1 hunks)
  • packages/react-generators/src/generators/core/react-app/react-app.generator.ts (1 hunks)
  • packages/react-generators/src/generators/core/react-app/templates/src/app/App.tsx (1 hunks)
  • packages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsx (1 hunks)
  • packages/react-generators/src/generators/core/react-not-found-handler/extractor.json (0 hunks)
  • packages/react-generators/src/generators/core/react-not-found-handler/index.ts (0 hunks)
  • packages/react-generators/src/generators/core/react-not-found-handler/react-not-found-handler.generator.ts (0 hunks)
  • packages/react-generators/src/generators/core/react-not-found-handler/templates/src/pages/NotFound.page.tsx (0 hunks)
  • packages/react-generators/src/generators/core/react-router/extractor.json (1 hunks)
  • packages/react-generators/src/generators/core/react-router/index.ts (1 hunks)
  • packages/react-generators/src/generators/core/react-router/react-router.generator.ts (2 hunks)
  • packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx (1 hunks)
  • packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx (1 hunks)
  • packages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsx (1 hunks)
  • packages/react-generators/src/generators/core/react-router/templates/src/pages/index.tsx (0 hunks)
  • packages/react-generators/src/generators/core/react-routes/extractor.json (0 hunks)
  • packages/react-generators/src/generators/core/react-routes/react-routes.generator.ts (2 hunks)
  • packages/react-generators/src/generators/core/react-routes/templates/routes.tsx (0 hunks)
  • packages/react-generators/src/generators/core/react-sentry/extractor.json (1 hunks)
  • packages/react-generators/src/generators/core/react-sentry/react-sentry.generator.ts (3 hunks)
  • packages/react-generators/src/generators/core/react-sentry/templates/src/services/sentry.ts (2 hunks)
  • packages/react-generators/src/generators/core/react/extractor.json (1 hunks)
  • packages/react-generators/src/generators/core/react/react.generator.ts (1 hunks)
  • packages/react-generators/src/generators/core/react/templates/package/index.html (1 hunks)
  • packages/react-generators/src/providers/routes.ts (0 hunks)
  • packages/react-generators/src/utils/case.ts (1 hunks)
  • packages/sync/src/output/clean-deleted-files.ts (1 hunks)
  • packages/sync/src/utils/directories.ts (3 hunks)
  • packages/sync/src/utils/directories.unit.test.ts (1 hunks)
  • packages/tools/eslint-configs/rules/no-unused-generator-dependencies.js (1 hunks)
  • packages/utils/src/string/convert-case-with-prefix.test.ts (1 hunks)
  • packages/utils/src/string/convert-case-with-prefix.ts (1 hunks)
  • packages/utils/src/string/index.ts (1 hunks)
  • packages/utils/src/toposort/toposort.ts (1 hunks)
  • packages/utils/src/toposort/toposort.unit.test.ts (1 hunks)
  • plugins/plugin-auth/src/auth0/core/node.ts (0 hunks)
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/auth0-callback.generator.ts (0 hunks)
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/extractor.json (3 hunks)
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx (3 hunks)
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx (2 hunks)
💤 Files with no reviewable changes (17)
  • packages/project-builder-server/src/compiler/web/features.ts
  • packages/project-builder-server/src/compiler/admin/crud/index.ts
  • packages/project-builder-server/src/compiler/admin/sections.ts
  • plugins/plugin-auth/src/auth0/core/node.ts
  • packages/react-generators/src/generators/core/react-router/templates/src/pages/index.tsx
  • packages/react-generators/src/generators/core/index.ts
  • packages/react-generators/src/generators/core/react-not-found-handler/index.ts
  • packages/react-generators/src/generators/admin/admin-bull-board/admin-bull-board.generator.ts
  • packages/react-generators/src/generators/core/react-routes/templates/routes.tsx
  • packages/react-generators/src/providers/routes.ts
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/auth0-callback.generator.ts
  • packages/react-generators/src/generators/core/react-not-found-handler/extractor.json
  • packages/react-generators/src/generators/core/react-routes/extractor.json
  • packages/react-generators/src/generators/core/_utils/index.ts
  • packages/react-generators/src/generators/core/_utils/render-routes.ts
  • packages/react-generators/src/generators/core/react-not-found-handler/templates/src/pages/NotFound.page.tsx
  • packages/react-generators/src/generators/core/react-not-found-handler/react-not-found-handler.generator.ts
🧰 Additional context used
📓 Path-based instructions (14)
`.changeset/*.md`: If you are adding a new feature or changing an existing feature, add a new Changeset in the `.changeset/` directory

.changeset/*.md: If you are adding a new feature or changing an existing feature, add a new Changeset in the .changeset/ directory

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • .changeset/react-generators-tanstack-router.md
  • .changeset/large-olives-cheer.md
  • .changeset/four-comics-grab.md
`**/*.{ts,tsx}`: TypeScript with strict type checking Node 16 module resolution ...

**/*.{ts,tsx}: TypeScript with strict type checking
Node 16 module resolution - include file extensions in imports (.js)
Sort imports by group: external libs first, then local imports
Use camelCase for variables/functions, PascalCase for types/classes
Always include return types on top-level functions including React components (React.ReactElement)
Include absolute paths in import statements via tsconfig paths (@src/ is the alias for src/)
Order functions such that functions are placed below the variables/functions they use
If a particular interface or type is not exported, change the file so it is exported
Prefer using nullish coalescing operator (??) instead of logical or (||)
Use console.info/warn/error instead of console.log
Always use .js extensions in imports, even for TypeScript files
Specify explicit return types on all functions

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/react-generators/src/generators/admin/admin-layout/templates/src/components/admin-layout/admin-layout.tsx
  • packages/react-generators/src/generators/core/react/react.generator.ts
  • packages/project-builder-server/src/compiler/web/index.ts
  • packages/sync/src/output/clean-deleted-files.ts
  • packages/utils/src/string/index.ts
  • packages/react-generators/src/utils/case.ts
  • packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx
  • packages/react-generators/src/generators/core/react-app/react-app.generator.ts
  • packages/core-generators/src/renderers/extractor/utils/deduplicate-templates.ts
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsx
  • packages/react-generators/src/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.ts
  • packages/react-generators/src/generators/core/react-app/templates/src/app/App.tsx
  • packages/react-generators/src/constants/react-packages.ts
  • packages/react-generators/src/generators/core/react-router/index.ts
  • packages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsx
  • packages/react-generators/src/generators/admin/admin-home/admin-home.generator.ts
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx
  • packages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsx
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx
  • packages/utils/src/toposort/toposort.ts
  • packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx
  • packages/project-builder-server/src/compiler/admin/index.ts
  • packages/react-generators/src/generators/admin/admin-layout/index.ts
  • packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx
  • packages/utils/src/string/convert-case-with-prefix.test.ts
  • packages/sync/src/utils/directories.unit.test.ts
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx
  • packages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsx
  • packages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.ts
  • packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx
  • packages/utils/src/toposort/toposort.unit.test.ts
  • packages/react-generators/src/generators/core/react-sentry/templates/src/services/sentry.ts
  • packages/react-generators/src/generators/core/react-sentry/react-sentry.generator.ts
  • packages/react-generators/src/generators/core/react-routes/react-routes.generator.ts
  • packages/utils/src/string/convert-case-with-prefix.ts
  • packages/sync/src/utils/directories.ts
  • packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts
  • packages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsx
  • packages/react-generators/src/generators/core/react-router/react-router.generator.ts
`**/*`: Use kebab-case for file names

**/*: Use kebab-case for file names

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/react-generators/src/generators/admin/admin-layout/templates/src/components/admin-layout/admin-layout.tsx
  • packages/react-generators/src/generators/core/react/templates/package/index.html
  • packages/react-generators/src/generators/core/react/react.generator.ts
  • packages/project-builder-server/src/compiler/web/index.ts
  • packages/sync/src/output/clean-deleted-files.ts
  • packages/utils/src/string/index.ts
  • packages/react-generators/src/generators/core/react-app/extractor.json
  • packages/react-generators/src/utils/case.ts
  • packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx
  • packages/react-generators/src/generators/admin/admin-home/extractor.json
  • packages/react-generators/src/generators/core/react-app/react-app.generator.ts
  • packages/core-generators/src/renderers/extractor/utils/deduplicate-templates.ts
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsx
  • packages/react-generators/src/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.ts
  • packages/react-generators/src/generators/core/react-app/templates/src/app/App.tsx
  • packages/react-generators/src/constants/react-packages.ts
  • packages/react-generators/src/generators/core/react-sentry/extractor.json
  • packages/react-generators/src/generators/core/react-router/index.ts
  • packages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsx
  • packages/react-generators/src/generators/admin/admin-bull-board/extractor.json
  • packages/react-generators/src/generators/admin/admin-home/admin-home.generator.ts
  • packages/react-generators/src/generators/core/react/extractor.json
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx
  • packages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsx
  • packages/tools/eslint-configs/rules/no-unused-generator-dependencies.js
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/extractor.json
  • packages/utils/src/toposort/toposort.ts
  • packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx
  • packages/project-builder-server/src/compiler/admin/index.ts
  • packages/react-generators/src/generators/admin/admin-layout/index.ts
  • packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/extractor.json
  • packages/utils/src/string/convert-case-with-prefix.test.ts
  • packages/sync/src/utils/directories.unit.test.ts
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx
  • packages/react-generators/src/generators/admin/admin-layout/extractor.json
  • packages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsx
  • packages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.ts
  • packages/react-generators/src/generators/core/react-router/extractor.json
  • packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx
  • packages/utils/src/toposort/toposort.unit.test.ts
  • packages/react-generators/src/generators/core/react-sentry/templates/src/services/sentry.ts
  • packages/react-generators/src/generators/admin/admin-crud-edit/extractor.json
  • packages/react-generators/src/generators/core/react-sentry/react-sentry.generator.ts
  • packages/react-generators/src/generators/core/react-routes/react-routes.generator.ts
  • packages/utils/src/string/convert-case-with-prefix.ts
  • packages/sync/src/utils/directories.ts
  • packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts
  • packages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsx
  • packages/react-generators/src/generators/core/react-router/react-router.generator.ts
`**/*.tsx`: Use ShadCN-based components from `@baseplate-dev/ui-components` inst...

**/*.tsx: Use ShadCN-based components from @baseplate-dev/ui-components instead of creating custom ones
Use Tailwind CSS utilities exclusively for styling; avoid writing custom CSS classes
Use icons from react-icons/md (Material Design icons); avoid using other icon libraries

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/react-generators/src/generators/admin/admin-layout/templates/src/components/admin-layout/admin-layout.tsx
  • packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsx
  • packages/react-generators/src/generators/core/react-app/templates/src/app/App.tsx
  • packages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsx
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx
  • packages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsx
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx
  • packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx
  • packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx
  • packages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsx
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx
  • packages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsx
`{packages,plugins}/**/*.{ts,tsx}`: Use TypeScript with strict type checking ena...

{packages,plugins}/**/*.{ts,tsx}: Use TypeScript with strict type checking enabled
All functions (excluding one-liner arrow functions) require explicit return types
Use camelCase for variables and functions
Use PascalCase for types and classes
Prefer functional programming patterns
Extract repeated components into distinct functions or components where applicable

📄 Source: CodeRabbit Inference Engine (.cursor/rules/code-style.mdc)

List of files the instruction was applied to:

  • packages/react-generators/src/generators/admin/admin-layout/templates/src/components/admin-layout/admin-layout.tsx
  • packages/react-generators/src/generators/core/react/react.generator.ts
  • packages/project-builder-server/src/compiler/web/index.ts
  • packages/sync/src/output/clean-deleted-files.ts
  • packages/utils/src/string/index.ts
  • packages/react-generators/src/utils/case.ts
  • packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx
  • packages/react-generators/src/generators/core/react-app/react-app.generator.ts
  • packages/core-generators/src/renderers/extractor/utils/deduplicate-templates.ts
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsx
  • packages/react-generators/src/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.ts
  • packages/react-generators/src/generators/core/react-app/templates/src/app/App.tsx
  • packages/react-generators/src/constants/react-packages.ts
  • packages/react-generators/src/generators/core/react-router/index.ts
  • packages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsx
  • packages/react-generators/src/generators/admin/admin-home/admin-home.generator.ts
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx
  • packages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsx
  • packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx
  • packages/utils/src/toposort/toposort.ts
  • packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx
  • packages/project-builder-server/src/compiler/admin/index.ts
  • packages/react-generators/src/generators/admin/admin-layout/index.ts
  • packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx
  • packages/utils/src/string/convert-case-with-prefix.test.ts
  • packages/sync/src/utils/directories.unit.test.ts
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx
  • packages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsx
  • packages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.ts
  • packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx
  • packages/utils/src/toposort/toposort.unit.test.ts
  • packages/react-generators/src/generators/core/react-sentry/templates/src/services/sentry.ts
  • packages/react-generators/src/generators/core/react-sentry/react-sentry.generator.ts
  • packages/react-generators/src/generators/core/react-routes/react-routes.generator.ts
  • packages/utils/src/string/convert-case-with-prefix.ts
  • packages/sync/src/utils/directories.ts
  • packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts
  • packages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsx
  • packages/react-generators/src/generators/core/react-router/react-router.generator.ts
`**/index.{ts,tsx}`: Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports

**/index.{ts,tsx}: Prefer barrel exports e.g. export * from './foo.js' instead of individual named exports

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/project-builder-server/src/compiler/web/index.ts
  • packages/utils/src/string/index.ts
  • packages/react-generators/src/generators/core/react-router/index.ts
  • packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx
  • packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx
  • packages/project-builder-server/src/compiler/admin/index.ts
  • packages/react-generators/src/generators/admin/admin-layout/index.ts
  • packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx
  • packages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsx
`**/*.test.ts`: Always import vitest globals explicitly (describe, it, expect) U...

**/*.test.ts: Always import vitest globals explicitly (describe, it, expect)
Use descriptive test names that explain what is being tested
Structure tests with clear setup, execution, and verification phases (Arrange-Act-Assert)
Always mock external API calls and file system operations in tests
Extract common setup code into test helpers
Include tests for error conditions and edge cases
Each test should be independent and not rely on others
Always reset mocks and clean up resources in afterEach
Leverage TypeScript for type-safe mocking in tests
Focus on testing public methods and behaviors, not implementation details
Each test should verify one specific behavior
Import test functions from 'vitest' (no globals)

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/utils/src/string/convert-case-with-prefix.test.ts
  • packages/sync/src/utils/directories.unit.test.ts
  • packages/utils/src/toposort/toposort.unit.test.ts
`**/*.test.{ts,tsx}`: For file system operations in tests, use memfs and mock 'node:fs' and 'node:fs/promises' with vi.mock

**/*.test.{ts,tsx}: For file system operations in tests, use memfs and mock 'node:fs' and 'node:fs/promises' with vi.mock

📄 Source: CodeRabbit Inference Engine (.cursor/rules/tests.mdc)

List of files the instruction was applied to:

  • packages/utils/src/string/convert-case-with-prefix.test.ts
  • packages/sync/src/utils/directories.unit.test.ts
  • packages/utils/src/toposort/toposort.unit.test.ts
`**/*.{unit,int}.test.ts`: Unit tests use `.unit.test.ts` suffix, integration te...

**/*.{unit,int}.test.ts: Unit tests use .unit.test.ts suffix, integration tests use .int.test.ts
Collocate tests with source files using .unit.test.ts or .int.test.ts suffixes

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
  • packages/utils/src/toposort/toposort.unit.test.ts
`{packages,plugins}/**/*.unit.test.ts`: Unit tests use `.unit.test.ts` suffix

{packages,plugins}/**/*.unit.test.ts: Unit tests use .unit.test.ts suffix

📄 Source: CodeRabbit Inference Engine (.cursor/rules/code-style.mdc)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
  • packages/utils/src/toposort/toposort.unit.test.ts
`{packages,plugins}/**/*.{unit,int}.test.ts`: Always import vitest globals explicitly (describe, it, expect)

{packages,plugins}/**/*.{unit,int}.test.ts: Always import vitest globals explicitly (describe, it, expect)

📄 Source: CodeRabbit Inference Engine (.cursor/rules/code-style.mdc)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
  • packages/utils/src/toposort/toposort.unit.test.ts
`**/*.unit.test.{ts,tsx}`: Unit tests are colocated with source files using `.unit.test.ts` suffix

**/*.unit.test.{ts,tsx}: Unit tests are colocated with source files using .unit.test.ts suffix

📄 Source: CodeRabbit Inference Engine (.cursor/rules/tests.mdc)

List of files the instruction was applied to:

  • packages/sync/src/utils/directories.unit.test.ts
  • packages/utils/src/toposort/toposort.unit.test.ts
`plugins/*/**/*.tsx`: In plugins, prefix all Tailwind classes with the plugin name (e.g., `auth-`, `storage-`)

plugins/*/**/*.tsx: In plugins, prefix all Tailwind classes with the plugin name (e.g., auth-, storage-)

📄 Source: CodeRabbit Inference Engine (CLAUDE.md)

List of files the instruction was applied to:

  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx
`plugins/plugin-*/**/*.tsx`: All CSS classes used in `className` attributes with...

plugins/plugin-*/**/*.tsx: All CSS classes used in className attributes within plugin components MUST be prefixed with the plugin name to avoid style conflicts.
When using utility functions like cn(), all CSS classes passed to cn() in plugin components MUST be prefixed with the plugin name.

📄 Source: CodeRabbit Inference Engine (plugins/CLAUDE.md)

List of files the instruction was applied to:

  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx
  • plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx
🧠 Learnings (55)
📓 Common learnings
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
.changeset/react-generators-tanstack-router.md (2)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
packages/react-generators/src/generators/admin/admin-layout/templates/src/components/admin-layout/admin-layout.tsx (2)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
packages/react-generators/src/generators/core/react/templates/package/index.html (12)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: kingston
PR: halfdomelabs/baseplate#562
File: plugins/plugin-auth/package.json:32-36
Timestamp: 2025-06-03T09:11:29.651Z
Learning: With TypeScript project references, TypeScript compilation is watched from the root level using "watch:tsc:root" script, so individual packages no longer need to include their "tsc:watch" scripts in their local "watch" commands. The local "tsc:watch" scripts are renamed from "watch:tsc" but are not meant to be run as part of the package's watch command since TypeScript watching is handled centrally at the workspace root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always use `.js` extensions in imports, even for TypeScript files
.changeset/large-olives-cheer.md (2)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to .changeset/*.md : If you are adding a new feature or changing an existing feature, add a new Changeset in the `.changeset/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
packages/react-generators/src/generators/core/react/react.generator.ts (13)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: kingston
PR: halfdomelabs/baseplate#562
File: plugins/plugin-auth/package.json:32-36
Timestamp: 2025-06-03T09:11:29.651Z
Learning: With TypeScript project references, TypeScript compilation is watched from the root level using "watch:tsc:root" script, so individual packages no longer need to include their "tsc:watch" scripts in their local "watch" commands. The local "tsc:watch" scripts are renamed from "watch:tsc" but are not meant to be run as part of the package's watch command since TypeScript watching is handled centrally at the workspace root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts:90-94
Timestamp: 2025-05-05T06:36:50.687Z
Learning: In this codebase, import paths can include `.ts` extensions, and the `resolveModuleSpecifier` function will handle them appropriately. There's no need to strip file extensions before passing paths to functions like `TsCodeUtils.importFragment`.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
packages/project-builder-server/src/compiler/web/index.ts (10)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: plugins/baseplate-plugin-storage/src/generators/react/upload-components/upload-components.generator.ts:108-112
Timestamp: 2025-05-05T06:37:43.106Z
Learning: The template extractor in the baseplate codebase can automatically infer and determine the necessary import map providers for certain templates, making explicit specification of importMapProviders unnecessary in those cases.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: kingston
PR: halfdomelabs/baseplate#562
File: plugins/plugin-auth/package.json:32-36
Timestamp: 2025-06-03T09:11:29.651Z
Learning: With TypeScript project references, TypeScript compilation is watched from the root level using "watch:tsc:root" script, so individual packages no longer need to include their "tsc:watch" scripts in their local "watch" commands. The local "tsc:watch" scripts are renamed from "watch:tsc" but are not meant to be run as part of the package's watch command since TypeScript watching is handled centrally at the workspace root.
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
.changeset/four-comics-grab.md (5)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to .changeset/*.md : If you are adding a new feature or changing an existing feature, add a new Changeset in the `.changeset/` directory
Learnt from: kingston
PR: halfdomelabs/baseplate#539
File: scripts/check-changesets.ts:70-79
Timestamp: 2025-05-08T12:56:11.723Z
Learning: In the check-changesets.ts script for monorepo validation, `npm pack ${pkg.name}@latest` is intentionally used to pack the most recently published version (not local changes) for comparison purposes to determine if changes require new changesets.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
packages/utils/src/string/index.ts (15)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{unit,int}.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts:90-94
Timestamp: 2025-05-05T06:36:50.687Z
Learning: In this codebase, import paths can include `.ts` extensions, and the `resolveModuleSpecifier` function will handle them appropriately. There's no need to strip file extensions before passing paths to functions like `TsCodeUtils.importFragment`.
Learnt from: kingston
PR: halfdomelabs/baseplate#539
File: scripts/check-changesets.ts:10-13
Timestamp: 2025-05-08T12:56:59.222Z
Learning: Node.js 22.0.0 and later versions include both `glob` and `globSync` functionality in the core `node:fs` module, making `import { promises as fs, globSync } from 'node:fs';` valid syntax.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Import test functions from 'vitest' (no globals)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: kingston
PR: halfdomelabs/baseplate#539
File: scripts/check-changesets.ts:10-13
Timestamp: 2025-05-08T12:56:59.222Z
Learning: Node.js 20.12.0 and above include `globSync` in the core `node:fs` module, so `import { promises as fs, globSync } from 'node:fs';` is valid syntax in projects using these Node.js versions.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
packages/react-generators/src/generators/core/react-app/extractor.json (13)
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Use camelCase for variables/functions, PascalCase for types/classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to **/*.unit.test.{ts,tsx} : Unit tests are colocated with source files using `.unit.test.ts` suffix
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to plugins/*/**/*.tsx : In plugins, prefix all Tailwind classes with the plugin name (e.g., `auth-`, `storage-`)
packages/react-generators/src/utils/case.ts (10)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Use camelCase for variables/functions, PascalCase for types/classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/* : Use kebab-case for file names
packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx (10)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use TypeScript with strict type checking enabled
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Specify explicit return types on all functions
Learnt from: kingston
PR: halfdomelabs/baseplate#562
File: plugins/plugin-auth/package.json:32-36
Timestamp: 2025-06-03T09:11:29.651Z
Learning: With TypeScript project references, TypeScript compilation is watched from the root level using "watch:tsc:root" script, so individual packages no longer need to include their "tsc:watch" scripts in their local "watch" commands. The local "tsc:watch" scripts are renamed from "watch:tsc" but are not meant to be run as part of the package's watch command since TypeScript watching is handled centrally at the workspace root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
packages/react-generators/src/generators/admin/admin-home/extractor.json (18)
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-components/admin-components.generator.ts:55-61
Timestamp: 2025-05-05T06:35:13.300Z
Learning: In generators, paths should be merged with forward slashes (/) only since JavaScript generated files use POSIX style separators. The system handles conversion to Windows style separators at later stages when writing out files.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to src/__mocks__/**/*.{ts,tsx} : Manual mocks are in `src/__mocks__/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to src/__mocks__/**/*.{ts,tsx} : Manual mocks are in `src/__mocks__/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to src/tests/**/*.{ts,tsx} : Test helpers are located in `src/tests/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to src/tests/**/*.{ts,tsx} : Test helpers are located in `src/tests/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts:90-94
Timestamp: 2025-05-05T06:36:50.687Z
Learning: In this codebase, import paths can include `.ts` extensions, and the `resolveModuleSpecifier` function will handle them appropriately. There's no need to strip file extensions before passing paths to functions like `TsCodeUtils.importFragment`.
packages/react-generators/src/generators/core/react-app/react-app.generator.ts (13)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts:90-94
Timestamp: 2025-05-05T06:36:50.687Z
Learning: In this codebase, import paths can include `.ts` extensions, and the `resolveModuleSpecifier` function will handle them appropriately. There's no need to strip file extensions before passing paths to functions like `TsCodeUtils.importFragment`.
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always use `.js` extensions in imports, even for TypeScript files
packages/core-generators/src/renderers/extractor/utils/deduplicate-templates.ts (7)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Sort imports by group: external libs first, then local imports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Order functions such that functions are placed below the variables/functions they use
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{unit,int}.test.ts : Collocate tests with source files using `.unit.test.ts` or `.int.test.ts` suffixes
packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsx (11)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : All functions (excluding one-liner arrow functions) require explicit return types
Learnt from: kingston
PR: halfdomelabs/baseplate#544
File: packages/ui-components/src/components/Command/Command.tsx:16-31
Timestamp: 2025-05-12T08:29:52.819Z
Learning: In React 19, function components automatically receive refs as regular props, eliminating the need for React.forwardRef. This allows components to directly destructure and use the ref prop, simplifying component definitions while maintaining the same ref forwarding functionality.
packages/react-generators/src/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.ts (12)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Sort imports by group: external libs first, then local imports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
Learnt from: kingston
PR: halfdomelabs/baseplate#539
File: scripts/check-changesets.ts:10-13
Timestamp: 2025-05-08T12:56:59.222Z
Learning: Node.js 20.12.0 and above include `globSync` in the core `node:fs` module, so `import { promises as fs, globSync } from 'node:fs';` is valid syntax in projects using these Node.js versions.
Learnt from: kingston
PR: halfdomelabs/baseplate#539
File: scripts/check-changesets.ts:10-13
Timestamp: 2025-05-08T12:56:59.222Z
Learning: Node.js 22.0.0 and later versions include both `glob` and `globSync` functionality in the core `node:fs` module, making `import { promises as fs, globSync } from 'node:fs';` valid syntax.
packages/react-generators/src/generators/core/react-app/templates/src/app/App.tsx (12)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Specify explicit return types on all functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : All functions (excluding one-liner arrow functions) require explicit return types
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Use camelCase for variables/functions, PascalCase for types/classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
packages/react-generators/src/constants/react-packages.ts (4)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
packages/react-generators/src/generators/core/react-sentry/extractor.json (10)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: plugins/baseplate-plugin-storage/src/generators/react/upload-components/upload-components.generator.ts:108-112
Timestamp: 2025-05-05T06:37:43.106Z
Learning: The template extractor in the baseplate codebase can automatically infer and determine the necessary import map providers for certain templates, making explicit specification of importMapProviders unnecessary in those cases.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
packages/react-generators/src/generators/core/react-router/index.ts (12)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{unit,int}.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Sort imports by group: external libs first, then local imports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
packages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsx (4)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
packages/react-generators/src/generators/admin/admin-bull-board/extractor.json (12)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-components/admin-components.generator.ts:55-61
Timestamp: 2025-05-05T06:35:13.300Z
Learning: In generators, paths should be merged with forward slashes (/) only since JavaScript generated files use POSIX style separators. The system handles conversion to Windows style separators at later stages when writing out files.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to src/__mocks__/**/*.{ts,tsx} : Manual mocks are in `src/__mocks__/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to src/__mocks__/**/*.{ts,tsx} : Manual mocks are in `src/__mocks__/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
packages/react-generators/src/generators/admin/admin-home/admin-home.generator.ts (4)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
packages/react-generators/src/generators/core/react/extractor.json (16)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: kingston
PR: halfdomelabs/baseplate#562
File: plugins/plugin-auth/package.json:32-36
Timestamp: 2025-06-03T09:11:29.651Z
Learning: With TypeScript project references, TypeScript compilation is watched from the root level using "watch:tsc:root" script, so individual packages no longer need to include their "tsc:watch" scripts in their local "watch" commands. The local "tsc:watch" scripts are renamed from "watch:tsc" but are not meant to be run as part of the package's watch command since TypeScript watching is handled centrally at the workspace root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to **/*.unit.test.{ts,tsx} : Unit tests are colocated with source files using `.unit.test.ts` suffix
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use TypeScript with strict type checking enabled
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx (6)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
packages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsx (7)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
packages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsx (8)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx (7)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
packages/react-generators/src/generators/admin/admin-crud-list/extractor.json (6)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx (4)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx (6)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
packages/project-builder-server/src/compiler/admin/index.ts (7)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-components/admin-components.generator.ts:55-61
Timestamp: 2025-05-05T06:35:13.300Z
Learning: In generators, paths should be merged with forward slashes (/) only since JavaScript generated files use POSIX style separators. The system handles conversion to Windows style separators at later stages when writing out files.
packages/react-generators/src/generators/admin/admin-layout/index.ts (11)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Sort imports by group: external libs first, then local imports
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx (4)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/extractor.json (14)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to plugins/*/**/*.tsx : In plugins, prefix all Tailwind classes with the plugin name (e.g., `auth-`, `storage-`)
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: kingston
PR: halfdomelabs/baseplate#562
File: plugins/plugin-auth/package.json:32-36
Timestamp: 2025-06-03T09:11:29.651Z
Learning: With TypeScript project references, TypeScript compilation is watched from the root level using "watch:tsc:root" script, so individual packages no longer need to include their "tsc:watch" scripts in their local "watch" commands. The local "tsc:watch" scripts are renamed from "watch:tsc" but are not meant to be run as part of the package's watch command since TypeScript watching is handled centrally at the workspace root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
packages/utils/src/string/convert-case-with-prefix.test.ts (14)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Include tests for error conditions and edge cases
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Use descriptive test names that explain what is being tested
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.unit.test.ts : Unit tests use `.unit.test.ts` suffix
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{unit,int}.test.ts : Unit tests use `.unit.test.ts` suffix, integration tests use `.int.test.ts`
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{unit,int}.test.ts : Collocate tests with source files using `.unit.test.ts` or `.int.test.ts` suffixes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to **/*.int.test.{ts,tsx} : Integration tests use `.int.test.ts` suffix
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to **/*.unit.test.{ts,tsx} : Unit tests are colocated with source files using `.unit.test.ts` suffix
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.int.test.ts : Integration tests use `.int.test.ts` suffix
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Each test should verify one specific behavior
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Focus on testing public methods and behaviors, not implementation details
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{unit,int}.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Import test functions from 'vitest' (no globals)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Structure tests with clear setup, execution, and verification phases (Arrange-Act-Assert)
packages/sync/src/utils/directories.unit.test.ts (17)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{unit,int}.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to src/tests/**/*.{ts,tsx} : Test helpers are located in `src/tests/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to src/tests/**/*.{ts,tsx} : Test helpers are located in `src/tests/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Structure tests with clear setup, execution, and verification phases (Arrange-Act-Assert)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Use descriptive test names that explain what is being tested
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Colocate tests with implementation files, e.g. for `./utils.ts`, add the test to `./utils.unit.test.ts`
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Extract common setup code into test helpers
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to **/*.test.{ts,tsx} : For file system operations in tests, use memfs and mock 'node:fs' and 'node:fs/promises' with vi.mock
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Each test should be independent and not rely on others
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{unit,int}.test.ts : Collocate tests with source files using `.unit.test.ts` or `.int.test.ts` suffixes
Learnt from: kingston
PR: halfdomelabs/baseplate#510
File: packages/project-builder-server/src/sync/conflict-file-monitor.test.ts:19-24
Timestamp: 2025-04-23T06:44:30.952Z
Learning: When testing file operations in this codebase, the pattern is to use Vitest automocks for 'node:fs' and 'node:fs/promises' (without explicit implementation replacement) while populating a virtual filesystem with vol.fromJSON() from memfs. File operations in tests are performed directly via vol.promises methods.
Learnt from: kingston
PR: halfdomelabs/baseplate#510
File: packages/project-builder-server/src/sync/conflict-file-monitor.test.ts:19-24
Timestamp: 2025-04-23T06:44:30.952Z
Learning: In this codebase, when testing file operations, Vitest's automocks for 'node:fs' and 'node:fs/promises' are used in conjunction with memfs, but without replacing the mock implementation explicitly in each test file. The virtual filesystem is populated using vol.fromJSON or similar methods, which works seamlessly with the automocks.
Learnt from: kingston
PR: halfdomelabs/baseplate#510
File: packages/project-builder-server/src/sync/conflict-file-monitor.test.ts:19-24
Timestamp: 2025-04-23T06:44:30.952Z
Learning: In the project-builder-server test suite, Vitest automocks for 'node:fs' and 'node:fs/promises' are already configured to use memfs without needing explicit implementation replacement in each test file.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Import test functions from 'vitest' (no globals)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Always mock external API calls and file system operations in tests
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Include tests for error conditions and edge cases
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx (4)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to plugins/*/**/*.tsx : In plugins, prefix all Tailwind classes with the plugin name (e.g., `auth-`, `storage-`)
packages/react-generators/src/generators/admin/admin-layout/extractor.json (11)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: plugins/baseplate-plugin-storage/src/generators/react/upload-components/upload-components.generator.ts:108-112
Timestamp: 2025-05-05T06:37:43.106Z
Learning: The template extractor in the baseplate codebase can automatically infer and determine the necessary import map providers for certain templates, making explicit specification of importMapProviders unnecessary in those cases.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to plugins/*/**/*.tsx : In plugins, prefix all Tailwind classes with the plugin name (e.g., `auth-`, `storage-`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
packages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsx (4)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
packages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.ts (13)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Sort imports by group: external libs first, then local imports
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts:90-94
Timestamp: 2025-05-05T06:36:50.687Z
Learning: In this codebase, import paths can include `.ts` extensions, and the `resolveModuleSpecifier` function will handle them appropriately. There's no need to strip file extensions before passing paths to functions like `TsCodeUtils.importFragment`.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: plugins/baseplate-plugin-storage/src/generators/react/upload-components/upload-components.generator.ts:108-112
Timestamp: 2025-05-05T06:37:43.106Z
Learning: The template extractor in the baseplate codebase can automatically infer and determine the necessary import map providers for certain templates, making explicit specification of importMapProviders unnecessary in those cases.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{unit,int}.test.ts : Always import vitest globals explicitly (describe, it, expect)
packages/react-generators/src/generators/core/react-router/extractor.json (13)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: plugins/baseplate-plugin-storage/src/generators/react/upload-components/upload-components.generator.ts:108-112
Timestamp: 2025-05-05T06:37:43.106Z
Learning: The template extractor in the baseplate codebase can automatically infer and determine the necessary import map providers for certain templates, making explicit specification of importMapProviders unnecessary in those cases.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/index.{ts,tsx} : Prefer barrel exports e.g. `export * from './foo.js'` instead of individual named exports
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to src/__mocks__/**/*.{ts,tsx} : Manual mocks are in `src/__mocks__/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to src/__mocks__/**/*.{ts,tsx} : Manual mocks are in `src/__mocks__/` directory
packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts (11)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-components/admin-components.generator.ts:55-61
Timestamp: 2025-05-05T06:35:13.300Z
Learning: In generators, paths should be merged with forward slashes (/) only since JavaScript generated files use POSIX style separators. The system handles conversion to Windows style separators at later stages when writing out files.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: plugins/baseplate-plugin-storage/src/generators/react/upload-components/upload-components.generator.ts:108-112
Timestamp: 2025-05-05T06:37:43.106Z
Learning: The template extractor in the baseplate codebase can automatically infer and determine the necessary import map providers for certain templates, making explicit specification of importMapProviders unnecessary in those cases.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx (4)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to plugins/*/**/*.tsx : In plugins, prefix all Tailwind classes with the plugin name (e.g., `auth-`, `storage-`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
packages/utils/src/toposort/toposort.unit.test.ts (15)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Include tests for error conditions and edge cases
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Each test should be independent and not rely on others
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Each test should verify one specific behavior
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Use descriptive test names that explain what is being tested
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{unit,int}.test.ts : Unit tests use `.unit.test.ts` suffix, integration tests use `.int.test.ts`
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Colocate tests with implementation files, e.g. for `./utils.ts`, add the test to `./utils.unit.test.ts`
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{unit,int}.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{unit,int}.test.ts : Collocate tests with source files using `.unit.test.ts` or `.int.test.ts` suffixes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.unit.test.ts : Unit tests use `.unit.test.ts` suffix
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to **/*.unit.test.{ts,tsx} : Unit tests are colocated with source files using `.unit.test.ts` suffix
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Structure tests with clear setup, execution, and verification phases (Arrange-Act-Assert)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to src/tests/**/*.{ts,tsx} : Test helpers are located in `src/tests/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to src/tests/**/*.{ts,tsx} : Test helpers are located in `src/tests/` directory
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Leverage TypeScript for type-safe mocking in tests
packages/react-generators/src/generators/core/react-sentry/templates/src/services/sentry.ts (2)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
packages/react-generators/src/generators/admin/admin-crud-edit/extractor.json (14)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: plugins/baseplate-plugin-storage/src/generators/react/upload-components/upload-components.generator.ts:108-112
Timestamp: 2025-05-05T06:37:43.106Z
Learning: The template extractor in the baseplate codebase can automatically infer and determine the necessary import map providers for certain templates, making explicit specification of importMapProviders unnecessary in those cases.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Use camelCase for variables/functions, PascalCase for types/classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use TypeScript with strict type checking enabled
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
packages/react-generators/src/generators/core/react-sentry/react-sentry.generator.ts (17)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: kingston
PR: halfdomelabs/baseplate#428
File: packages/project-builder-server/src/sync/index.ts:5-5
Timestamp: 2025-01-23T09:12:46.178Z
Learning: Avoid importing directly from 'dist' directories. Instead, expose functionality through the package's public API and import from the main package entry point.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#562
File: plugins/plugin-auth/package.json:32-36
Timestamp: 2025-06-03T09:11:29.651Z
Learning: With TypeScript project references, TypeScript compilation is watched from the root level using "watch:tsc:root" script, so individual packages no longer need to include their "tsc:watch" scripts in their local "watch" commands. The local "tsc:watch" scripts are renamed from "watch:tsc" but are not meant to be run as part of the package's watch command since TypeScript watching is handled centrally at the workspace root.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts:90-94
Timestamp: 2025-05-05T06:36:50.687Z
Learning: In this codebase, import paths can include `.ts` extensions, and the `resolveModuleSpecifier` function will handle them appropriately. There's no need to strip file extensions before passing paths to functions like `TsCodeUtils.importFragment`.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.test.ts : Extract common setup code into test helpers
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use TypeScript with strict type checking enabled
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Node 16 module resolution - include file extensions in imports (`.js`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{unit,int}.test.ts : Always import vitest globals explicitly (describe, it, expect)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
packages/react-generators/src/generators/core/react-routes/react-routes.generator.ts (12)
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-components/admin-components.generator.ts:55-61
Timestamp: 2025-05-05T06:35:13.300Z
Learning: In generators, paths should be merged with forward slashes (/) only since JavaScript generated files use POSIX style separators. The system handles conversion to Windows style separators at later stages when writing out files.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts:90-94
Timestamp: 2025-05-05T06:36:50.687Z
Learning: In this codebase, import paths can include `.ts` extensions, and the `resolveModuleSpecifier` function will handle them appropriately. There's no need to strip file extensions before passing paths to functions like `TsCodeUtils.importFragment`.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
packages/utils/src/string/convert-case-with-prefix.ts (5)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Use camelCase for variables/functions, PascalCase for types/classes
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
packages/sync/src/utils/directories.ts (6)
Learnt from: kingston
PR: halfdomelabs/baseplate#539
File: scripts/check-changesets.ts:10-13
Timestamp: 2025-05-08T12:56:59.222Z
Learning: Node.js 20.12.0 and above include `globSync` in the core `node:fs` module, so `import { promises as fs, globSync } from 'node:fs';` is valid syntax in projects using these Node.js versions.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: kingston
PR: halfdomelabs/baseplate#539
File: scripts/check-changesets.ts:10-13
Timestamp: 2025-05-08T12:56:59.222Z
Learning: Node.js 22.0.0 and later versions include both `glob` and `globSync` functionality in the core `node:fs` module, making `import { promises as fs, globSync } from 'node:fs';` valid syntax.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/tests.mdc:0-0
Timestamp: 2025-06-30T11:52:28.745Z
Learning: Applies to **/*.test.{ts,tsx} : For file system operations in tests, use memfs and mock 'node:fs' and 'node:fs/promises' with vi.mock
Learnt from: kingston
PR: halfdomelabs/baseplate#539
File: scripts/check-changesets.ts:111-124
Timestamp: 2025-05-08T12:56:23.394Z
Learning: Node.js 22.0.0 and later versions provide native glob functionality via `fs.glob` method in the `node:fs/promises` module, allowing pattern matching without requiring external dependencies.
packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts (15)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping in tsconfig.json. Removing baseUrl and using explicit relative paths with "./" prefix (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: kingston
PR: halfdomelabs/baseplate#505
File: packages/create-project/tsconfig.json:6-6
Timestamp: 2025-04-21T06:32:22.476Z
Learning: Since TypeScript 4.1, baseUrl is not required for paths mapping when using explicit relative paths (with "./"). Removing baseUrl from tsconfig.json while updating paths to use relative paths (e.g., changing "@src/*": ["src/*"] to "@src/*": ["./src/*"]) prevents bare path imports from node_modules while maintaining path alias functionality.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use camelCase for variables and functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to plugins/*/**/*.tsx : In plugins, prefix all Tailwind classes with the plugin name (e.g., `auth-`, `storage-`)
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-components/admin-components.generator.ts:55-61
Timestamp: 2025-05-05T06:35:13.300Z
Learning: In generators, paths should be merged with forward slashes (/) only since JavaScript generated files use POSIX style separators. The system handles conversion to Windows style separators at later stages when writing out files.
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Use PascalCase for types and classes
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: plugins/baseplate-plugin-storage/src/generators/react/upload-components/upload-components.generator.ts:108-112
Timestamp: 2025-05-05T06:37:43.106Z
Learning: The template extractor in the baseplate codebase can automatically infer and determine the necessary import map providers for certain templates, making explicit specification of importMapProviders unnecessary in those cases.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts:90-94
Timestamp: 2025-05-05T06:36:50.687Z
Learning: In this codebase, import paths can include `.ts` extensions, and the `resolveModuleSpecifier` function will handle them appropriately. There's no need to strip file extensions before passing paths to functions like `TsCodeUtils.importFragment`.
packages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsx (4)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use icons from `react-icons/md` (Material Design icons); avoid using other icon libraries
Learnt from: kingston
PR: halfdomelabs/baseplate#544
File: packages/ui-components/src/components/Command/Command.tsx:16-31
Timestamp: 2025-05-12T08:29:52.819Z
Learning: In React 19, function components automatically receive refs as regular props, eliminating the need for React.forwardRef. This allows components to directly destructure and use the ref prop, simplifying component definitions while maintaining the same ref forwarding functionality.
packages/react-generators/src/generators/core/react-router/react-router.generator.ts (11)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts:90-94
Timestamp: 2025-05-05T06:36:50.687Z
Learning: In this codebase, import paths can include `.ts` extensions, and the `resolveModuleSpecifier` function will handle them appropriately. There's no need to strip file extensions before passing paths to functions like `TsCodeUtils.importFragment`.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts:163-166
Timestamp: 2025-05-05T06:37:51.001Z
Learning: For certain templates in the codebase, the `importMapProviders` property is not explicitly required as the template extractor will automatically determine and infer the necessary import map providers.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Prefer functional programming patterns
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: plugins/baseplate-plugin-storage/src/generators/react/upload-components/upload-components.generator.ts:108-112
Timestamp: 2025-05-05T06:37:43.106Z
Learning: The template extractor in the baseplate codebase can automatically infer and determine the necessary import map providers for certain templates, making explicit specification of importMapProviders unnecessary in those cases.
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Include absolute paths in import statements via tsconfig paths (`@src/` is the alias for `src/`)
Learnt from: kingston
PR: halfdomelabs/baseplate#571
File: packages/core-generators/src/renderers/extractor/plugins/typed-templates-file.ts:102-106
Timestamp: 2025-06-11T18:31:22.247Z
Learning: For `templateExtractorBarrelExportPlugin.addGeneratedBarrelExport`, the generated barrel exports are written into `generated/index.ts`, therefore the `moduleSpecifier` must be specified relative to that file (e.g., `./typed-templates.js`), not the project root.
Learnt from: kingston
PR: halfdomelabs/baseplate#521
File: packages/react-generators/src/generators/admin/admin-components/admin-components.generator.ts:55-61
Timestamp: 2025-05-05T06:35:13.300Z
Learning: In generators, paths should be merged with forward slashes (/) only since JavaScript generated files use POSIX style separators. The system handles conversion to Windows style separators at later stages when writing out files.
🧬 Code Graph Analysis (16)
packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx (2)
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx (1)
  • Route (24-26)
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx (1)
  • Route (11-13)
packages/react-generators/src/generators/core/react-app/react-app.generator.ts (1)
packages/core-generators/src/renderers/typescript/imports/builder.ts (1)
  • tsImportBuilder (74-82)
packages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsx (1)
packages/react-generators/src/generators/admin/admin-layout/templates/src/components/admin-layout/admin-layout.tsx (1)
  • AdminLayout (20-50)
packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx (2)
packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx (1)
  • Route (9-11)
packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx (1)
  • Route (8-10)
packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx (2)
packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx (1)
  • Route (9-11)
packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx (1)
  • Route (8-10)
packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx (1)
packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx (1)
  • Route (7-9)
packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx (2)
packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx (1)
  • Route (9-11)
packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx (1)
  • Route (9-11)
packages/project-builder-server/src/compiler/admin/index.ts (4)
packages/react-generators/src/generators/core/react-routes/react-routes.generator.ts (1)
  • reactRoutesGenerator (13-49)
packages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.ts (1)
  • adminLayoutGenerator (32-88)
packages/react-generators/src/generators/admin/admin-bull-board/admin-bull-board.generator.ts (1)
  • adminBullBoardGenerator (29-91)
packages/project-builder-server/src/compiler/admin/sections.ts (1)
  • compileAdminFeatures (84-93)
packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx (1)
packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx (1)
  • Route (9-11)
packages/sync/src/utils/directories.unit.test.ts (1)
packages/sync/src/utils/directories.ts (2)
  • isDirectoryEmpty (8-22)
  • removeEmptyAncestorDirectories (24-58)
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx (2)
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx (1)
  • Route (11-13)
packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx (1)
  • Route (5-5)
packages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsx (1)
packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx (1)
  • Route (7-9)
packages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.ts (4)
packages/sync/src/generators/generators.ts (1)
  • createGeneratorTask (196-204)
packages/react-generators/src/generators/core/react-components/index.ts (1)
  • reactComponentsImportsProvider (2-2)
packages/core-generators/src/renderers/typescript/utils/ts-code-utils.ts (1)
  • TsCodeUtils (85-580)
packages/core-generators/src/renderers/typescript/imports/builder.ts (1)
  • tsImportBuilder (74-82)
packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts (3)
packages/react-generators/src/utils/case.ts (1)
  • lowerCaseFirst (3-8)
packages/core-generators/src/renderers/typescript/utils/ts-code-utils.ts (1)
  • TsCodeUtils (85-580)
packages/utils/src/string/quot.ts (1)
  • quot (6-8)
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx (2)
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx (1)
  • Route (24-26)
packages/sync/src/utils/evented-logger.ts (1)
  • error (25-39)
packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts (3)
packages/utils/src/string/quot.ts (1)
  • quot (6-8)
packages/core-generators/src/renderers/typescript/utils/ts-code-utils.ts (1)
  • TsCodeUtils (85-580)
packages/core-generators/src/renderers/typescript/imports/builder.ts (1)
  • tsImportBuilder (74-82)
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: Test E2E
  • GitHub Check: Lint
  • GitHub Check: test
🔇 Additional comments (105)
packages/core-generators/src/renderers/extractor/utils/deduplicate-templates.ts (1)

18-20: LGTM! Sorting change aligns with migration goals.

The change to sort by newest first (descending order) makes sense in the context of migrating from React Router to TanStack Router. This ensures that when duplicate templates exist, the latest modified versions (which likely contain the new TanStack Router code) are prioritized over older versions.

packages/react-generators/src/generators/core/react/extractor.json (1)

40-46: No stray src/index.tsx references found
A global search for “index.tsx” only returned route‐page templates (e.g. routes/index.tsx) and generator code for route pages—which is intentional. The core/react generator has been updated to use src/main.tsx correctly, and there are no remaining references to the old src/index.tsx.

packages/react-generators/src/utils/case.ts (1)

1-1: Cleanup approved: removal of dasherizeCamel in react-generators is safe

Verified that:

  • No references to dasherizeCamel remain in the react-generators package.
  • The only other occurrences live in packages/project-builder-server/src/utils/case.ts and its import sites, which define their own dasherizeCamel and are untouched by these changes.
packages/utils/src/toposort/toposort.ts (1)

92-108: Excellent improvement to cycle detection logic.

The enhanced cycle detection now properly handles disconnected graphs by iterating over all unvisited nodes and resetting the path and visit set before each DFS call. This ensures cycles in disconnected components are correctly detected.

packages/react-generators/src/generators/core/react/templates/package/index.html (1)

13-13: Entry point generator updated correctly

Verified that the core React generator now scaffolds src/main.tsx in packages/react-generators/src/generators/core/react/extractor.json and there are no remaining /src/index.tsx references for the HTML entry point. Other index.tsx usages pertain to route templates and are unaffected. No further changes needed—approving.

packages/react-generators/src/generators/admin/admin-layout/templates/src/components/admin-layout/admin-layout.tsx (1)

14-14: Import migration looks correct.

The change from react-router-dom to @tanstack/react-router for the Outlet component is consistent with the broader migration to Tanstack Router. The component usage remains the same.

.changeset/react-generators-tanstack-router.md (1)

1-6: Changeset properly documents the migration.

The changeset correctly follows the expected format and accurately describes the migration from React Router to Tanstack Router. The patch version bump is appropriate for this type of change.

.changeset/four-comics-grab.md (1)

1-6: LGTM! Changeset format and content are correct.

The changeset properly documents the patch-level addition of the ignore filenames option for directory cleaning functionality.

packages/sync/src/output/clean-deleted-files.ts (1)

98-100: LGTM! Clean implementation of the ignore files functionality.

The addition of the ignoreFiles option with .template-metadata.json correctly implements the directory cleaning enhancement described in the changeset.

.changeset/large-olives-cheer.md (1)

1-6: LGTM! Changeset accurately documents the sync package changes.

The changeset properly describes the enhancement to ignore .template-metadata.json files during directory cleanup.

packages/react-generators/src/generators/core/react/react.generator.ts (1)

156-157: Missing generated source for CORE_REACT_GENERATED

We attempted to locate packages/react-generators/src/generators/core/react/generated/index.js but it’s not present. Without this file, the references to CORE_REACT_GENERATED.templates.main and CORE_REACT_GENERATED.paths.main will be unresolved at runtime.

Please verify that the following exists and exports the expected members:

  • packages/react-generators/src/generators/core/react/generated/index.js
    • CORE_REACT_GENERATED.templates.main
    • CORE_REACT_GENERATED.paths.main
packages/project-builder-server/src/compiler/web/index.ts (1)

48-48: renderPlaceholderIndex support verified

LGTM! Confirmed that the renderPlaceholderIndex: true option added in
packages/project-builder-server/src/compiler/web/index.ts is fully supported by reactRouterGenerator:

  • In packages/react-generators/src/generators/core/react-router/react-router.generator.ts, the descriptor schema includes
    renderPlaceholderIndex: z.boolean().default(false).
  • The buildTasks function correctly checks if (renderPlaceholderIndex) and applies
    builder.apply(renderers.placeholderIndex.render({})).

Approving these changes.

packages/react-generators/src/generators/core/react-router/templates/routes/__root.tsx (1)

3-5: Template structure looks correct for TanStack Router integration.

The import statement correctly uses the .js extension for Node 16 module resolution, and the root route creation pattern aligns with TanStack Router conventions.

packages/react-generators/src/generators/admin/admin-home/extractor.json (1)

4-19: Configuration changes align with TanStack Router migration.

The path updates from src/pages/Home/index.tsx to routes/index.tsx and corresponding pathRootRelativePath changes correctly reflect the new file-based routing structure used by TanStack Router.

packages/utils/src/string/index.ts (1)

1-1: Barrel export addition follows established patterns.

The new export for convert-case-with-prefix.js correctly uses the .js extension for Node 16 module resolution and follows the established barrel export pattern in this file.

packages/react-generators/src/generators/core/react-app/extractor.json (1)

4-10: Verify file naming convention choice.

The change from App.tsx to app.tsx moves from PascalCase to camelCase. However, the coding guidelines specify "Use kebab-case for file names". Should this be app.tsx (camelCase) or app.tsx (already camelCase) or follow kebab-case convention?

packages/react-generators/src/generators/core/react-app/templates/src/app/App.tsx (2)

5-7: Component export change aligns with migration strategy.

The conversion from default export to named export is consistent with the broader TanStack Router migration and the component correctly specifies the ReactElement return type.


5-7: Add explicit return type annotation.

The App function is missing an explicit return type annotation. According to the coding guidelines, all top-level functions including React components must have return types.

Apply this diff to add the missing return type:

-export function App(): ReactElement {
+export function App(): ReactElement {

Wait, I see the return type is already there. Let me check again...

Actually, the return type ReactElement is already specified in line 5. The function signature is correct.

⛔ Skipped due to learnings
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Specify explicit return types on all functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : All functions (excluding one-liner arrow functions) require explicit return types
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : If a particular interface or type is not exported, change the file so it is exported
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : Extract repeated components into distinct functions or components where applicable
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.tsx : Use ShadCN-based components from `@baseplate-dev/ui-components` instead of creating custom ones
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/ui-rules.mdc:0-0
Timestamp: 2025-06-30T11:52:33.318Z
Learning: Applies to *.{tsx},packages/project-builder-web/**,packages/ui-components/** : We use a rough analog of ShadCN components that can be imported from @baseplate-dev/ui-components
packages/react-generators/src/constants/react-packages.ts (1)

5-6: Versions Verified: Both @tanstack/react-router and @tanstack/router-plugin at 1.124.0

Confirmed via npm that:

  • @tanstack/react-router → 1.124.0
  • @tanstack/router-plugin → 1.124.0

These are the latest stable releases. LGTM!

packages/react-generators/src/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.ts (2)

19-19: LGTM! Adding kebabCase import for improved file naming.

The addition of kebabCase import supports the file naming convention changes below.


226-226: LGTM! Improved file organization and naming consistency.

The path construction now uses:

  • -components/ subdirectory for better organization
  • kebabCase(formName) for consistent file naming

This aligns with the coding guidelines requiring kebab-case for file names.

packages/react-generators/src/generators/admin/admin-bull-board/extractor.json (1)

4-4: LGTM! Path restructuring aligns with Tanstack Router migration.

The systematic change from src/pages/bull-board/ to routes/bull-board/ is consistent with Tanstack Router's file-based routing approach. This organizational change supports the improved type safety and developer experience mentioned in the PR objectives.

Also applies to: 8-8, 11-11, 34-34

packages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsx (3)

5-5: LGTM! Proper migration to Tanstack Router Link component.

The change from useNavigate hook to Link component aligns with the migration to Tanstack Router and provides better type safety.


7-7: LGTM! Import consolidation improves code organization.

Consolidating the imports for Button and ErrorDisplay into a single import statement improves readability.


16-18: LGTM! Declarative navigation improves accessibility and type safety.

The change from programmatic navigation to declarative Link component:

  • Provides better type safety with Tanstack Router
  • Improves accessibility with proper anchor semantics
  • Aligns with the migration objectives
packages/react-generators/src/generators/core/react-sentry/extractor.json (1)

13-17: LGTM! Adding router import provider for Tanstack Router integration.

The addition of reactRouterImportsProvider supports the Sentry service integration with Tanstack Router. The configuration follows the established pattern and points to the correct package path specifier.

packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsx (1)

18-20: LGTM - Export change aligns with migration pattern

The change from default export to named export is consistent with the broader migration from React Router to Tanstack Router. The function maintains proper TypeScript typing with explicit return type annotation.

packages/react-generators/src/generators/core/react-app/react-app.generator.ts (1)

74-74: LGTM - Import updated to reflect component export change

The change from default import to named import correctly reflects the corresponding change in the App component from default export to named export. The path change to lowercase also aligns with kebab-case file naming conventions.

packages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsx (1)

7-11: LGTM - Correct implementation of Tanstack Router pattern

The addition of createFileRoute import and Route export follows the correct pattern for the migration to Tanstack Router. The route definition for the root path '/' with the HomePage component is appropriate and consistent with similar changes across other templates.

packages/react-generators/src/generators/core/react-router/index.ts (1)

1-2: LGTM - Correct export additions for migration

The added exports for ReactRouterImportsProvider type and reactRouterImportsProvider value correctly provide the necessary imports for the Tanstack Router migration. The use of .js file extensions and explicit type/value exports follows the coding guidelines.

packages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsx (1)

9-14: LGTM - Consistent implementation of Tanstack Router pattern

The addition of createFileRoute import and Route export correctly follows the migration pattern to Tanstack Router. The route definition for /bull-board/ with the BullBoardPage component is appropriate and maintains consistency with other template updates in this migration.

packages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsx (1)

6-10: LGTM! Proper Tanstack Router migration implementation.

The route definition follows the established pattern for migrating from React Router to Tanstack Router. The createFileRoute usage with template variables TPL_ROUTE_VALUE and TPL_PAGE_NAME is consistent with the migration pattern seen in other admin generators.

packages/react-generators/src/generators/admin/admin-home/admin-home.generator.ts (1)

25-25: LGTM! Correctly removes React Router dependencies.

The removal of reactRoutes parameter aligns with the migration to Tanstack Router, where routes are now defined in templates using createFileRoute instead of explicit route registration in generators.

packages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsx (1)

10-12: LGTM! Proper Tanstack Router route definition.

The route definition correctly uses createFileRoute with the /_admin path, which is appropriate for a layout route in Tanstack Router. The authentication wrapper pattern is well-implemented.

packages/react-generators/src/generators/admin/admin-layout/index.ts (1)

2-3: LGTM! Proper barrel export implementation.

The exports correctly follow the barrel export pattern and use the proper .js extension for the generated file import. This extends the module's public API appropriately for the admin layout import providers.

packages/tools/eslint-configs/rules/no-unused-generator-dependencies.js (1)

111-127: LGTM! Improved auto-fix handles trailing commas correctly.

The enhanced fix function properly addresses the edge case where removing unused dependencies could leave trailing commas, which would cause syntax errors. The implementation correctly uses ESLint's sourceCode.getTokenAfter() to detect and remove trailing commas along with the unused property.

packages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsx (4)

5-6: Import structure looks good with proper error handling integration.

The imports correctly bring in the necessary Tanstack Router utilities and error handling functions for the migration.


9-11: Route definition follows Tanstack Router conventions.

The route export using createFileRoute with template placeholders properly integrates with the new routing system.


14-14: Params access correctly updated for Tanstack Router.

The change from useParams() to Route.useParams() aligns with Tanstack Router's type-safe parameter access pattern.


28-28: Navigation properly handles promises with error logging.

The navigation call correctly uses the promise-based approach with error handling, which is essential for Tanstack Router's async navigation.

packages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsx (3)

16-16: Import correctly updated for Tanstack Router.

The Link import change from react-router-dom to @tanstack/react-router is appropriate for the migration.


25-27: Function signature follows coding guidelines.

The conversion to a named export with explicit multiline parameters adheres to the functional programming patterns and coding style guidelines.


68-68: Link usage properly updated for Tanstack Router.

The Link component now correctly uses the route object with params prop, which provides better type safety compared to string interpolation.

plugins/plugin-auth/src/auth0/generators/react/auth0-callback/extractor.json (2)

4-4: Template keys correctly updated for new file naming convention.

The removal of .page from the template keys aligns with the Tanstack Router migration and simplified file naming structure.

Also applies to: 23-23


26-26: Path references updated consistently.

The pathRootRelativePath values correctly reflect the new file naming convention without the .page segment.

Also applies to: 41-41

packages/react-generators/src/generators/core/react-router/templates/routes/index.tsx (2)

7-9: Route definition correctly implements Tanstack Router pattern.

The route export using createFileRoute with the root path properly establishes the home page route.


11-18: HomePage component follows React coding guidelines.

The component correctly specifies the ReactElement return type and uses appropriate Tailwind classes for styling.

packages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsx (4)

10-18: Error component properly typed and implemented.

The ErrorComponent correctly uses the ErrorRouteComponent type and implements proper error display with reset functionality.


20-24: Router configuration follows Tanstack Router best practices.

The router setup correctly uses the generated route tree and provides default components for error and not found states.


26-31: Module augmentation ensures type safety.

The TypeScript module augmentation properly registers the router instance for enhanced type safety throughout the application.


33-37: AppRoutes component follows React coding guidelines.

The component properly specifies the return type and integrates the router provider with template placeholders for header rendering.

packages/react-generators/src/generators/admin/admin-crud-list/extractor.json (3)

4-8: Template configuration correctly updated for TanStack Router migration.

The changes from "index.page.tsx" to "index.tsx" align with the simplified naming convention in the TanStack Router migration. The corresponding generatorTemplatePath update maintains consistency.


28-28: New route template variable added appropriately.

The addition of TPL_ROUTE_VALUE under the index.tsx template supports the new TanStack Router pattern where routes are defined using createFileRoute with dynamic route values.


55-55: Edit route template variable added for improved navigation.

The addition of TPL_EDIT_ROUTE under the Table.tsx template enables dynamic route generation for edit navigation, supporting the new TanStack Router navigation patterns.

packages/react-generators/src/generators/core/react-sentry/templates/src/services/sentry.ts (2)

4-4: Router import correctly updated for TanStack Router integration.

The import change from React Router specific imports to the generic router import aligns with the TanStack Router migration pattern.


14-14: Sentry integration correctly updated for TanStack Router.

The switch from reactRouterV6BrowserTracingIntegration to tanstackRouterBrowserTracingIntegration(router) properly updates the Sentry integration to work with the new router while maintaining the same functionality.

packages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsx (4)

5-6: Imports correctly updated for TanStack Router migration.

The imports have been properly updated from react-router-dom to @tanstack/react-router, maintaining the same hook (useNavigate) while adding the new createFileRoute function.


9-11: Route definition correctly implemented using TanStack Router pattern.

The route export using createFileRoute follows the established pattern seen in other templates, correctly linking the route value to the component.


31-31: Navigation correctly updated with error handling.

The navigation call properly uses the new TanStack Router object syntax { to: '..' } and includes appropriate error handling with .catch(logError).


13-13: Add explicit return type to React component function.

The function is missing an explicit return type annotation, which is required by the coding guidelines for all top-level functions including React components.

-function TPL_COMPONENT_NAME(): ReactElement {
+function TPL_COMPONENT_NAME(): ReactElement {

Actually, looking more closely, the return type is already present as ReactElement. This is correct.

⛔ Skipped due to learnings
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Always include return types on top-level functions including React components (`React.ReactElement`)
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : Specify explicit return types on all functions
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: .cursor/rules/code-style.mdc:0-0
Timestamp: 2025-06-30T11:52:11.055Z
Learning: Applies to {packages,plugins}/**/*.{ts,tsx} : All functions (excluding one-liner arrow functions) require explicit return types
Learnt from: CR
PR: halfdomelabs/baseplate#0
File: CLAUDE.md:0-0
Timestamp: 2025-06-30T11:51:48.395Z
Learning: Applies to **/*.{ts,tsx} : TypeScript with strict type checking
plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsx (3)

9-9: Imports correctly updated for TanStack Router migration.

The imports have been properly updated from react-router-dom to @tanstack/react-router, adding both createFileRoute and the updated useNavigate hook.


24-26: Route definition correctly implemented with explicit path.

The route export using createFileRoute('/auth/auth0-callback') correctly defines the route with an explicit path, following the established TanStack Router pattern.


44-44: Navigation correctly updated with error handling.

The navigation call properly uses the new TanStack Router object syntax and includes appropriate error handling with .catch(logError).

packages/project-builder-server/src/compiler/admin/index.ts (2)

27-27: Import correctly added for route restructuring.

The addition of reactRoutesGenerator import supports the new nested route structure approach used in the TanStack Router migration.


80-114: Route structure correctly refactored for TanStack Router.

The restructuring creates a hierarchical route structure under adminRoute using reactRoutesGenerator, which is the correct approach for the TanStack Router migration. The nested structure consolidates:

  • adminLayout with navigation links
  • admin home generator
  • adminRoutes for Bull Board (conditionally)
  • routes for compiled admin features

This approach maintains all previous functionality while following the new routing conventions.

packages/sync/src/utils/directories.ts (3)

4-6: LGTM! Well-designed interface for directory options.

The DirectoryOptions interface provides a clean way to extend the directory utility functions with optional ignore functionality.


8-22: Excellent implementation of the ignore files feature.

The function correctly filters out ignored files before determining if a directory is empty, and the default parameter handling is robust.


47-48: Good improvement in directory removal method.

The change from fs.rmdir to fs.rm with recursive: true and force: true options is more robust and handles edge cases better than the deprecated fs.rmdir.

plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx (4)

6-6: Good addition of error logging import.

The logError import will be used for proper error handling in the navigation logic.


8-8: Correct migration to Tanstack Router.

The import change from react-router-dom to @tanstack/react-router aligns with the migration objectives for improved type safety and developer experience.


11-13: Proper route definition using createFileRoute.

The route definition follows the correct Tanstack Router pattern as shown in the relevant code snippets, associating the /auth/signup path with the SignupPage component.


31-34: Well-implemented navigation with error handling.

The programmatic navigation using navigate({ to: '/' }) with proper error handling through logError is correctly implemented within the useEffect dependency array.

packages/utils/src/string/convert-case-with-prefix.ts (2)

1-19: Excellent documentation with clear examples.

The JSDoc documentation is comprehensive and provides helpful examples that demonstrate the function's behavior in different scenarios.


20-49: Robust implementation with proper edge case handling.

The function correctly handles various edge cases including non-alphanumeric strings, empty strings, and mixed character scenarios. The regex-based approach for extracting prefixes and suffixes is sound, and the conditional case conversion logic is well-implemented.

packages/react-generators/src/generators/admin/admin-layout/extractor.json (1)

4-18: Proper template configuration for Tanstack Router migration.

The new admin route template is correctly configured with appropriate import map providers and project exports. The template follows the established pattern for Tanstack Router route definitions and integrates well with the authentication system.

packages/sync/src/utils/directories.unit.test.ts (3)

12-15: Good test organization with proper cleanup

The addition of the describe block and beforeEach hook properly organizes the tests and ensures a clean state between test runs.


39-71: Comprehensive test coverage for ignoreFiles functionality

The new test cases thoroughly cover the ignoreFiles option scenarios including:

  • Directory with only ignored files
  • Mixed ignored and non-ignored files
  • Empty ignoreFiles array

The test names are descriptive and follow the coding guidelines.


169-192: Excellent test for .template-metadata.json handling

This test case directly validates the PR's objective of ignoring .template-metadata.json files during directory cleanup, which aligns with the changes mentioned in the AI summary for clean-deleted-files.ts.

packages/utils/src/toposort/toposort.unit.test.ts (2)

256-283: Well-structured test for complex cycle detection

This test effectively validates cycle detection in graphs with both cyclical and non-cyclical dependencies. The assertions properly verify:

  • The correct error type is thrown
  • The cycle path contains all expected nodes
  • The cycle starts and ends with the same node

Good use of descriptive comments to explain the test scenario.


285-312: Valuable edge case test for disconnected components

This test addresses an important edge case where cycle detection could fail if the first unvisited node doesn't lead to a cycle. The explicit error throwing in the try block ensures the test fails if no error is thrown, which is a good practice.

packages/react-generators/src/generators/core/react-router/extractor.json (1)

4-13: Proper root route configuration for Tanstack Router

The root route template is correctly configured with:

  • Singleton file kind ensuring only one root route exists
  • Proper path using {routes-root} placeholder
  • Route export for the generated route tree
packages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.ts (2)

38-50: Clean task structure with proper dependencies

The new task structure with separate renderers and route tasks provides better separation of concerns. The route task correctly depends on renderers and applies the admin route renderer.


64-71: Correct migration to Tanstack Router Link component

The navigation links have been properly updated to use Tanstack Router's Link component with the to prop instead of React Router's NavLink. The asChild prop on NavigationMenuItemWithLink ensures proper component composition.

packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts (4)

12-13: Good use of utility functions

The addition of quot for proper string escaping and kebabCase for consistent file naming improves code reliability and maintainability.


64-65: Improved component organization

Moving the table component to a -components subdirectory with kebab-case naming provides better project structure and follows common React conventions.


157-159: Proper migration to Tanstack Router Link component

The Link import and usage have been correctly updated from react-router-dom to @tanstack/react-router.


132-132: Confirmed quot usage for route definitions in templates

Verified that the quot helper wraps ${routePrefix}/ in single quotes—producing the same '/your-prefix/' string literal used by all other createFileRoute() calls. No changes are required here.

packages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.ts (5)

14-15: LGTM! Imports are properly structured.

The addition of quot and kebabCase utilities aligns with the migration to TanStack Router and follows the coding guidelines for import ordering (external libs first).


78-81: Route prefix and schema path updates look correct.

The changes properly adapt to the new routing structure, using getRoutePrefix() and organizing schemas in a dedicated subdirectory with kebab-case naming.


95-100: Component path and import changes are consistent.

The edit form component path now uses kebab-case naming and the switch from defaultImportFragment to importFragment aligns with the pattern of using named exports in the migrated templates.


102-106: Dynamic route segments properly implemented.

The simplified paths using /$id.tsx and /new.tsx correctly follow TanStack Router's file-based routing conventions.


237-242: Import map providers and route values correctly added.

The addition of reactErrorImports provider and TPL_ROUTE_VALUE with properly quoted route prefixes aligns with the TanStack Router migration pattern seen across other generators.

Also applies to: 290-295

packages/react-generators/src/generators/core/react-routes/react-routes.generator.ts (3)

1-7: Simplified imports align with the new architecture.

The removal of TypeScript file rendering dependencies and retention of only essential providers reflects the shift to TanStack Router's file-based routing approach.


28-29: Case conversion utility properly applied.

Using convertCaseWithPrefix with kebabCase ensures consistent directory naming across the routing structure.


39-43: Route prefix logic correctly handles underscore-prefixed routes.

The conditional logic preserves the parent route prefix for routes starting with underscore, which is appropriate for layout or internal routes that shouldn't add to the URL path.

packages/react-generators/src/generators/admin/admin-crud-edit/extractor.json (3)

4-29: Template configuration properly updated for TanStack Router.

The renaming from create.page.tsx to create.tsx and addition of reactErrorImportsProvider align with the new routing structure and error handling patterns.


31-35: File naming follows kebab-case convention.

The change from EditForm.tsx to edit-form.tsx correctly applies the kebab-case naming convention specified in the coding guidelines.


59-84: New edit template properly configured.

The edit.tsx template configuration includes all necessary variables and import providers, consistent with the create template structure.

packages/react-generators/src/generators/core/react-sentry/react-sentry.generator.ts (1)

52-52: Sentry integration correctly migrated to renderer-based approach.

The switch from manual template rendering to using the renderer pattern aligns with the TanStack Router migration while preserving all Sentry functionality including error reporting and user identification.

Also applies to: 96-98, 102-107

packages/react-generators/src/generators/core/react-router/react-router.generator.ts (6)

1-4: Type imports properly structured for the new architecture.

The addition of TsTemplateOutputTemplateMetadata type import supports the pseudo-file generation pattern for the route tree.


34-35: Optional placeholder index rendering is a useful feature.

The renderPlaceholderIndex flag provides flexibility for projects that need a default index route.


58-60: Package dependencies correctly updated for TanStack Router.

The migration from react-router-dom to @tanstack/react-router and addition of the router plugin as a dev dependency is properly configured.


64-77: Vite plugin configuration looks correct.

The TanStack Router Vite plugin is properly configured with appropriate options including auto code splitting and consistent quote style.


92-97: Tooling configuration properly handles generated files.

Adding the generated route tree file to both Prettier and ESLint ignore lists prevents unnecessary formatting and linting of auto-generated code.


155-167: Pseudo-file approach is clever for template extraction.

Using skipWriting: true with template metadata allows the template extractor to recognize the generated route tree file without actually writing it, since the Vite plugin handles the actual generation.

@kingston kingston merged commit f8c9284 into main Jul 4, 2025
10 checks passed
@kingston kingston deleted the kingston/eng-764-update-react-generators-to-use-tanstack-router branch July 4, 2025 21:16
@github-actions github-actions bot mentioned this pull request Jul 4, 2025
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.

2 participants