Renamed files to kebab-case - core - seeders, importers#25819
Conversation
|
It looks like this PR contains a migration 👀 General requirements
Schema changes
Data changes
|
WalkthroughESLint config broadened to enforce kebab-case filenames across core/**/*.{js,ts} with an explicit excludedFiles list. Many require/import statements and an exported seeders/importers list were updated from PascalCase to kebab-case module specifiers (e.g., Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In @ghost/core/.eslintrc.js:
- Around line 105-110: Two data migration hook files violate the new kebab-case
ESLint pattern; rename
ghost/core/core/server/data/migrations/hooks/migrate/afterEach.js →
after-each.js and beforeEach.js → before-each.js, then update every
import/require/export reference to those modules (search for "afterEach",
"beforeEach" string occurrences and any direct imports in migration registries,
test files, or index files) and adjust any exported symbol names if they relied
on camelCase; finally run the linter to confirm no remaining references and
update any module lists (e.g., dynamic loaders) that enumerate filenames so the
new kebab-case names are used.
🧹 Nitpick comments (1)
ghost/core/core/server/data/seeders/importers/roles-users-importer.js (1)
6-6: Minor typo in comment.The comment contains "imorter" which should be "importer". This is a pre-existing issue unrelated to the current refactoring.
✏️ Proposed fix
- // No roles imorter, since roles are statically defined in database + // No roles importer, since roles are statically defined in database
2e9c5b4 to
5b428c4
Compare
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
ghost/core/core/server/data/seeders/importers/roles-users-importer.js (1)
6-6: Optional: Fix typo in comment.Pre-existing typo: "imorter" should be "importer".
✍️ Proposed fix
- // No roles imorter, since roles are statically defined in database + // No roles importer, since roles are statically defined in database
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (75)
ghost/core/.eslintrc.jsghost/core/core/boot.jsghost/core/core/cli/generate-data.jsghost/core/core/server/data/db/database-state-manager.jsghost/core/core/server/data/importer/handlers/importer-content-file-handler.jsghost/core/core/server/data/importer/import-manager.jsghost/core/core/server/data/importer/importers/content-file-importer.jsghost/core/core/server/data/importer/importers/data/base.jsghost/core/core/server/data/importer/importers/data/custom-theme-settings-importer.jsghost/core/core/server/data/importer/importers/data/data-importer.jsghost/core/core/server/data/importer/importers/data/newsletters-importer.jsghost/core/core/server/data/importer/importers/data/posts-importer.jsghost/core/core/server/data/importer/importers/data/products-importer.jsghost/core/core/server/data/importer/importers/data/revue-subscriber-importer.jsghost/core/core/server/data/importer/importers/data/roles-importer.jsghost/core/core/server/data/importer/importers/data/settings-importer.jsghost/core/core/server/data/importer/importers/data/stripe-prices-importer.jsghost/core/core/server/data/importer/importers/data/stripe-products-importer.jsghost/core/core/server/data/importer/importers/data/tags-importer.jsghost/core/core/server/data/importer/importers/data/users-importer.jsghost/core/core/server/data/migrations/hooks/migrate/after-each.jsghost/core/core/server/data/migrations/hooks/migrate/before-each.jsghost/core/core/server/data/migrations/hooks/migrate/index.jsghost/core/core/server/data/schema/fixtures/fixture-manager.jsghost/core/core/server/data/schema/fixtures/index.jsghost/core/core/server/data/seeders/data-generator.jsghost/core/core/server/data/seeders/importers/benefits-importer.jsghost/core/core/server/data/seeders/importers/comments-importer.jsghost/core/core/server/data/seeders/importers/email-batches-importer.jsghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.jsghost/core/core/server/data/seeders/importers/email-recipients-importer.jsghost/core/core/server/data/seeders/importers/emails-importer.jsghost/core/core/server/data/seeders/importers/index.jsghost/core/core/server/data/seeders/importers/labels-importer.jsghost/core/core/server/data/seeders/importers/members-click-events-importer.jsghost/core/core/server/data/seeders/importers/members-created-events-importer.jsghost/core/core/server/data/seeders/importers/members-feedback-importer.jsghost/core/core/server/data/seeders/importers/members-importer.jsghost/core/core/server/data/seeders/importers/members-labels-importer.jsghost/core/core/server/data/seeders/importers/members-login-events-importer.jsghost/core/core/server/data/seeders/importers/members-newsletters-importer.jsghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.jsghost/core/core/server/data/seeders/importers/members-products-importer.jsghost/core/core/server/data/seeders/importers/members-status-events-importer.jsghost/core/core/server/data/seeders/importers/members-stripe-customers-importer.jsghost/core/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.jsghost/core/core/server/data/seeders/importers/members-subscribe-events-importer.jsghost/core/core/server/data/seeders/importers/members-subscription-created-events-importer.jsghost/core/core/server/data/seeders/importers/newsletters-importer.jsghost/core/core/server/data/seeders/importers/offers-importer.jsghost/core/core/server/data/seeders/importers/posts-authors-importer.jsghost/core/core/server/data/seeders/importers/posts-importer.jsghost/core/core/server/data/seeders/importers/posts-products-importer.jsghost/core/core/server/data/seeders/importers/posts-tags-importer.jsghost/core/core/server/data/seeders/importers/products-benefits-importer.jsghost/core/core/server/data/seeders/importers/products-importer.jsghost/core/core/server/data/seeders/importers/recommendation-click-events-importer.jsghost/core/core/server/data/seeders/importers/recommendation-subscribe-events-importer.jsghost/core/core/server/data/seeders/importers/recommendations-importer.jsghost/core/core/server/data/seeders/importers/redirects-importer.jsghost/core/core/server/data/seeders/importers/roles-users-importer.jsghost/core/core/server/data/seeders/importers/stripe-prices-importer.jsghost/core/core/server/data/seeders/importers/stripe-products-importer.jsghost/core/core/server/data/seeders/importers/table-importer.jsghost/core/core/server/data/seeders/importers/tags-importer.jsghost/core/core/server/data/seeders/importers/users-importer.jsghost/core/core/server/data/seeders/importers/web-mentions-importer.jsghost/core/core/server/data/seeders/utils/json-importer.jsghost/core/test/unit/server/data/importer/handlers/importer-content-file-handler.test.jsghost/core/test/unit/server/data/importer/importers/content-file-importer.test.jsghost/core/test/unit/server/data/importer/importers/data/newsletters.test.jsghost/core/test/unit/server/data/importer/importers/data/posts.test.jsghost/core/test/unit/server/data/importer/importers/data/products.test.jsghost/core/test/unit/server/data/importer/importers/data/settings.test.jsghost/core/test/unit/server/data/seeders/data-generator.test.js
✅ Files skipped from review due to trivial changes (2)
- ghost/core/core/server/data/seeders/importers/recommendation-click-events-importer.js
- ghost/core/core/server/data/seeders/importers/posts-tags-importer.js
🚧 Files skipped from review as they are similar to previous changes (33)
- ghost/core/core/server/data/importer/importers/data/newsletters-importer.js
- ghost/core/core/server/data/importer/import-manager.js
- ghost/core/core/server/data/importer/importers/data/custom-theme-settings-importer.js
- ghost/core/core/server/data/seeders/importers/members-products-importer.js
- ghost/core/core/server/data/seeders/importers/posts-importer.js
- ghost/core/core/boot.js
- ghost/core/test/unit/server/data/importer/importers/data/products.test.js
- ghost/core/core/server/data/seeders/importers/email-batches-importer.js
- ghost/core/core/server/data/importer/importers/data/tags-importer.js
- ghost/core/test/unit/server/data/importer/handlers/importer-content-file-handler.test.js
- ghost/core/core/server/data/seeders/importers/members-subscription-created-events-importer.js
- ghost/core/core/server/data/seeders/importers/members-stripe-customers-importer.js
- ghost/core/core/server/data/seeders/importers/benefits-importer.js
- ghost/core/core/server/data/seeders/utils/json-importer.js
- ghost/core/core/server/data/seeders/importers/members-labels-importer.js
- ghost/core/core/server/data/seeders/data-generator.js
- ghost/core/core/server/data/seeders/importers/posts-products-importer.js
- ghost/core/core/server/data/seeders/importers/stripe-prices-importer.js
- ghost/core/test/unit/server/data/importer/importers/content-file-importer.test.js
- ghost/core/core/server/data/seeders/importers/members-feedback-importer.js
- ghost/core/core/server/data/seeders/importers/products-importer.js
- ghost/core/test/unit/server/data/importer/importers/data/settings.test.js
- ghost/core/core/server/data/seeders/importers/redirects-importer.js
- ghost/core/core/server/data/seeders/importers/emails-importer.js
- ghost/core/core/server/data/schema/fixtures/index.js
- ghost/core/core/server/data/importer/importers/data/settings-importer.js
- ghost/core/core/cli/generate-data.js
- ghost/core/.eslintrc.js
- ghost/core/core/server/data/seeders/importers/members-click-events-importer.js
- ghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.js
- ghost/core/core/server/data/seeders/importers/index.js
- ghost/core/core/server/data/seeders/importers/members-status-events-importer.js
- ghost/core/core/server/data/seeders/importers/recommendations-importer.js
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use `PascalCase` for component identifiers in filenames while keeping ShadCN-generated files in kebab-case
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use `camelCase` for function and variable names
📚 Learning: 2026-01-08T10:26:38.700Z
Learnt from: rob-ghost
Repo: TryGhost/Ghost PR: 25791
File: ghost/core/core/server/api/endpoints/member-comment-ban.js:64-68
Timestamp: 2026-01-08T10:26:38.700Z
Learning: In the Ghost API, endpoints rely on the serialization layer to prepare frame.data[docName] as a non-empty array before query() executes. Endpoints access frame.data[docName][0] directly (e.g., frame.data.comment_bans[0], frame.data.members[0], frame.data.posts[0]) without per-endpoint validation. This pattern is common across API endpoints. When maintaining or creating endpoints, avoid duplicating validation for frame.data[docName] and ensure the serializer guarantees the shape and non-emptiness. If you add a new endpoint that uses this frame.data[docName], follow the same assumption and avoid redundant checks unless there's a documented exception.
Applied to files:
ghost/core/core/server/data/importer/importers/data/revue-subscriber-importer.jsghost/core/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.jsghost/core/core/server/data/seeders/importers/recommendation-subscribe-events-importer.jsghost/core/core/server/data/seeders/importers/offers-importer.jsghost/core/core/server/data/seeders/importers/members-subscribe-events-importer.jsghost/core/core/server/data/seeders/importers/members-newsletters-importer.jsghost/core/core/server/data/seeders/importers/newsletters-importer.jsghost/core/core/server/data/seeders/importers/web-mentions-importer.jsghost/core/core/server/data/seeders/importers/roles-users-importer.jsghost/core/core/server/data/importer/importers/data/data-importer.jsghost/core/core/server/data/importer/importers/data/users-importer.jsghost/core/core/server/data/seeders/importers/members-login-events-importer.jsghost/core/core/server/data/importer/importers/data/stripe-prices-importer.jsghost/core/core/server/data/seeders/importers/users-importer.jsghost/core/core/server/data/seeders/importers/tags-importer.jsghost/core/test/unit/server/data/importer/importers/data/posts.test.jsghost/core/core/server/data/seeders/importers/posts-authors-importer.jsghost/core/test/unit/server/data/importer/importers/data/newsletters.test.jsghost/core/core/server/data/seeders/importers/members-created-events-importer.jsghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.jsghost/core/core/server/data/importer/importers/data/roles-importer.jsghost/core/core/server/data/seeders/importers/products-benefits-importer.jsghost/core/core/server/data/importer/importers/data/products-importer.jsghost/core/core/server/data/importer/importers/data/stripe-products-importer.jsghost/core/core/server/data/migrations/hooks/migrate/index.jsghost/core/core/server/data/seeders/importers/labels-importer.jsghost/core/core/server/data/seeders/importers/members-importer.jsghost/core/test/unit/server/data/seeders/data-generator.test.jsghost/core/core/server/data/seeders/importers/email-recipients-importer.jsghost/core/core/server/data/seeders/importers/comments-importer.jsghost/core/core/server/data/seeders/importers/stripe-products-importer.jsghost/core/core/server/data/importer/importers/data/posts-importer.js
📚 Learning: 2025-11-24T17:29:43.865Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: e2e/AGENTS.md:0-0
Timestamp: 2025-11-24T17:29:43.865Z
Learning: Applies to e2e/**/*.test.ts : Use factory pattern for all test data creation instead of hard-coded data or direct database manipulation
Applied to files:
ghost/core/test/unit/server/data/seeders/data-generator.test.js
🧬 Code graph analysis (26)
ghost/core/core/server/data/importer/importers/data/revue-subscriber-importer.js (9)
ghost/core/core/server/data/importer/importers/data/custom-theme-settings-importer.js (3)
BaseImporter(3-3)require(5-5)require(6-6)ghost/core/core/server/data/importer/importers/data/newsletters-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/posts-importer.js (1)
BaseImporter(4-4)ghost/core/core/server/data/importer/importers/data/products-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/roles-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/stripe-prices-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/stripe-products-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/tags-importer.js (2)
BaseImporter(3-3)require(5-5)ghost/core/core/server/data/importer/importers/data/users-importer.js (1)
BaseImporter(3-3)
ghost/core/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js (15)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipients-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/emails-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-click-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-created-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-feedback-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-login-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-newsletters-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/seeders/importers/members-subscribe-events-importer.js (2)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/seeders/importers/members-newsletters-importer.js (15)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipients-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/emails-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-click-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-created-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-feedback-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-login-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/members-status-events-importer.js (1)
TableImporter(1-1)
ghost/core/core/server/data/seeders/importers/newsletters-importer.js (15)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipients-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/emails-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-click-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-created-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-feedback-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-login-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-newsletters-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/seeders/importers/web-mentions-importer.js (5)
ghost/core/core/server/data/seeders/importers/benefits-importer.js (4)
TableImporter(1-1)require(2-2)require(3-3)require(4-4)ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/seeders/importers/roles-users-importer.js (2)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/importer/importers/data/data-importer.js (3)
ghost/core/test/unit/server/data/importer/importers/data/posts.test.js (1)
PostsImporter(3-3)ghost/core/test/unit/server/data/importer/importers/data/newsletters.test.js (1)
NewslettersImporter(2-2)ghost/core/test/unit/server/data/importer/importers/data/products.test.js (1)
ProductsImporter(2-2)
ghost/core/core/server/data/importer/importers/data/users-importer.js (10)
ghost/core/core/server/data/importer/importers/data/custom-theme-settings-importer.js (3)
BaseImporter(3-3)require(5-5)require(6-6)ghost/core/core/server/data/importer/importers/data/newsletters-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/posts-importer.js (1)
BaseImporter(4-4)ghost/core/core/server/data/importer/importers/data/products-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/revue-subscriber-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/roles-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/settings-importer.js (3)
BaseImporter(4-4)require(9-9)require(10-10)ghost/core/core/server/data/importer/importers/data/stripe-prices-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/stripe-products-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/tags-importer.js (2)
BaseImporter(3-3)require(5-5)
ghost/core/core/server/data/seeders/importers/members-login-events-importer.js (1)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/seeders/importers/users-importer.js (15)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipients-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/emails-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-click-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-created-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-feedback-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-login-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-newsletters-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/seeders/importers/tags-importer.js (15)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipients-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/emails-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-click-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-created-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-feedback-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-login-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-newsletters-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/test/unit/server/data/importer/importers/data/posts.test.js (1)
ghost/core/core/server/data/importer/importers/data/data-importer.js (4)
PostsImporter(8-8)require(4-4)require(6-6)require(19-19)
ghost/core/core/server/data/seeders/importers/posts-authors-importer.js (2)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/test/unit/server/data/importer/importers/data/newsletters.test.js (1)
ghost/core/core/server/data/importer/importers/data/data-importer.js (4)
NewslettersImporter(12-12)require(4-4)require(6-6)require(19-19)
ghost/core/core/server/data/seeders/importers/members-created-events-importer.js (3)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/emails-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-importer.js (1)
TableImporter(1-1)
ghost/core/core/server/data/importer/importers/data/roles-importer.js (10)
ghost/core/core/server/data/importer/importers/data/custom-theme-settings-importer.js (3)
BaseImporter(3-3)require(5-5)require(6-6)ghost/core/core/server/data/importer/importers/data/newsletters-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/posts-importer.js (1)
BaseImporter(4-4)ghost/core/core/server/data/importer/importers/data/products-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/revue-subscriber-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/settings-importer.js (3)
BaseImporter(4-4)require(9-9)require(10-10)ghost/core/core/server/data/importer/importers/data/stripe-prices-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/stripe-products-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/tags-importer.js (2)
BaseImporter(3-3)require(5-5)ghost/core/core/server/data/importer/importers/data/users-importer.js (1)
BaseImporter(3-3)
ghost/core/core/server/data/seeders/importers/products-benefits-importer.js (16)
ghost/core/core/server/data/seeders/importers/benefits-importer.js (4)
TableImporter(1-1)require(2-2)require(3-3)require(4-4)ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipients-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/emails-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-click-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-created-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-feedback-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-login-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-newsletters-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/importer/importers/data/products-importer.js (8)
ghost/core/core/server/data/importer/importers/data/newsletters-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/posts-importer.js (1)
BaseImporter(4-4)ghost/core/core/server/data/importer/importers/data/revue-subscriber-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/roles-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/stripe-prices-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/stripe-products-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/tags-importer.js (2)
BaseImporter(3-3)require(5-5)ghost/core/core/server/data/importer/importers/data/users-importer.js (1)
BaseImporter(3-3)
ghost/core/core/server/data/importer/importers/data/stripe-products-importer.js (8)
ghost/core/core/server/data/importer/importers/data/newsletters-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/posts-importer.js (1)
BaseImporter(4-4)ghost/core/core/server/data/importer/importers/data/products-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/revue-subscriber-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/roles-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/stripe-prices-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/tags-importer.js (2)
BaseImporter(3-3)require(5-5)ghost/core/core/server/data/importer/importers/data/users-importer.js (1)
BaseImporter(3-3)
ghost/core/core/server/data/seeders/importers/labels-importer.js (14)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipients-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/emails-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-click-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-created-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-feedback-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-labels-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-login-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-newsletters-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/seeders/importers/members-importer.js (3)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/test/unit/server/data/seeders/data-generator.test.js (2)
ghost/core/core/cli/generate-data.js (1)
DataGenerator(3-3)ghost/core/core/server/data/seeders/data-generator.js (3)
require(4-4)require(6-6)require(9-9)
ghost/core/core/server/data/seeders/importers/comments-importer.js (3)
ghost/core/core/server/data/seeders/importers/email-batches-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/email-recipient-failures-importer.js (1)
TableImporter(1-1)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/seeders/importers/stripe-products-importer.js (2)
ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
TableImporter(2-2)ghost/core/core/server/data/seeders/importers/members-products-importer.js (1)
TableImporter(2-2)
ghost/core/core/server/data/importer/importers/data/posts-importer.js (10)
ghost/core/core/server/data/importer/importers/data/custom-theme-settings-importer.js (3)
BaseImporter(3-3)require(5-5)require(6-6)ghost/core/core/server/data/importer/importers/data/newsletters-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/products-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/revue-subscriber-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/roles-importer.js (1)
BaseImporter(2-2)ghost/core/core/server/data/importer/importers/data/settings-importer.js (3)
BaseImporter(4-4)require(9-9)require(10-10)ghost/core/core/server/data/importer/importers/data/stripe-prices-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/stripe-products-importer.js (1)
BaseImporter(3-3)ghost/core/core/server/data/importer/importers/data/tags-importer.js (2)
BaseImporter(3-3)require(5-5)ghost/core/core/server/data/importer/importers/data/users-importer.js (1)
BaseImporter(3-3)
🔇 Additional comments (32)
ghost/core/core/server/data/seeders/importers/members-importer.js (1)
1-1: LGTM! Import path updated to kebab-case.The require path change from
'./TableImporter'to'./table-importer'is consistent with other importers in the same directory and aligns with the PR's kebab-case standardization objective.ghost/core/core/server/data/seeders/importers/users-importer.js (1)
1-1: LGTM! Import path updated consistently with project-wide kebab-case standardization.The module path change from
./TableImporterto./table-importeraligns with the PR's objective to standardize filenames to kebab-case. This pattern is consistent across all related importer files in the codebase.ghost/core/core/server/data/seeders/importers/labels-importer.js (1)
1-1: LGTM! Consistent kebab-case naming.The require path update from
'./TableImporter'to'./table-importer'correctly aligns with the PR's kebab-case naming convention. This change is consistent with all other importers in the same directory.ghost/core/core/server/data/seeders/importers/members-stripe-customers-subscriptions-importer.js (1)
2-2: LGTM! Import path updated consistently with kebab-case convention.The change from
./TableImporterto./table-importeraligns with the PR's objective to standardize on kebab-case naming. This pattern is consistent across all other importer files in the same directory.ghost/core/core/server/data/seeders/importers/posts-authors-importer.js (1)
2-2: LGTM! Import path correctly updated to kebab-case.The change from
'./TableImporter'to'./table-importer'is consistent with the repository-wide migration to kebab-case file naming for seeders and importers, as confirmed by other files in the same directory.ghost/core/core/server/data/seeders/importers/tags-importer.js (1)
3-3: LGTM! Import path updated to kebab-case.The import path change from
'./TableImporter'to'./table-importer'is consistent with all other importer files in this directory and aligns with the PR's objective to standardize on kebab-case naming.ghost/core/core/server/data/seeders/importers/comments-importer.js (1)
2-2: LGTM! Import path correctly updated to kebab-case.The change from
'./TableImporter'to'./table-importer'aligns with the PR objectives to standardize file naming to kebab-case. This is consistent with other importers in the same directory.ghost/core/test/unit/server/data/seeders/data-generator.test.js (1)
12-12: LGTM! Import path correctly updated to kebab-case.The module path has been updated from PascalCase to kebab-case while correctly preserving the PascalCase identifier for the class constructor. The change aligns with the PR's objective of standardizing file naming conventions.
ghost/core/core/server/data/seeders/importers/roles-users-importer.js (1)
2-2: LGTM! Require path correctly updated to kebab-case.The module path change from
'./TableImporter'to'./table-importer'aligns with the PR objective and is consistent with other importers in the same directory.ghost/core/core/server/data/seeders/importers/recommendation-subscribe-events-importer.js (1)
1-1: LGTM! Import path updated to kebab-case.The import path change from
'./TableImporter'to'./table-importer'is consistent with the PR's objective to standardize file naming to kebab-case across core seeders and importers.ghost/core/core/server/data/seeders/importers/members-created-events-importer.js (1)
1-1: LGTM! Import path correctly updated to kebab-case.The import path change from
./TableImporterto./table-importeris consistent with the PR's objective to standardize file naming conventions across core seeders and importers. This matches the pattern used in other importer files (comments-importer.js, members-importer.js, emails-importer.js) as shown in the relevant code snippets.ghost/core/core/server/data/seeders/importers/members-login-events-importer.js (1)
1-1: LGTM! Import path correctly updated to kebab-case.The module path change aligns with the PR's kebab-case naming convention, and the variable name appropriately remains PascalCase for the class identifier. The pattern is consistent with other importers in the codebase.
ghost/core/core/server/data/seeders/importers/offers-importer.js (1)
1-1: Correctly updated to kebab-case naming convention.The require statement now matches the renamed file, and no stale references remain in the codebase.
ghost/core/core/server/data/seeders/importers/members-paid-subscription-events-importer.js (1)
1-1: Verify all references to the old filename pattern have been updated.The import path change from
require('./TableImporter')torequire('./table-importer')aligns with kebab-case naming standards. Ensure that:
- The actual file has been renamed from
TableImporter.jstotable-importer.js- All references to the old filename pattern across the codebase have been updated
- No runtime errors occur from outdated import paths
ghost/core/core/server/data/seeders/importers/stripe-products-importer.js (1)
2-2: LGTM! Import path updated to kebab-case.The change correctly updates the import path to
'./table-importer', aligning with the PR's objective to standardize file naming conventions. The update is consistent with all other importers in the same directory, and the module file exists at the expected location.ghost/core/core/server/data/migrations/hooks/migrate/index.js (1)
2-3: LGTM! Path updates align with kebab-case convention.The require paths have been correctly updated to kebab-case while maintaining the camelCase export names, which follows JavaScript naming conventions.
ghost/core/test/unit/server/data/importer/importers/data/newsletters.test.js (1)
2-2: LGTM! Import path correctly updated to kebab-case.The require path has been updated to match the renamed newsletters-importer file while correctly maintaining the PascalCase variable name for the class.
ghost/core/core/server/data/importer/importers/data/products-importer.js (1)
2-2: LGTM! BaseImporter path correctly updated.The import path has been updated from
./Baseto./base, consistent with the kebab-case convention applied across all importer files in this PR.ghost/core/core/server/data/importer/importers/data/roles-importer.js (1)
2-2: LGTM! BaseImporter path correctly updated.The import path has been updated from
./Baseto./base, maintaining consistency with the kebab-case naming convention.ghost/core/core/server/data/importer/importers/data/revue-subscriber-importer.js (1)
2-2: LGTM! BaseImporter path correctly updated.The import path has been updated from
./Baseto./base, consistent with the kebab-case refactoring applied across all importer modules.ghost/core/core/server/data/importer/importers/data/stripe-products-importer.js (1)
3-3: LGTM! Import path updated to kebab-case.The change from
'./Base'to'./base'is consistent with the codebase-wide refactor to kebab-case naming conventions. This aligns with similar updates across numerous other importer files.ghost/core/core/server/data/seeders/importers/web-mentions-importer.js (1)
1-1: LGTM! Import path updated to kebab-case.The change from
'./TableImporter'to'./table-importer'aligns with the PR's objective to standardize on kebab-case naming across seeder importers.ghost/core/core/server/data/seeders/importers/members-subscribe-events-importer.js (1)
1-1: LGTM! Import path updated to kebab-case.Consistent with the codebase-wide refactor to kebab-case filenames.
ghost/core/core/server/data/importer/importers/data/posts-importer.js (1)
4-4: LGTM! Import path updated to kebab-case.The change from
'./Base'to'./base'is consistent with the kebab-case refactor across all data importers.ghost/core/core/server/data/seeders/importers/email-recipients-importer.js (1)
1-1: LGTM! Import path correctly uses kebab-case.Verified that the import
require('./table-importer')resolves to the actualtable-importer.jsfile on case-sensitive filesystems. All seeder importer files consistently follow kebab-case naming convention with no PascalCase variants remaining.ghost/core/core/server/data/seeders/importers/newsletters-importer.js (1)
1-1: LGTM! Import path updated to kebab-case.The change from
'./TableImporter'to'./table-importer'correctly aligns with the repository-wide kebab-case naming convention.ghost/core/core/server/data/seeders/importers/products-benefits-importer.js (1)
1-1: LGTM! Import path updated to kebab-case.The change from
'./TableImporter'to'./table-importer'is consistent with the refactoring objective.ghost/core/core/server/data/importer/importers/data/stripe-prices-importer.js (1)
3-3: LGTM! Import path updated to kebab-case.The change from
'./Base'to'./base'correctly reflects the kebab-case filename convention adopted across the data importer modules.ghost/core/core/server/data/importer/importers/data/users-importer.js (1)
3-3: LGTM! Import path updated to kebab-case.The change from
'./Base'to'./base'is consistent with the kebab-case refactoring applied throughout the importer modules.ghost/core/core/server/data/seeders/importers/members-newsletters-importer.js (1)
1-1: LGTM! Import path updated to kebab-case.The change from
'./TableImporter'to'./table-importer'correctly aligns with the kebab-case naming standard.ghost/core/core/server/data/importer/importers/data/data-importer.js (1)
8-18: All 11 importer modules successfully renamed to kebab-case.All require statements in data-importer.js have been correctly updated. Verification confirms all 11 kebab-case importer files exist and no references to old PascalCase filenames remain across the codebase.
ghost/core/test/unit/server/data/importer/importers/data/posts.test.js (1)
3-3: Module file successfully renamed and imports updated.The import path update to
posts-importeris correct. The actual module file exists atghost/core/core/server/data/importer/importers/data/posts-importer.js, there are no remaining references to the oldPostsImporter.jsfilename, and all imports throughout the codebase correctly use the kebab-case path. The relative import path in the test file (../../../../../../../core/server/data/importer/importers/data/posts-importer) properly resolves to the renamed module.
5b428c4 to
cf7e427
Compare
React E2E Tests FailedTo view the Playwright test report locally, run: REPORT_DIR=$(mktemp -d) && gh run download 20825809712 -n playwright-report-react -D "$REPORT_DIR" && npx playwright show-report "$REPORT_DIR" |
Ember E2E Tests FailedTo view the Playwright test report locally, run: REPORT_DIR=$(mktemp -d) && gh run download 20825809712 -n playwright-report-ember -D "$REPORT_DIR" && npx playwright show-report "$REPORT_DIR" |
React E2E Tests FailedTo view the Playwright test report locally, run: REPORT_DIR=$(mktemp -d) && gh run download 20825809712 -n playwright-report-react -D "$REPORT_DIR" && npx playwright show-report "$REPORT_DIR" |
Ember E2E Tests FailedTo view the Playwright test report locally, run: REPORT_DIR=$(mktemp -d) && gh run download 20825809712 -n playwright-report-ember -D "$REPORT_DIR" && npx playwright show-report "$REPORT_DIR" |
cf7e427 to
8944b04
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #25819 +/- ##
==========================================
- Coverage 72.35% 72.35% -0.01%
==========================================
Files 1542 1542
Lines 118524 118532 +8
Branches 14218 14218
==========================================
+ Hits 85761 85762 +1
- Misses 31746 31753 +7
Partials 1017 1017
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
8944b04 to
eefb17d
Compare
React E2E Tests FailedTo view the Playwright test report locally, run: REPORT_DIR=$(mktemp -d) && gh run download 20911356550 -n playwright-report-react -D "$REPORT_DIR" && npx playwright show-report "$REPORT_DIR" |
1 similar comment
React E2E Tests FailedTo view the Playwright test report locally, run: REPORT_DIR=$(mktemp -d) && gh run download 20911356550 -n playwright-report-react -D "$REPORT_DIR" && npx playwright show-report "$REPORT_DIR" |
…plain why - removed lint disable filename check comment from files that do not need it
…es with disabled linting rules
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (2)
ghost/core/core/server/api/endpoints/utils/validators/input/password_reset.js (2)
16-26: Inconsistent error handling pattern withgenerateResetToken.
resetPasswordreturnsPromise.reject()whilegenerateResetToken(line 34) throws synchronously. This inconsistency can cause unexpected behavior depending on how the validation framework handles these functions.Consider aligning both functions to use the same error pattern for consistency.
♻️ Option 1: Use `throw` consistently (preferred if validators are sync)
resetPassword(apiConfig, frame) { debug('resetPassword'); const data = frame.data.password_reset[0]; if (data.newPassword !== data.ne2Password) { - return Promise.reject(new errors.ValidationError({ + throw new errors.ValidationError({ message: tpl(messages.newPasswordsDoNotMatch) - })); + }); } },
28-38: Inconsistent optional chaining usage.Line 31 uses optional chaining (
frame.data.password_reset?.[0]?.email) while line 19 directly accessesframe.data.password_reset[0]without guards. Based on learnings, Ghost endpoints rely on the serialization layer to guaranteeframe.data[docName]is a non-empty array, so direct access is the established pattern.Consider using consistent access patterns within the same validator file.
♻️ Align with Ghost convention (direct access)
generateResetToken(apiConfig, frame) { debug('generateResetToken'); - const email = frame.data.password_reset?.[0]?.email; + const email = frame.data.password_reset[0].email; if (typeof email !== 'string' || !validator.isEmail(email)) { throw new errors.BadRequestError({ message: tpl(messages.invalidEmailReceived) }); } }
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
ghost/core/.eslintrc.jsghost/core/core/server/adapters/cache/Redis.jsghost/core/core/server/api/endpoints/utils/validators/input/password_reset.jsghost/core/core/server/services/email-suppression-list/email-suppression-list.js
💤 Files with no reviewable changes (1)
- ghost/core/core/server/services/email-suppression-list/email-suppression-list.js
🧰 Additional context used
🧠 Learnings (10)
📓 Common learnings
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use `PascalCase` for component identifiers in filenames while keeping ShadCN-generated files in kebab-case
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use `camelCase` for function and variable names
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: e2e/AGENTS.md:0-0
Timestamp: 2025-11-24T17:29:43.865Z
Learning: Applies to e2e/**/*.{ts,tsx} : Prefer less comments and give things clear names
Learnt from: sagzy
Repo: TryGhost/Ghost PR: 24673
File: ghost/i18n/lib/i18n.js:34-35
Timestamp: 2025-11-24T11:12:15.712Z
Learning: In the Ghost i18n package (ghost/i18n/lib/i18n.js), changing existing locale codes requires backwards compatibility handling for users who have already configured those locales. Such changes should be done in a separate PR with migration logic rather than included in feature PRs.
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/{src,test}/**/*.{ts,tsx,js} : Follow ESLint and `tailwindcss/*` plugin rules when writing styles
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use `PascalCase` for component identifiers in filenames while keeping ShadCN-generated files in kebab-case
Applied to files:
ghost/core/.eslintrc.js
📚 Learning: 2025-10-30T17:13:26.190Z
Learnt from: sam-lord
Repo: TryGhost/Ghost PR: 25303
File: ghost/core/core/server/services/email-service/BatchSendingService.js:19-19
Timestamp: 2025-10-30T17:13:26.190Z
Learning: In ghost/core/core/server/services/email-service/BatchSendingService.js and similar files in the Ghost codebase, prefer using `{...options}` spread syntax without explicit guards like `...(options || {})` when spreading potentially undefined objects, as the maintainer prefers cleaner syntax over defensive patterns when the behavior is safe.
Applied to files:
ghost/core/.eslintrc.js
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/{src,test}/**/*.{ts,tsx,js} : Follow ESLint and `tailwindcss/*` plugin rules when writing styles
Applied to files:
ghost/core/.eslintrc.js
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use `camelCase` for function and variable names
Applied to files:
ghost/core/.eslintrc.js
📚 Learning: 2025-11-24T11:12:15.712Z
Learnt from: sagzy
Repo: TryGhost/Ghost PR: 24673
File: ghost/i18n/lib/i18n.js:34-35
Timestamp: 2025-11-24T11:12:15.712Z
Learning: In the Ghost i18n package (ghost/i18n/lib/i18n.js), changing existing locale codes requires backwards compatibility handling for users who have already configured those locales. Such changes should be done in a separate PR with migration logic rather than included in feature PRs.
Applied to files:
ghost/core/.eslintrc.js
📚 Learning: 2025-11-24T17:29:43.865Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: e2e/AGENTS.md:0-0
Timestamp: 2025-11-24T17:29:43.865Z
Learning: Applies to e2e/**/*.{ts,tsx} : Prefer less comments and give things clear names
Applied to files:
ghost/core/.eslintrc.js
📚 Learning: 2025-08-11T19:39:00.428Z
Learnt from: kevinansfield
Repo: TryGhost/Ghost PR: 24651
File: ghost/core/test/utils/urlUtils.js:53-57
Timestamp: 2025-08-11T19:39:00.428Z
Learning: In Ghost's test utilities, when fixing specific issues like async behavior, it's preferred to maintain existing error handling patterns (even if suboptimal) to keep PRs focused on their primary objective. Error handling improvements can be addressed in separate, dedicated PRs.
Applied to files:
ghost/core/.eslintrc.js
📚 Learning: 2025-05-29T07:45:35.714Z
Learnt from: ErisDS
Repo: TryGhost/Ghost PR: 23582
File: ghost/core/.c8rc.json:24-24
Timestamp: 2025-05-29T07:45:35.714Z
Learning: In Ghost project, app.js files under core/server/web are intentionally excluded from unit test coverage because they are not easily unit-testable due to being entry points with initialization code and side effects.
Applied to files:
ghost/core/.eslintrc.js
📚 Learning: 2026-01-08T10:26:38.700Z
Learnt from: rob-ghost
Repo: TryGhost/Ghost PR: 25791
File: ghost/core/core/server/api/endpoints/member-comment-ban.js:64-68
Timestamp: 2026-01-08T10:26:38.700Z
Learning: In the Ghost API, endpoints rely on the serialization layer to prepare frame.data[docName] as a non-empty array before query() executes. Endpoints access frame.data[docName][0] directly (e.g., frame.data.comment_bans[0], frame.data.members[0], frame.data.posts[0]) without per-endpoint validation. This pattern is common across API endpoints. When maintaining or creating endpoints, avoid duplicating validation for frame.data[docName] and ensure the serializer guarantees the shape and non-emptiness. If you add a new endpoint that uses this frame.data[docName], follow the same assumption and avoid redundant checks unless there's a documented exception.
Applied to files:
ghost/core/core/server/api/endpoints/utils/validators/input/password_reset.jsghost/core/core/server/adapters/cache/Redis.js
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
- GitHub Check: Legacy tests (Node 22.18.0, sqlite3)
- GitHub Check: Ghost-CLI tests
- GitHub Check: Legacy tests (Node 22.18.0, mysql8)
- GitHub Check: Acceptance tests (Node 22.18.0, sqlite3)
- GitHub Check: Lint
- GitHub Check: Unit tests (Node 22.18.0)
- GitHub Check: Admin tests - Chrome
- GitHub Check: Acceptance tests (Node 22.18.0, mysql8)
- GitHub Check: Build & Push Docker Image
🔇 Additional comments (3)
ghost/core/core/server/adapters/cache/Redis.js (1)
1-7: Good documentation for the naming exception.The JSDoc comment clearly explains the adapter naming constraint and provides helpful cross-references to the config and adapter-manager files. This context will help future maintainers understand why the file can't follow kebab-case conventions.
ghost/core/.eslintrc.js (1)
103-127: Well-structured approach to enforcing kebab-case with documented exceptions.The broadened scope (
core/**/*.{js,ts}) with explicitexcludedFilesis cleaner than scattered overrides. Each exclusion (adapters, shared events, caches, Sentry, libs) is documented with clear rationale for future maintainers.ghost/core/core/server/api/endpoints/utils/validators/input/password_reset.js (1)
1-4: LGTM!Good addition of the explanatory comment for the ESLint disable directive. This aligns with the PR objective of documenting why filename linting exceptions exist.
ref #25815
what
note: since services contain more than 300 files to be renamed, will do this in multiple PRs