🚀 Strapi is the leading open-source headless CMS. It’s 100% JavaScript/TypeScript, fully customizable, and developer-first.
281 matches across 12 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| CRITICAL | tests/api/plugins/graphql/crud.test.api.js | 143 | data.posts = res.body.data.posts_connection.data.map(({ documentId, attributes }) => ({ |
| CRITICAL | packages/core/database/src/dialects/postgresql/index.ts | 21 | this.db.connection.client.driver.types.setTypeParser( |
| CRITICAL | packages/core/database/src/dialects/postgresql/index.ts | 27 | this.db.connection.client.driver.types.setTypeParser( |
| CRITICAL | packages/core/database/src/dialects/postgresql/index.ts | 32 | this.db.connection.client.driver.types.setTypeParser( |
| CRITICAL | packages/core/core/src/providers/registries.ts | 38 | strapi.db.migrations.providers.internal.register(discardDocumentDrafts); |
| CRITICAL | …server/src/services/__tests__/persisted-tables.test.ts | 16 | strapiMock.db.dialect.schemaInspector.getTables.mockReturnValueOnce([ |
| CRITICAL | …server/src/services/__tests__/persisted-tables.test.ts | 25 | strapiMock.db.dialect.schemaInspector.getTables.mockReturnValueOnce([ |
| CRITICAL | packages/core/admin/server/src/register.ts | 10 | strapi.db.migrations.providers.internal.register(migrateAdminPreferedLanguageDkToDa); |
| CRITICAL | packages/core/admin/server/src/bootstrap.ts | 94 | const validPermissions = strapi.contentAPI.permissions.providers.action.keys(); |
| CRITICAL | packages/core/admin/server/src/services/api-token.ts | 147 | const validPermissions = strapi.contentAPI.permissions.providers.action.keys(); |
| CRITICAL | packages/core/content-releases/server/src/register.ts | 19 | strapi.db.migrations.providers.internal.register(addEntryDocumentToReleaseActions); |
| CRITICAL | …ListConfiguration/tests/ListConfigurationPage.test.tsx | 59 | mockData.contentManager.collectionTypeConfiguration.contentType.layouts.list.forEach( |
| CRITICAL | packages/core/strapi/src/node/vite/watch.ts | 153 | const existingRoutes = ctx.strapi.server.router.stack.filter( |
| CRITICAL | packages/core/strapi/src/node/vite/watch.ts | 157 | const index = ctx.strapi.server.router.stack.indexOf(route); |
| CRITICAL | packages/core/strapi/src/node/vite/watch.ts | 159 | ctx.strapi.server.router.stack.splice(index, 1); |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …service/relations/unidirectional-relations.test.api.ts | 246 | // Step 1: Create Product with component tag relation (draft) |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 263 | // Step 2: Publish Tag FIRST - this triggers ghost relation creation |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 273 | // Step 3: Publish Product - creates published component version |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 294 | // Step 1: Create and publish a tag |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 304 | // Step 2: Create Product with component tag relation (published) |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 314 | // Step 3: Poublish the product |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 324 | // Step 4: Update the tag and publish |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 335 | // Step 5: Republish the parent |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 366 | // Step 1: Create Product with nested component tag relation (draft) |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 386 | // Step 2: Publish Tag FIRST |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 400 | // Step 3: Publish Product - creates published component version |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 421 | // Step 1: Create and publish a tag |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 429 | // Step 2: Create Product with nested component tag relation (published) |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 437 | // Step 3: Publish the product |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 447 | // Step 4: Update the tag and publish |
| LOW | …service/relations/unidirectional-relations.test.api.ts | 466 | // Step 5: Republish the parent |
| LOW | …-service/relations/bidirectional-relations.test.api.ts | 135 | // Step 2: Create Article with relations to all three authors in order (not creation order) |
| LOW | …-service/relations/bidirectional-relations.test.api.ts | 147 | // Step 3: Publish everything (authors in non-alphabetical publish order, then article) |
| LOW | …-service/relations/bidirectional-relations.test.api.ts | 153 | // Step 4: Verify Article published shows A, B, C in order |
| LOW | …-service/relations/bidirectional-relations.test.api.ts | 167 | // Step 5: Unpublish Author B |
| LOW | …-service/relations/bidirectional-relations.test.api.ts | 170 | // Step 6: Republish Author B |
| LOW | …-service/relations/bidirectional-relations.test.api.ts | 173 | // Step 7: Verify Article published relations still show A, B, C in correct order |
| LOW | tests/e2e/tests/settings/rbac/actions/see-role.spec.ts | 22 | // Step 1: click the "Editor" role row |
| LOW | tests/e2e/tests/settings/rbac/actions/edit-role.spec.ts | 32 | // Step 1: click the "Editor" role row |
| LOW | tests/e2e/tests/settings/rbac/actions/edit-role.spec.ts | 36 | // Step 2: fill in the new role name and description |
| LOW | tests/e2e/tests/settings/rbac/actions/edit-role.spec.ts | 40 | // Step 3: modify the public permissions for articles |
| LOW | tests/e2e/tests/settings/rbac/actions/edit-role.spec.ts | 49 | // Step 4: save the updated role |
| LOW | tests/e2e/tests/settings/rbac/actions/edit-role.spec.ts | 52 | // Step 5: verify the changes in the role list |
| LOW | …ts/e2e/tests/settings/rbac/actions/delete-role.spec.ts | 37 | // Step 1: locate the "Author" role row |
| LOW | …ts/e2e/tests/settings/rbac/actions/delete-role.spec.ts | 40 | // Step 2: delete the role |
| LOW | …ts/e2e/tests/settings/rbac/actions/delete-role.spec.ts | 43 | // Step 3: confirm deletion in the alert dialog |
| LOW | …ts/e2e/tests/settings/rbac/actions/delete-role.spec.ts | 49 | // Step 4: verify the role no longer appears in the list |
| LOW | …ests/settings/rbac/actions/assign-role-to-user.spec.ts | 28 | // Step 1: find the "Editor" user |
| LOW | …ests/settings/rbac/actions/assign-role-to-user.spec.ts | 31 | // Step 2: go to the user view, wait for the page to load |
| LOW | …ests/settings/rbac/actions/assign-role-to-user.spec.ts | 34 | // Step 3: update the user's roles |
| LOW | …ests/settings/rbac/actions/assign-role-to-user.spec.ts | 45 | // Step 3: save the modifications |
| LOW | …ests/settings/rbac/actions/assign-role-to-user.spec.ts | 48 | // Step 4: navigate back to the Users management page |
| LOW | …ests/settings/rbac/actions/assign-role-to-user.spec.ts | 51 | // Step 5: make sure the user has the correct role and that the old one has been removed |
| LOW | …ts/e2e/tests/settings/rbac/actions/create-role.spec.ts | 32 | // Step 1: click "Create new role" |
| LOW | …ts/e2e/tests/settings/rbac/actions/create-role.spec.ts | 35 | // Step 2: fill in the role name and description |
| LOW | …ts/e2e/tests/settings/rbac/actions/create-role.spec.ts | 39 | // Step 3: assign the public "publish" permission for articles |
| LOW | …ts/e2e/tests/settings/rbac/actions/create-role.spec.ts | 43 | // Step 4: save the newly created role |
| LOW | …ts/e2e/tests/settings/rbac/actions/create-role.spec.ts | 46 | // Step 5: verify the newly created role in the list |
| LOW | …ttings/rbac/scenarios/create-new-role.scenario.spec.ts | 37 | // Step 1: create a new role |
| LOW | …ttings/rbac/scenarios/create-new-role.scenario.spec.ts | 49 | // Step 2: assign the new role to a user |
| LOW | …ttings/rbac/scenarios/create-new-role.scenario.spec.ts | 59 | // Step 3: edit the permissions of the role |
| LOW | …ttings/rbac/scenarios/create-new-role.scenario.spec.ts | 67 | // Step 4: revert the roles' assignment for the user |
| LOW | …ttings/rbac/scenarios/create-new-role.scenario.spec.ts | 70 | // Step 5: delete the created role |
| LOW | examples/complex/scripts/bench.js | 390 | // Step 1: wipe DB (destructive; explicit per plan) |
| LOW | examples/complex/scripts/bench.js | 397 | // Step 2: run v4 seed via the v4 project's seed-with-db wrapper. |
| LOW | examples/complex/scripts/bench.js | 405 | // Step 3: snapshot |
| LOW | …ages/core/content-manager/admin/src/utils/relations.ts | 7 | * so we need to check if the mainFieldKey is defined and if the relation has a value |
| LOW | …re/content-manager/server/src/controllers/relations.ts | 218 | // We need to check if the entity exists |
| LOW | packages/core/strapi/src/node/core/plugins.ts | 162 | * This variable stores the import paths for plugins. |
| LOW | packages/core/strapi/src/node/core/plugins.ts | 209 | // This plugin is a module, so we need to check if it has a strapi-admin export |
| LOW | packages/core/email/shared/email-address-parser.ts | 224 | // Step 1: Decode any RFC 2047 encoded-words |
| LOW | packages/core/email/shared/email-address-parser.ts | 227 | // Step 2: Extract and remove comments, but save them |
| LOW | packages/core/email/shared/email-address-parser.ts | 231 | // Step 3: Try to parse "Name <email>" format |
| LOW | packages/core/email/shared/email-address-parser.ts | 258 | // Step 4: Try "email (comment)" format - use comment as name |
| LOW | packages/core/email/shared/email-address-parser.ts | 271 | // Step 5: If nothing matched, treat the whole thing as email |
| 4 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …manager/model/components/tests/AssigneeFilter.test.tsx | 24 | await screen.findByRole('option', { name: 'John Doe' }); |
| LOW | …manager/model/components/tests/AssigneeFilter.test.tsx | 34 | await screen.findByRole('option', { name: 'John Doe' }); |
| LOW | …manager/model/components/tests/AssigneeFilter.test.tsx | 36 | await user.click(screen.getByRole('option', { name: 'John Doe' })); |
| LOW | …manager/model/components/tests/AssigneeFilter.test.tsx | 38 | expect(screen.getByRole('combobox')).toHaveValue('John Doe'); |
| LOW | …ager/model/id/components/tests/AssigneeSelect.test.tsx | 51 | await waitFor(() => expect(screen.queryByText('John Doe')).not.toBeInTheDocument()); |
| LOW | …ager/model/id/components/tests/AssigneeSelect.test.tsx | 56 | await screen.findByText('John Doe'); |
| LOW | …ager/model/id/components/tests/AssigneeSelect.test.tsx | 232 | await waitFor(() => expect(screen.getByRole('combobox')).toHaveValue('John Doe')); |
| LOW | …ager/model/id/components/tests/AssigneeSelect.test.tsx | 325 | await user.click(screen.getByText('John Doe')); |
| LOW | …s/core/types/src/modules/entity-service/params/data.ts | 48 | * author: 'John Doe', // Optional author property |
| LOW | …ckages/core/types/src/modules/documents/params/data.ts | 49 | * author: 'John Doe', // Optional author property |
| LOW | …ages/AuditLogs/utils/tests/getDisplayedFilters.test.ts | 8 | email: 'test@test.com', |
| LOW | packages/core/admin/admin/src/utils/tests/users.test.ts | 15 | expect(getDisplayName({ firstname: 'John', lastname: 'Doe' })).toBe('John Doe'); |
| LOW | packages/core/admin/admin/src/utils/tests/users.test.ts | 23 | expect(getDisplayName({ email: 'user@example.com' })).toBe('user@example.com'); |
| LOW | packages/core/admin/admin/src/utils/tests/users.test.ts | 45 | expect(getInitials({ email: 'user@example.com' })).toBe('U'); |
| LOW | …in/admin/src/components/MainNav/tests/NavUser.test.tsx | 7 | getDisplayName: jest.fn(() => 'John Doe'), |
| LOW | …in/admin/src/components/MainNav/tests/NavUser.test.tsx | 27 | const userName = screen.getByText('John Doe'); |
| LOW | packages/core/admin/admin/src/translations/no.json | 35 | "Auth.form.username.placeholder": "John Doe", |
| LOW | packages/core/admin/admin/src/translations/da.json | 45 | "Auth.form.username.placeholder": "John Doe", |
| LOW | …re/content-manager/admin/src/utils/tests/users.test.ts | 22 | ).toEqual('John Doe'); |
| LOW | …re/content-manager/admin/src/history/tests/mockData.ts | 15 | 'Certainly! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac libero ac urna dictum eleifend. Nu |
| LOW | …re/content-manager/admin/src/history/tests/mockData.ts | 15 | 'Certainly! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac libero ac urna dictum eleifend. Nu |
| LOW | …re/content-manager/admin/src/history/tests/mockData.ts | 17 | '\nCertainly! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac libero ac urna dictum eleifend. |
| LOW | …re/content-manager/admin/src/history/tests/mockData.ts | 17 | '\nCertainly! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac libero ac urna dictum eleifend. |
| LOW | …re/content-manager/admin/src/history/tests/mockData.ts | 449 | 'Certainly! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac libero ac urna dictum eleifend. Nu |
| LOW | …re/content-manager/admin/src/history/tests/mockData.ts | 449 | 'Certainly! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac libero ac urna dictum eleifend. Nu |
| LOW | …re/content-manager/admin/src/history/tests/mockData.ts | 451 | '\nCertainly! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac libero ac urna dictum eleifend. |
| LOW | …re/content-manager/admin/src/history/tests/mockData.ts | 451 | '\nCertainly! Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac libero ac urna dictum eleifend. |
| LOW | …ger/admin/src/pages/EditView/utils/tests/forms.test.ts | 54 | default: 'test@test.com', |
| LOW | …ger/admin/src/pages/EditView/utils/tests/forms.test.ts | 63 | email: 'test@test.com', |
| LOW | …e/email/documentation/1.0.0/overrides/email-Email.json | 39 | "example": "Lorem ipsum title" |
| LOW | …e/email/documentation/1.0.0/overrides/email-Email.json | 43 | "example": "Lorem ipsum" |
| LOW | …e/email/documentation/1.0.0/overrides/email-Email.json | 48 | "example": "<h1>Lorem ipsum</h1>" |
| LOW | packages/core/email/shared/email-address-parser.ts | 156 | * - "\"John Doe\"" -> "John Doe" |
| LOW | …ugins/users-permissions/admin/src/translations/da.json | 38 | "PopUpForm.Email.options.from.name.placeholder": "John Doe", |
| LOW | …server/src/services/__tests__/ai-localizations.test.ts | 120 | author: { id: 5, name: 'John Doe' }, |
| LOW | …server/src/services/__tests__/ai-localizations.test.ts | 126 | expect(result.author).toEqual({ id: 5, name: 'John Doe' }); |
| LOW | …server/src/services/__tests__/ai-localizations.test.ts | 420 | author: { id: 5, name: 'John Doe', email: 'john@example.com' }, |
| LOW | …server/src/services/__tests__/ai-localizations.test.ts | 432 | expect(result.author).toEqual({ id: 5, name: 'John Doe', email: 'john@example.com' }); |
| LOW | …azon-ses/src/__tests__/backwards-compat.vitest.test.ts | 81 | to: 'user@example.com', |
| LOW | …azon-ses/src/__tests__/backwards-compat.vitest.test.ts | 124 | to: 'user@example.com', |
| LOW | …azon-ses/src/__tests__/backwards-compat.vitest.test.ts | 139 | to: 'user@example.com', |
| LOW | …azon-ses/src/__tests__/backwards-compat.vitest.test.ts | 156 | to: 'user@example.com', |
| LOW | …azon-ses/src/__tests__/backwards-compat.vitest.test.ts | 171 | to: 'user@example.com', |
| LOW | …azon-ses/src/__tests__/backwards-compat.vitest.test.ts | 187 | to: 'user@example.com', |
| LOW | …azon-ses/src/__tests__/backwards-compat.vitest.test.ts | 209 | to: 'user@example.com', |
| LOW | …azon-ses/src/__tests__/backwards-compat.vitest.test.ts | 224 | to: 'user@example.com', |
| LOW | packages/providers/email-nodemailer/README.md | 754 | // { name: 'John Doe', email: 'john@example.com', original: '...' } |
| LOW | packages/providers/email-nodemailer/README.md | 775 | formatEmailAddress('John Doe', 'john@example.com'); |
| LOW | packages/providers/email-nodemailer/README.md | 823 | isValidEmail('user@example.com'); // true |
| LOW | packages/providers/email-nodemailer/README.md | 833 | // { name: null, email: 'user@example.com', original: 'User@Example.COM' } |
| LOW | …/providers/email-nodemailer/src/utils/email-address.ts | 372 | * isValidEmail('user@example.com') |
| LOW | …s/email-nodemailer/src/__tests__/email-address.test.ts | 25 | expect(result.name).toBe('John Doe'); |
| LOW | …s/email-nodemailer/src/__tests__/email-address.test.ts | 87 | expect(result.email).toBe('admin@example.com'); |
| LOW | …s/email-nodemailer/src/__tests__/email-address.test.ts | 154 | expect(result.email).toBe('user@example.com'); |
| LOW | …s/email-nodemailer/src/__tests__/email-address.test.ts | 160 | expect(result.name).toBe('John Doe'); |
| LOW | …s/email-nodemailer/src/__tests__/email-address.test.ts | 172 | expect(result.email).toBe('user@example.com'); |
| LOW | …s/email-nodemailer/src/__tests__/email-address.test.ts | 186 | expect(normalizeEmail('User@Example.COM')).toBe('user@example.com'); |
| LOW | …s/email-nodemailer/src/__tests__/email-address.test.ts | 190 | expect(normalizeEmail('user@example.com')).toBe('user@example.com'); |
| LOW | …s/email-nodemailer/src/__tests__/email-address.test.ts | 236 | const result = formatEmailAddress('John Doe', 'john@example.com'); |
| LOW | …s/email-nodemailer/src/__tests__/email-address.test.ts | 265 | const result = formatEmailAddress('John Doe', 'John.Doe@Example.COM'); |
| 18 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | tests/e2e/tests/admin/admin-tokens.spec.ts | 101 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/e2e/tests/admin/admin-tokens.spec.ts | 103 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/e2e/tests/admin/admin-tokens.spec.ts | 151 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/e2e/tests/admin/admin-tokens.spec.ts | 153 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/e2e/tests/admin/admin-tokens.spec.ts | 215 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | tests/e2e/tests/admin/admin-tokens.spec.ts | 217 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench.js | 37 | // ─── arg parsing ────────────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench.js | 69 | // ─── environment capture ────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench.js | 176 | // ─── snapshot helpers ───────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench.js | 194 | // ─── row count collection ───────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench.js | 222 | // ─── migrate-then-exit runner ───────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench.js | 278 | // ─── subcommand: run ────────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench.js | 366 | // ─── subcommand: seed ───────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench.js | 416 | // ─── subcommand: suite ──────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench.js | 449 | // ─── main ───────────────────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench-compare.js | 29 | // ─── argument parsing ──────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench-compare.js | 71 | // ─── result loading ────────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench-compare.js | 150 | // ─── formatting helpers ────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench-compare.js | 192 | // ─── per-cell detail ───────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench-compare.js | 205 | // ─── representative pick (for setup block) ─────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench-compare.js | 237 | // ─── markdown rendering ────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench-compare.js | 343 | // ─── HTML rendering ────────────────────────────────────────────────────────── |
| MEDIUM | examples/complex/scripts/bench-compare.js | 655 | // ─── emit ──────────────────────────────────────────────────────────────────── |
| MEDIUM | …rc/mcp/__tests__/derive-content-type-mcp-tools.test.ts | 939 | // ── relation fixtures ───────────────────────────────────────────────────── |
| MEDIUM | …rc/mcp/__tests__/derive-content-type-mcp-tools.test.ts | 949 | // ── xOne relation tests ─────────────────────────────────────────────────── |
| MEDIUM | …rc/mcp/__tests__/derive-content-type-mcp-tools.test.ts | 1013 | // ── xMany relation tests ────────────────────────────────────────────────── |
| MEDIUM | …rc/mcp/__tests__/derive-content-type-mcp-tools.test.ts | 1136 | // ── JSON Schema regression tests ────────────────────────────────────────── |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | tests/utils/cli-transfer-remote-e2e/seed-media.js | 13 | function createDeterministicTransferTestFile(fileIndex, byteLength) { |
| LOW | …pi/api/populate/query-array-limit-populate.test.api.js | 40 | function buildIndexedPopulateQuery(count) { |
| LOW | …core/upload/content-api/upload-concurrency.test.api.js | 24 | function attachUploadConcurrencyInstrumentation() { |
| LOW | …core/upload/content-api/upload-concurrency.test.api.js | 76 | function postPlainTextMultipartUpload(strapiInstance, fixtures) { |
| LOW | …core/upload/content-api/upload-concurrency.test.api.js | 95 | function createDistinctTextFixtures(count) { |
| LOW | …rc/api/config/utils/resync-super-admin-after-import.js | 14 | module.exports = async function resyncSuperAdminAfterImport(strapi) { |
| LOW | examples/complex/scripts/validate-migration.js | 256 | async function validateDocumentStructure(strapi, expected) { |
| LOW | examples/complex/scripts/validate-migration.js | 341 | async function validateRelationsPresence(strapi) { |
| LOW | examples/complex/scripts/validate-migration.js | 371 | function buildPopulateFromAttributes(attributes) { |
| LOW | examples/complex/scripts/validate-migration.js | 521 | function areRelationSummariesEqual(a, b) { |
| LOW | examples/complex/scripts/validate-migration.js | 599 | async function validateNestedComponentRelationParity(strapi) { |
| LOW | examples/complex/scripts/validate-migration.js | 653 | async function verifyMigrationFixAtDbLevel(strapi) { |
| LOW | examples/complex/scripts/validate-migration.js | 936 | async function validateRelationParityForDp(strapi, uid) { |
| LOW | scripts/release.js | 145 | function rewriteInternalPeerDependencies(version, dryRun) { |
| LOW | packages/core/review-workflows/server/src/register.ts | 45 | function extendReviewWorkflowContentTypes({ strapi }: { strapi: Core.Strapi }) { |
| LOW | …e/review-workflows/server/src/controllers/workflows.ts | 18 | function getWorkflowsPermissionChecker({ strapi }: { strapi: Core.Strapi }, userAbility: unknown) { |
| LOW | …es/core/review-workflows/server/src/services/stages.ts | 438 | function assertAtLeastOneStageRemain(workflowStages: any, diffStages: any) { |
| LOW | …rc/services/document-service/transform/id-transform.ts | 12 | async function transformParamsDocumentId( |
| LOW | packages/core/utils/src/content-api-route-params.ts | 18 | export function getExtraQueryKeysFromRoute(route?: RouteLike): string[] { |
| LOW | packages/core/utils/src/content-api-route-params.ts | 25 | export function getExtraRootKeysFromRouteBody(route?: RouteLike): string[] { |
| LOW | …/content-manager/admin/src/preview/utils/fieldUtils.ts | 50 | export function getAttributeSchemaFromPath({ |
| LOW | …ew/components/FormInputs/Wysiwyg/utils/continueList.ts | 19 | function newlineAndIndentContinueMarkdownList(cm: CodeMirror.Editor) { |
| LOW | …ew/components/FormInputs/Wysiwyg/utils/continueList.ts | 68 | function incrementRemainingMarkdownListNumbers(cm: CodeMirror.Editor, pos: CodeMirror.Position) { |
| LOW | …/content-manager/server/src/mcp/schemas/data-schema.ts | 29 | export function buildComponentInputSchema( |
| LOW | …nager/server/src/services/utils/configuration/index.ts | 18 | async function createDefaultConfiguration(schema: any) { |
| LOW | …/strapi/src/cli/commands/export/validate-dir-format.ts | 16 | export function prepareExportDirFormatCli(command: Command) { |
| LOW | …/strapi/src/cli/commands/export/validate-dir-format.ts | 43 | export function normalizeExportDirFormatOpts(opts: { |
| LOW | …e/upload/admin/src/utils/findRecursiveFolderByValue.ts | 11 | export function findRecursiveFolderByValue( |
| LOW | …server/src/controllers/validation/admin/folder-file.ts | 63 | async function validateMoveFoldersNotInsideThemselves(value) { |
| LOW | …server/src/controllers/validation/admin/folder-file.ts | 97 | export async function validateMoveManyFoldersFiles(body: unknown) { |
| LOW | …s/core/data-transfer/src/utils/transfer-asset-chunk.ts | 5 | export function createTransferAssetStreamChunk( |
| LOW | …s/core/data-transfer/src/utils/transfer-asset-chunk.ts | 27 | export function decodeTransferAssetStreamItem(item: { |
| LOW | …s/core/data-transfer/src/utils/transfer-asset-chunk.ts | 64 | export function decodeTransferAssetStreamData(data: unknown, encoding?: 'base64'): Buffer { |
| LOW | …s/core/data-transfer/src/utils/transfer-asset-chunk.ts | 89 | export function transferAssetStreamChunkByteLength(chunk: { |
| LOW | …ore/data-transfer/src/utils/transfer-websocket-json.ts | 57 | export function stringifyTransferWebSocketPayload(payload: Record<string, unknown>): string { |
| LOW | …/core/data-transfer/src/utils/__tests__/stream.test.ts | 14 | source.pause = function trackPauseForBackpressureTest() { |
| LOW | …/core/data-transfer/src/utils/__tests__/stream.test.ts | 78 | source.pause = function trackPauseForBackpressureTest() { |
| LOW | packages/core/data-transfer/src/__tests__/test-utils.ts | 43 | stream.pause = function pauseWithBackpressureTracking(this: Readable) { |
| LOW | packages/core/data-transfer/src/__tests__/test-utils.ts | 74 | source.pause = function pauseWithBackpressureTracking(this: Readable) { |
| LOW | …core/data-transfer/src/engine/__tests__/engine.test.ts | 28 | function expectHeapGrowthWithinNoise(heapGrowth: number, totalBytes: number) { |
| LOW | …core/data-transfer/src/engine/__tests__/engine.test.ts | 1610 | stream.pause = function trackConfigurationStreamPause() { |
| LOW | …iders/local-destination/assets-destination-writable.ts | 22 | export function createAssetsDestinationWritable( |
| LOW | …a-transfer/src/strapi/providers/local-source/assets.ts | 74 | export async function signUploadFileForTransfer(strapi: Core.Strapi, file: IFile) { |
| LOW | …min/src/components/AIChat/providers/SchemaProvider.tsx | 25 | function extractSchemaChangesFromMessage(message: AIMessage): SchemaChange[] { |
| LOW | packages/providers/email-nodemailer/src/index.ts | 136 | function getCapabilitiesFromOptions(opts: ProviderOptions): ProviderCapabilities { |
| LOW | …li/create-strapi-app/templates/example/scripts/seed.js | 112 | async function checkFileExistsBeforeUpload(files) { |
| LOW | …create-strapi-app/templates/example-js/scripts/seed.js | 112 | async function checkFileExistsBeforeUpload(files) { |
| LOW | packages/cli/create-strapi-app/src/utils/usage.ts | 9 | function addPackageJsonStrapiMetadata(metadata: Record<string, unknown>, scope: Scope) { |
| LOW | packages/cli/cloud/src/deploy-project/action.ts | 255 | function hasPendingOrLiveDeployment( |
| LOW | packages/cli/cloud/src/services/notification.ts | 25 | export function notificationServiceFactory({ logger }: CLIContext) { |
| LOW | …/src/create-project/utils/get-project-name-from-pkg.ts | 4 | export async function getProjectNameFromPackageJson(ctx: CLIContext): Promise<string> { |
| LOW | …ud/src/create-project/utils/project-questions.utils.ts | 8 | export function questionDefaultValuesMapper( |
| LOW | …ud/src/create-project/utils/project-questions.utils.ts | 63 | export function getProjectNodeVersionDefault(question: DistinctQuestion<ProjectAnswers>): string { |
| LOW | …es/admin-test-utils/src/patches/response-json-realm.ts | 41 | return function teardownResponseJsonRealm() { |
| LOW | .github/actions/community-pr-triage/src/lib/linear.ts | 139 | export async function fetchAllTicketsByPRNumber( |
| LOW | templates/website/src/bootstrap.ts | 221 | async function importLeadFormSubmissionData() { |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …sts/api/core/admin/admin-strategy-sessions.test.api.ts | 141 | it.todo( |
| LOW | …sts/api/core/admin/admin-strategy-sessions.test.api.ts | 161 | // .setToken(accessToken) |
| LOW | tests/api/core/admin/admin-logout-sessions.test.api.ts | 141 | // expect(loginB.statusCode).toBe(200); |
| LOW | tests/app-template/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | examples/experimental-dev/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | examples/empty/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | examples/kitchensink-ts/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | examples/kitchensink-ts/src/admin/app.example.tsx | 1 | import type { StrapiApp } from '@strapi/strapi/admin'; |
| LOW | examples/kitchensink-ts/src/admin/app.example.tsx | 21 | // 'pt-BR', |
| LOW | examples/getstarted/config/src/cron-tasks.js | 21 | // 'myJob': { |
| LOW | examples/getstarted/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | examples/kitchensink/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | scripts/front/utils/search-files-content.js | 101 | |
| LOW | …ntent-manager/admin/src/preview/utils/previewScript.ts | 1061 | const matchedElements = Array.from(getElementsByPath(field)).filter( |
| LOW | …/plugins/graphql/server/src/services/builders/utils.ts | 41 | // builders/resolvers/association.ts + rootQueryArgsByPath). Omitting them broke |
| LOW | packages/utils/upgrade/src/modules/version/range.ts | 21 | // patch, or build version to be taken in the range. |
| LOW | …eate-strapi-app/templates/vanilla-js/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | …rapi-app/templates/vanilla-js/src/admin/app.example.js | 1 | const config = { |
| LOW | …/create-strapi-app/templates/example/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | …strapi-app/templates/example/src/admin/app.example.tsx | 1 | import type { StrapiApp } from '@strapi/strapi/admin'; |
| LOW | …strapi-app/templates/example/src/admin/app.example.tsx | 21 | // 'pt-BR', |
| LOW | …eate-strapi-app/templates/example-js/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | …rapi-app/templates/example-js/src/admin/app.example.js | 1 | const config = { |
| LOW | …/create-strapi-app/templates/vanilla/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | …strapi-app/templates/vanilla/src/admin/app.example.tsx | 1 | import type { StrapiApp } from '@strapi/strapi/admin'; |
| LOW | …strapi-app/templates/vanilla/src/admin/app.example.tsx | 21 | // 'pt-BR', |
| LOW | .github/actions/yarn-nm-install/action.yml | 1 | ######################################################################################## |
| LOW | templates/website/public/robots.txt | 1 | # To prevent search engines from seeing the site altogether, uncomment the next two lines: |
| LOW | templates/website/src/admin/app.example.tsx | 1 | import type { StrapiApp } from '@strapi/strapi/admin'; |
| LOW | templates/website/src/admin/app.example.tsx | 21 | // 'pt-BR', |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | …/core/upload/admin/src/ai/components/AIUploadModal.tsx | 188 | '{count, plural, one {# asset uploaded} other {# assets uploaded}}, review AI generated metadata', |
| HIGH | packages/core/upload/admin/src/translations/en.json | 224 | "ai.modal.title": "{count, plural, one {# asset uploaded} other {# assets uploaded}}, review AI generated metadata", |
| HIGH | .github/workflows/needs-qa-checklist.yml | 49 | ## AI-generated QA checklist |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | scripts/remove-dist-tag.sh | 18 | # Check if dist tag is latest, beta, alpha or next and reject |
| LOW | .github/actions/pr_diff/script.sh | 200 | # Check if the pull request is merged |
| LOW | .github/actions/pr_diff/script.sh | 236 | # Check if there are merged PRs |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | .github/workflows/pr-reviewer.yml | 74 | # Tools for comprehensive PR review |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …omponents/GuidedTour/Steps/ContentTypeBuilderSteps.tsx | 204 | defaultMessage="Don't forget to add a field to your content type" |
| LOW | packages/core/admin/admin/src/translations/en.json | 417 | "app.components.GuidedTour.CM.create.content": "<p>Create and manage all the content here in the Content Manager.</p>< |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | scripts/front/utils/search-files-content.js | 100 | // Usage example |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | packages/core/core/src/services/server/http-server.ts | 15 | const listener: http.RequestListener = function handleRequest(req, res) { |