-
Notifications
You must be signed in to change notification settings - Fork 0
feat: Migrate React generators to use Tanstack Router instead of React Router for improved type safety and developer experience #591
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…t Router for improved type safety and developer experience
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
🦋 Changeset detectedLatest commit: 57fb163 The changes in this PR will be included in the next version bump. This PR includes changesets to release 17 packages
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 |
WalkthroughThis 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
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)
Possibly related PRs
📜 Recent review detailsConfiguration used: .coderabbit.yaml 📒 Files selected for processing (3)
✅ Files skipped from review due to trivial changes (1)
🚧 Files skipped from review as they are similar to previous changes (1)
🧰 Additional context used📓 Path-based instructions (9)`**/*.{ts,tsx}`: TypeScript with strict type checking Node 16 module resolution ...
📄 Source: CodeRabbit Inference Engine (CLAUDE.md) List of files the instruction was applied to:
`**/*.{unit,int}.test.ts`: Unit tests use `.unit.test.ts` suffix, integration te...
📄 Source: CodeRabbit Inference Engine (CLAUDE.md) List of files the instruction was applied to:
`**/*.test.ts`: Always import vitest globals explicitly (describe, it, expect) U...
📄 Source: CodeRabbit Inference Engine (CLAUDE.md) List of files the instruction was applied to:
`**/*`: Use kebab-case for file names
📄 Source: CodeRabbit Inference Engine (CLAUDE.md) List of files the instruction was applied to:
`{packages,plugins}/**/*.{ts,tsx}`: Use TypeScript with strict type checking ena...
📄 Source: CodeRabbit Inference Engine (.cursor/rules/code-style.mdc) List of files the instruction was applied to:
`{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,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:
`**/*.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:
`**/*.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:
🧠 Learnings (2)📓 Common learningspackages/sync/src/utils/directories.unit.test.ts (14)⏰ Context from checks skipped due to timeout of 90000ms (3)
🔇 Additional comments (5)
✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this 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:importMapProviderscan 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-nocheckdirective completely disables TypeScript checking for this file, which could hide type issues. Since this is a template file using placeholders likeTPL_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.tssuffix 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.tspackages/react-generators/src/generators/core/react-router/extractor.json (1)
28-37: Consider adding return type information for exported entitiesThe
projectExportsdeclaresAppRoutesandrouterbut 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
⛔ Files ignored due to path filters (67)
packages/react-generators/src/generators/admin/admin-bull-board/generated/template-paths.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-bull-board/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-crud-edit/generated/template-renderers.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-crud-edit/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-crud-list/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-home/generated/template-paths.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-home/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-layout/generated/index.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-layout/generated/template-paths.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-layout/generated/template-renderers.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-layout/generated/ts-import-providers.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/admin/admin-layout/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-app/generated/template-paths.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-app/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-not-found-handler/generated/index.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-not-found-handler/generated/template-paths.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-not-found-handler/generated/template-renderers.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-not-found-handler/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-router/generated/index.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-router/generated/template-paths.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-router/generated/template-renderers.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-router/generated/ts-import-providers.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-router/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-routes/generated/index.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-routes/generated/template-renderers.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-routes/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-sentry/generated/template-renderers.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react-sentry/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react/generated/template-paths.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react/generated/template-renderers.tsis excluded by!**/generated/**,!**/generated/**packages/react-generators/src/generators/core/react/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**plugins/plugin-auth/src/auth0/generators/react/auth0-callback/generated/template-paths.tsis excluded by!**/generated/**,!**/generated/**plugins/plugin-auth/src/auth0/generators/react/auth0-callback/generated/typed-templates.tsis excluded by!**/generated/**,!**/generated/**tests/simple/baseplate/project-definition.jsonis excluded by!tests/**tests/simple/packages/web/.prettierignoreis excluded by!tests/**tests/simple/packages/web/baseplate/file-id-map.jsonis excluded by!tests/**tests/simple/packages/web/baseplate/generated/.prettierignoreis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/eslint.config.jsis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/index.htmlis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/package.jsonis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/app/app-routes.tsxis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/app/app.tsxis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/components/not-found-card/not-found-card.tsxis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/main.tsxis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/pages/NotFound.page.tsxis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/pages/index.tsxis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/route-tree.gen.tsis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/routes/__root.tsxis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/routes/index.tsxis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/src/services/sentry.tsis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/baseplate/generated/vite.config.tsis excluded by!**/generated/**,!tests/**,!**/generated/**tests/simple/packages/web/eslint.config.jsis excluded by!tests/**tests/simple/packages/web/index.htmlis excluded by!tests/**tests/simple/packages/web/package.jsonis excluded by!tests/**tests/simple/packages/web/src/app/app-routes.tsxis excluded by!tests/**tests/simple/packages/web/src/app/app.tsxis excluded by!tests/**tests/simple/packages/web/src/components/not-found-card/not-found-card.tsxis excluded by!tests/**tests/simple/packages/web/src/main.tsxis excluded by!tests/**tests/simple/packages/web/src/pages/NotFound.page.tsxis excluded by!tests/**tests/simple/packages/web/src/pages/index.tsxis excluded by!tests/**tests/simple/packages/web/src/route-tree.gen.tsis excluded by!tests/**tests/simple/packages/web/src/routes/__root.tsxis excluded by!tests/**tests/simple/packages/web/src/routes/home.gqlis excluded by!tests/**tests/simple/packages/web/src/routes/index.tsxis excluded by!tests/**tests/simple/packages/web/src/services/sentry.tsis excluded by!tests/**tests/simple/packages/web/vite.config.tsis excluded by!tests/**tests/simple/pnpm-lock.yamlis 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 forsrc/)
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.jsextensions 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.tsxpackages/react-generators/src/generators/core/react/react.generator.tspackages/project-builder-server/src/compiler/web/index.tspackages/sync/src/output/clean-deleted-files.tspackages/utils/src/string/index.tspackages/react-generators/src/utils/case.tspackages/react-generators/src/generators/core/react-router/templates/routes/__root.tsxpackages/react-generators/src/generators/core/react-app/react-app.generator.tspackages/core-generators/src/renderers/extractor/utils/deduplicate-templates.tspackages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsxpackages/react-generators/src/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.tspackages/react-generators/src/generators/core/react-app/templates/src/app/App.tsxpackages/react-generators/src/constants/react-packages.tspackages/react-generators/src/generators/core/react-router/index.tspackages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsxpackages/react-generators/src/generators/admin/admin-home/admin-home.generator.tspackages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsxpackages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsxpackages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsxpackages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsxpackages/utils/src/toposort/toposort.tspackages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsxpackages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsxpackages/project-builder-server/src/compiler/admin/index.tspackages/react-generators/src/generators/admin/admin-layout/index.tspackages/react-generators/src/generators/core/react-router/templates/routes/index.tsxpackages/utils/src/string/convert-case-with-prefix.test.tspackages/sync/src/utils/directories.unit.test.tsplugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsxpackages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsxpackages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.tspackages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.tsplugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsxpackages/utils/src/toposort/toposort.unit.test.tspackages/react-generators/src/generators/core/react-sentry/templates/src/services/sentry.tspackages/react-generators/src/generators/core/react-sentry/react-sentry.generator.tspackages/react-generators/src/generators/core/react-routes/react-routes.generator.tspackages/utils/src/string/convert-case-with-prefix.tspackages/sync/src/utils/directories.tspackages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.tspackages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsxpackages/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.tsxpackages/react-generators/src/generators/core/react/templates/package/index.htmlpackages/react-generators/src/generators/core/react/react.generator.tspackages/project-builder-server/src/compiler/web/index.tspackages/sync/src/output/clean-deleted-files.tspackages/utils/src/string/index.tspackages/react-generators/src/generators/core/react-app/extractor.jsonpackages/react-generators/src/utils/case.tspackages/react-generators/src/generators/core/react-router/templates/routes/__root.tsxpackages/react-generators/src/generators/admin/admin-home/extractor.jsonpackages/react-generators/src/generators/core/react-app/react-app.generator.tspackages/core-generators/src/renderers/extractor/utils/deduplicate-templates.tspackages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsxpackages/react-generators/src/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.tspackages/react-generators/src/generators/core/react-app/templates/src/app/App.tsxpackages/react-generators/src/constants/react-packages.tspackages/react-generators/src/generators/core/react-sentry/extractor.jsonpackages/react-generators/src/generators/core/react-router/index.tspackages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsxpackages/react-generators/src/generators/admin/admin-bull-board/extractor.jsonpackages/react-generators/src/generators/admin/admin-home/admin-home.generator.tspackages/react-generators/src/generators/core/react/extractor.jsonpackages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsxpackages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsxpackages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsxpackages/tools/eslint-configs/rules/no-unused-generator-dependencies.jspackages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsxpackages/react-generators/src/generators/admin/admin-crud-list/extractor.jsonpackages/utils/src/toposort/toposort.tspackages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsxpackages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsxpackages/project-builder-server/src/compiler/admin/index.tspackages/react-generators/src/generators/admin/admin-layout/index.tspackages/react-generators/src/generators/core/react-router/templates/routes/index.tsxplugins/plugin-auth/src/auth0/generators/react/auth0-callback/extractor.jsonpackages/utils/src/string/convert-case-with-prefix.test.tspackages/sync/src/utils/directories.unit.test.tsplugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsxpackages/react-generators/src/generators/admin/admin-layout/extractor.jsonpackages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsxpackages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.tspackages/react-generators/src/generators/core/react-router/extractor.jsonpackages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.tsplugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsxpackages/utils/src/toposort/toposort.unit.test.tspackages/react-generators/src/generators/core/react-sentry/templates/src/services/sentry.tspackages/react-generators/src/generators/admin/admin-crud-edit/extractor.jsonpackages/react-generators/src/generators/core/react-sentry/react-sentry.generator.tspackages/react-generators/src/generators/core/react-routes/react-routes.generator.tspackages/utils/src/string/convert-case-with-prefix.tspackages/sync/src/utils/directories.tspackages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.tspackages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsxpackages/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-componentsinstead of creating custom ones
Use Tailwind CSS utilities exclusively for styling; avoid writing custom CSS classes
Use icons fromreact-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.tsxpackages/react-generators/src/generators/core/react-router/templates/routes/__root.tsxpackages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsxpackages/react-generators/src/generators/core/react-app/templates/src/app/App.tsxpackages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsxpackages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsxpackages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsxpackages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsxpackages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsxpackages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsxpackages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsxpackages/react-generators/src/generators/core/react-router/templates/routes/index.tsxplugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsxpackages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsxplugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsxpackages/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.tsxpackages/react-generators/src/generators/core/react/react.generator.tspackages/project-builder-server/src/compiler/web/index.tspackages/sync/src/output/clean-deleted-files.tspackages/utils/src/string/index.tspackages/react-generators/src/utils/case.tspackages/react-generators/src/generators/core/react-router/templates/routes/__root.tsxpackages/react-generators/src/generators/core/react-app/react-app.generator.tspackages/core-generators/src/renderers/extractor/utils/deduplicate-templates.tspackages/react-generators/src/generators/admin/admin-crud-edit/templates/edit-form.tsxpackages/react-generators/src/generators/admin/admin-crud-embedded-form/admin-crud-embedded-form.generator.tspackages/react-generators/src/generators/core/react-app/templates/src/app/App.tsxpackages/react-generators/src/constants/react-packages.tspackages/react-generators/src/generators/core/react-router/index.tspackages/react-generators/src/generators/admin/admin-layout/templates/routes/route.tsxpackages/react-generators/src/generators/admin/admin-home/admin-home.generator.tspackages/react-generators/src/generators/admin/admin-crud-edit/templates/edit.tsxpackages/react-generators/src/generators/core/react-router/templates/src/app/app-routes.tsxpackages/react-generators/src/generators/admin/admin-crud-list/templates/Table.tsxpackages/react-generators/src/generators/admin/admin-crud-edit/templates/create.tsxpackages/utils/src/toposort/toposort.tspackages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsxpackages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsxpackages/project-builder-server/src/compiler/admin/index.tspackages/react-generators/src/generators/admin/admin-layout/index.tspackages/react-generators/src/generators/core/react-router/templates/routes/index.tsxpackages/utils/src/string/convert-case-with-prefix.test.tspackages/sync/src/utils/directories.unit.test.tsplugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/auth0-callback.tsxpackages/react-generators/src/generators/admin/admin-bull-board/templates/routes/bull-board/index.tsxpackages/react-generators/src/generators/admin/admin-layout/admin-layout.generator.tspackages/react-generators/src/generators/admin/admin-crud-edit/admin-crud-edit.generator.tsplugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsxpackages/utils/src/toposort/toposort.unit.test.tspackages/react-generators/src/generators/core/react-sentry/templates/src/services/sentry.tspackages/react-generators/src/generators/core/react-sentry/react-sentry.generator.tspackages/react-generators/src/generators/core/react-routes/react-routes.generator.tspackages/utils/src/string/convert-case-with-prefix.tspackages/sync/src/utils/directories.tspackages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.tspackages/react-generators/src/generators/core/react-components/templates/src/components/not-found-card/not-found-card.tsxpackages/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.tspackages/utils/src/string/index.tspackages/react-generators/src/generators/core/react-router/index.tspackages/react-generators/src/generators/admin/admin-home/templates/routes/index.tsxpackages/react-generators/src/generators/admin/admin-crud-list/templates/index.tsxpackages/project-builder-server/src/compiler/admin/index.tspackages/react-generators/src/generators/admin/admin-layout/index.tspackages/react-generators/src/generators/core/react-router/templates/routes/index.tsxpackages/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.tspackages/sync/src/utils/directories.unit.test.tspackages/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.tspackages/sync/src/utils/directories.unit.test.tspackages/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.tssuffix, integration tests use.int.test.ts
Collocate tests with source files using.unit.test.tsor.int.test.tssuffixes
📄 Source: CodeRabbit Inference Engine (CLAUDE.md)
List of files the instruction was applied to:
packages/sync/src/utils/directories.unit.test.tspackages/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.tssuffix
📄 Source: CodeRabbit Inference Engine (.cursor/rules/code-style.mdc)
List of files the instruction was applied to:
packages/sync/src/utils/directories.unit.test.tspackages/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.tspackages/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.tssuffix
📄 Source: CodeRabbit Inference Engine (.cursor/rules/tests.mdc)
List of files the instruction was applied to:
packages/sync/src/utils/directories.unit.test.tspackages/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.tsxplugins/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 inclassNameattributes within plugin components MUST be prefixed with the plugin name to avoid style conflicts.
When using utility functions likecn(), all CSS classes passed tocn()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.tsxplugins/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 straysrc/index.tsxreferences 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. Thecore/reactgenerator has been updated to usesrc/main.tsxcorrectly, and there are no remaining references to the oldsrc/index.tsx.packages/react-generators/src/utils/case.ts (1)
1-1: Cleanup approved: removal ofdasherizeCamelin react-generators is safeVerified that:
- No references to
dasherizeCamelremain 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
dasherizeCameland 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 correctlyVerified that the core React generator now scaffolds
src/main.tsxinpackages/react-generators/src/generators/core/react/extractor.jsonand there are no remaining/src/index.tsxreferences for the HTML entry point. Otherindex.tsxusages 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-domto@tanstack/react-routerfor theOutletcomponent 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
ignoreFilesoption with.template-metadata.jsoncorrectly 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.jsonfiles during directory cleanup.packages/react-generators/src/generators/core/react/react.generator.ts (1)
156-157: Missing generated source forCORE_REACT_GENERATEDWe attempted to locate
packages/react-generators/src/generators/core/react/generated/index.jsbut it’s not present. Without this file, the references toCORE_REACT_GENERATED.templates.mainandCORE_REACT_GENERATED.paths.mainwill 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.mainCORE_REACT_GENERATED.paths.mainpackages/project-builder-server/src/compiler/web/index.ts (1)
48-48: renderPlaceholderIndex support verifiedLGTM! Confirmed that the
renderPlaceholderIndex: trueoption added in
packages/project-builder-server/src/compiler/web/index.tsis fully supported byreactRouterGenerator:
- In
packages/react-generators/src/generators/core/react-router/react-router.generator.ts, the descriptor schema includes
renderPlaceholderIndex: z.boolean().default(false).- The
buildTasksfunction correctly checksif (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
.jsextension 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.tsxtoroutes/index.tsxand correspondingpathRootRelativePathchanges 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.jscorrectly uses the.jsextension 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.tsxtoapp.tsxmoves from PascalCase to camelCase. However, the coding guidelines specify "Use kebab-case for file names". Should this beapp.tsx(camelCase) orapp.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
ReactElementreturn type.
5-7: Add explicit return type annotation.The
Appfunction 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
ReactElementis 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 functionsLearnt 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 typesLearnt 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 exportedLearnt 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 checkingLearnt 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 applicableLearnt 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 onesLearnt 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-componentspackages/react-generators/src/constants/react-packages.ts (1)
5-6: Versions Verified: Both @tanstack/react-router and @tanstack/router-plugin at 1.124.0Confirmed 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
kebabCaseimport 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 organizationkebabCase(formName)for consistent file namingThis 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/toroutes/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
useNavigatehook toLinkcomponent aligns with the migration to Tanstack Router and provides better type safety.
7-7: LGTM! Import consolidation improves code organization.Consolidating the imports for
ButtonandErrorDisplayinto a single import statement improves readability.
16-18: LGTM! Declarative navigation improves accessibility and type safety.The change from programmatic navigation to declarative
Linkcomponent:
- 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
reactRouterImportsProvidersupports 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 patternThe 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 changeThe 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 patternThe addition of
createFileRouteimport and Route export follows the correct pattern for the migration to Tanstack Router. The route definition for the root path'/'with theHomePagecomponent 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 migrationThe added exports for
ReactRouterImportsProvidertype andreactRouterImportsProvidervalue correctly provide the necessary imports for the Tanstack Router migration. The use of.jsfile 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 patternThe addition of
createFileRouteimport and Route export correctly follows the migration pattern to Tanstack Router. The route definition for/bull-board/with theBullBoardPagecomponent 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
createFileRouteusage with template variablesTPL_ROUTE_VALUEandTPL_PAGE_NAMEis 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
reactRoutesparameter aligns with the migration to Tanstack Router, where routes are now defined in templates usingcreateFileRouteinstead 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
createFileRoutewith the/_adminpath, 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
.jsextension 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
createFileRoutewith template placeholders properly integrates with the new routing system.
14-14: Params access correctly updated for Tanstack Router.The change from
useParams()toRoute.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-domto@tanstack/react-routeris 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
.pagefrom 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
pathRootRelativePathvalues correctly reflect the new file naming convention without the.pagesegment.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
createFileRoutewith the root path properly establishes the home page route.
11-18: HomePage component follows React coding guidelines.The component correctly specifies the
ReactElementreturn 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
ErrorRouteComponenttype 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 correspondinggeneratorTemplatePathupdate maintains consistency.
28-28: New route template variable added appropriately.The addition of
TPL_ROUTE_VALUEunder theindex.tsxtemplate supports the new TanStack Router pattern where routes are defined usingcreateFileRoutewith dynamic route values.
55-55: Edit route template variable added for improved navigation.The addition of
TPL_EDIT_ROUTEunder theTable.tsxtemplate 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
routerimport aligns with the TanStack Router migration pattern.
14-14: Sentry integration correctly updated for TanStack Router.The switch from
reactRouterV6BrowserTracingIntegrationtotanstackRouterBrowserTracingIntegration(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-domto@tanstack/react-router, maintaining the same hook (useNavigate) while adding the newcreateFileRoutefunction.
9-11: Route definition correctly implemented using TanStack Router pattern.The route export using
createFileRoutefollows 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 functionsLearnt 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 typesLearnt 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 checkingplugins/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-domto@tanstack/react-router, adding bothcreateFileRouteand the updateduseNavigatehook.
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
reactRoutesGeneratorimport 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
adminRouteusingreactRoutesGenerator, which is the correct approach for the TanStack Router migration. The nested structure consolidates:
adminLayoutwith navigation linksadminhome generatoradminRoutesfor Bull Board (conditionally)routesfor compiled admin featuresThis 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
DirectoryOptionsinterface 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.rmdirtofs.rmwithrecursive: trueandforce: trueoptions is more robust and handles edge cases better than the deprecatedfs.rmdir.plugins/plugin-auth/src/auth0/generators/react/auth0-callback/templates/routes/signup.tsx (4)
6-6: Good addition of error logging import.The
logErrorimport will be used for proper error handling in the navigation logic.
8-8: Correct migration to Tanstack Router.The import change from
react-router-domto@tanstack/react-routeraligns 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/signuppath with theSignupPagecomponent.
31-34: Well-implemented navigation with error handling.The programmatic navigation using
navigate({ to: '/' })with proper error handling throughlogErroris 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 cleanupThe 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 functionalityThe 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 handlingThis test case directly validates the PR's objective of ignoring
.template-metadata.jsonfiles during directory cleanup, which aligns with the changes mentioned in the AI summary forclean-deleted-files.ts.packages/utils/src/toposort/toposort.unit.test.ts (2)
256-283: Well-structured test for complex cycle detectionThis 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 componentsThis 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 RouterThe 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 dependenciesThe new task structure with separate
renderersandroutetasks 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 componentThe navigation links have been properly updated to use Tanstack Router's
Linkcomponent with thetoprop instead of React Router'sNavLink. TheasChildprop onNavigationMenuItemWithLinkensures proper component composition.packages/react-generators/src/generators/admin/admin-crud-list/admin-crud-list.generator.ts (4)
12-13: Good use of utility functionsThe addition of
quotfor proper string escaping andkebabCasefor consistent file naming improves code reliability and maintainability.
64-65: Improved component organizationMoving the table component to a
-componentssubdirectory with kebab-case naming provides better project structure and follows common React conventions.
157-159: Proper migration to Tanstack Router Link componentThe Link import and usage have been correctly updated from
react-router-domto@tanstack/react-router.
132-132: Confirmedquotusage for route definitions in templatesVerified that the
quothelper wraps${routePrefix}/in single quotes—producing the same'/your-prefix/'string literal used by all othercreateFileRoute()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
quotandkebabCaseutilities 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
defaultImportFragmenttoimportFragmentaligns with the pattern of using named exports in the migrated templates.
102-106: Dynamic route segments properly implemented.The simplified paths using
/$id.tsxand/new.tsxcorrectly follow TanStack Router's file-based routing conventions.
237-242: Import map providers and route values correctly added.The addition of
reactErrorImportsprovider andTPL_ROUTE_VALUEwith 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
convertCaseWithPrefixwithkebabCaseensures 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.tsxtocreate.tsxand addition ofreactErrorImportsProvideralign with the new routing structure and error handling patterns.
31-35: File naming follows kebab-case convention.The change from
EditForm.tsxtoedit-form.tsxcorrectly applies the kebab-case naming convention specified in the coding guidelines.
59-84: New edit template properly configured.The
edit.tsxtemplate 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
TsTemplateOutputTemplateMetadatatype import supports the pseudo-file generation pattern for the route tree.
34-35: Optional placeholder index rendering is a useful feature.The
renderPlaceholderIndexflag provides flexibility for projects that need a default index route.
58-60: Package dependencies correctly updated for TanStack Router.The migration from
react-router-domto@tanstack/react-routerand 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: truewith 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.
Summary by CodeRabbit
New Features
Improvements
Bug Fixes
Chores