diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 32ae615dd1..fd4f446c72 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -220,7 +220,7 @@ Before submitting an issue you need to make sure: - You are experiencing a technical issue with Strapi. - You have already searched for related [issues](https://github.com/strapi/strapi/issues) and found none open (if you found a related _closed_ issue, please link to it from your post). -- You are not asking a question about how to use Strapi or about whether or not Strapi has a certain feature. For general help using Strapi, you may: +- You are not asking a question about how to use Strapi or about whether Strapi has a certain feature. For general help using Strapi, you may: - Refer to the [official Strapi documentation](https://docs.strapi.io). - Ask a member of the community in the [Strapi Discord Community](https://discord.strapi.io/). - Ask a question on the [Strapi community forum](https://forum.strapi.io). diff --git a/api-tests/core/strapi/document-service/dp/basic-no-dp.test.api.ts b/api-tests/core/strapi/document-service/dp/basic-no-dp.test.api.ts index 4a8e7cbe0c..2ba571806c 100644 --- a/api-tests/core/strapi/document-service/dp/basic-no-dp.test.api.ts +++ b/api-tests/core/strapi/document-service/dp/basic-no-dp.test.api.ts @@ -1,4 +1,4 @@ -import { LoadedStrapi, Common } from '@strapi/types'; +import type { Core, UID } from '@strapi/types'; import { testInTransaction as wrapInTransaction } from '../../../../utils'; // Wrap "it" with a transaction @@ -22,13 +22,13 @@ const { createTestBuilder } = require('api-tests/builder'); const { createStrapiInstance } = require('api-tests/strapi'); const { createAuthRequest } = require('api-tests/request'); -let strapi: LoadedStrapi; +let strapi: Core.LoadedStrapi; let shopDocuments; let shopsDB; let rq; const builder = createTestBuilder(); -const SHOP_UID = 'api::shop.shop' as Common.UID.ContentType; +const SHOP_UID = 'api::shop.shop' as UID.ContentType; const shopModel = { attributes: { diff --git a/api-tests/core/strapi/document-service/relations/no-dp.test.api.ts b/api-tests/core/strapi/document-service/relations/no-dp.test.api.ts index 16c159c25c..0be35621fb 100644 --- a/api-tests/core/strapi/document-service/relations/no-dp.test.api.ts +++ b/api-tests/core/strapi/document-service/relations/no-dp.test.api.ts @@ -1,23 +1,24 @@ /** * Relations interactions with non DP content types. */ -import { LoadedStrapi, Common } from '@strapi/types'; +import type { Core, UID } from '@strapi/types'; + import { testInTransaction } from '../../../../utils'; const { createTestBuilder } = require('api-tests/builder'); const { createStrapiInstance } = require('api-tests/strapi'); const { createAuthRequest } = require('api-tests/request'); -let strapi: LoadedStrapi; +let strapi: Core.LoadedStrapi; const builder = createTestBuilder(); let productDocuments; let tagDocuments; let shopDocuments; let rq; -const PRODUCT_UID = 'api::product.product' as Common.UID.ContentType; -const TAG_UID = 'api::tag.tag' as Common.UID.ContentType; -const SHOP_UID = 'api::shop.shop' as Common.UID.ContentType; +const PRODUCT_UID = 'api::product.product' as UID.ContentType; +const TAG_UID = 'api::tag.tag' as UID.ContentType; +const SHOP_UID = 'api::shop.shop' as UID.ContentType; const productModel = { attributes: { diff --git a/examples/kitchensink-ts/src/admin/app.example.tsx b/examples/kitchensink-ts/src/admin/app.example.tsx index 7316221f10..3ea4d919fb 100644 --- a/examples/kitchensink-ts/src/admin/app.example.tsx +++ b/examples/kitchensink-ts/src/admin/app.example.tsx @@ -1,3 +1,5 @@ +import type { StrapiApp } from '@strapi/strapi/admin'; + export default { config: { locales: [ @@ -29,7 +31,7 @@ export default { // 'zh', ], }, - bootstrap(app) { + bootstrap(app: StrapiApp) { console.log(app); }, }; diff --git a/packages/core/admin/admin/src/index.ts b/packages/core/admin/admin/src/index.ts index d2ea5de8f7..b104765795 100644 --- a/packages/core/admin/admin/src/index.ts +++ b/packages/core/admin/admin/src/index.ts @@ -46,6 +46,7 @@ export { useRBAC } from './hooks/useRBAC'; /** * Types */ +export type { StrapiApp } from './StrapiApp'; export type { Store } from './core/store/configure'; export type { SanitizedAdminUser } from '../../shared/contracts/shared'; export type { diff --git a/packages/core/admin/ee/server/src/services/metrics.ts b/packages/core/admin/ee/server/src/services/metrics.ts index 28cc379ca5..539b523c83 100644 --- a/packages/core/admin/ee/server/src/services/metrics.ts +++ b/packages/core/admin/ee/server/src/services/metrics.ts @@ -1,5 +1,5 @@ import { assign } from 'lodash/fp'; -import type { Strapi } from '@strapi/types'; +import type { Core } from '@strapi/types'; import { getService } from '../utils'; const getSSOProvidersList = async () => { @@ -8,7 +8,7 @@ const getSSOProvidersList = async () => { return providerRegistry.getAll().map(({ uid }: { uid: string }) => uid); }; -const sendUpdateProjectInformation = async (strapi: Strapi) => { +const sendUpdateProjectInformation = async (strapi: Core.Strapi) => { let groupProperties = {}; const numberOfActiveAdminUsers = await getService('user').count({ isActive: true }); @@ -47,7 +47,7 @@ const sendUpdateProjectInformation = async (strapi: Strapi) => { }); }; -const startCron = (strapi: Strapi) => { +const startCron = (strapi: Core.Strapi) => { strapi.cron.add({ '0 0 0 * * *': () => sendUpdateProjectInformation(strapi), }); diff --git a/packages/core/admin/ee/server/src/services/review-workflows/review-workflows.ts b/packages/core/admin/ee/server/src/services/review-workflows/review-workflows.ts index bc9a043c69..8f58e5bc02 100644 --- a/packages/core/admin/ee/server/src/services/review-workflows/review-workflows.ts +++ b/packages/core/admin/ee/server/src/services/review-workflows/review-workflows.ts @@ -1,5 +1,4 @@ -import { LoadedStrapi as Strapi } from '@strapi/types'; -import { filter, set, forEach, pipe, map, stubTrue, cond, defaultsDeep } from 'lodash/fp'; +import { filter, forEach, pipe, map, stubTrue, cond, defaultsDeep } from 'lodash/fp'; import { getService } from '../../utils'; import { getVisibleContentTypesUID, hasStageAttribute } from '../../utils/review-workflows'; import defaultStages from '../../constants/default-stages.json'; @@ -15,6 +14,8 @@ import { import { persistTables, removePersistedTablesWithSuffix } from '../../utils/persisted-tables'; import webhookEvents from '../../constants/webhookEvents'; +import type { Core } from '@strapi/types'; + const MAX_DB_TABLE_NAME_LEN = 63; // Postgres limit // The longest index name that Strapi can create is prefixed with '_strapi_stage_links_inv_fk', so the content type name should be no longer than this. const MAX_JOIN_TABLE_NAME_SUFFIX = @@ -68,7 +69,7 @@ const setReviewWorkflowAttributes = (contentType: any) => { setAssigneeAttribute(contentType); }; -function extendReviewWorkflowContentTypes({ strapi }: { strapi: Strapi }) { +function extendReviewWorkflowContentTypes({ strapi }: { strapi: Core.LoadedStrapi }) { const extendContentType = (contentTypeUID: any) => { const assertContentTypeCompatibility = (contentType: any) => contentType.collectionName.length <= MAX_CONTENT_TYPE_NAME_LEN; @@ -95,7 +96,7 @@ function extendReviewWorkflowContentTypes({ strapi }: { strapi: Strapi }) { ])(strapi.contentTypes); } -function persistStagesJoinTables({ strapi }: { strapi: Strapi }) { +function persistStagesJoinTables({ strapi }: { strapi: Core.LoadedStrapi }) { return async ({ contentTypes }: any) => { const getStageTableToPersist = (contentTypeUID: any) => { // Persist the stage join table @@ -116,12 +117,12 @@ function persistStagesJoinTables({ strapi }: { strapi: Strapi }) { }; } -const registerWebhookEvents = async ({ strapi }: { strapi: Strapi }) => +const registerWebhookEvents = async ({ strapi }: { strapi: Core.LoadedStrapi }) => Object.entries(webhookEvents).forEach(([eventKey, event]) => strapi.webhookStore.addAllowedEvent(eventKey, event) ); -export default ({ strapi }: { strapi: Strapi }) => { +export default ({ strapi }: { strapi: Core.LoadedStrapi }) => { const workflowsService = getService('workflows', { strapi }); const stagesService = getService('stages', { strapi }); const workflowsValidationService = getService('review-workflows-validation', { strapi }); diff --git a/packages/core/content-releases/server/custom.d.ts b/packages/core/content-releases/server/custom.d.ts index 99a94c2962..8a39d0dda2 100644 --- a/packages/core/content-releases/server/custom.d.ts +++ b/packages/core/content-releases/server/custom.d.ts @@ -1,5 +1,5 @@ -import type { Strapi } from '@strapi/types'; +import type { Core } from '@strapi/types'; declare global { - const strapi: Strapi; + const strapi: Core.Strapi; } diff --git a/packages/core/strapi/src/cli/commands/plugin/init/files/server.ts b/packages/core/strapi/src/cli/commands/plugin/init/files/server.ts index ec4efdd0dd..128ef8e245 100644 --- a/packages/core/strapi/src/cli/commands/plugin/init/files/server.ts +++ b/packages/core/strapi/src/cli/commands/plugin/init/files/server.ts @@ -22,12 +22,12 @@ const TYPESCRIPT = (pluginName: string): TemplateFile[] => [ import policies from './policies'; import routes from './routes'; import services from './services'; - + export default { bootstrap, destroy, register, - + config, controllers, contentTypes, @@ -41,9 +41,9 @@ const TYPESCRIPT = (pluginName: string): TemplateFile[] => [ { name: 'server/src/bootstrap.ts', contents: outdent` - import type { Strapi } from '@strapi/strapi'; + import type { Core } from '@strapi/strapi'; - const bootstrap = ({ strapi }: { strapi: Strapi }) => { + const bootstrap = ({ strapi }: { strapi: Core.Strapi }) => { // bootstrap phase }; @@ -53,9 +53,9 @@ const TYPESCRIPT = (pluginName: string): TemplateFile[] => [ { name: 'server/src/destroy.ts', contents: outdent` - import type { Strapi } from '@strapi/strapi'; + import type { Core } from '@strapi/strapi'; - const destroy = ({ strapi }: { strapi: Strapi }) => { + const destroy = ({ strapi }: { strapi: Core.Strapi }) => { // destroy phase }; @@ -65,9 +65,9 @@ const TYPESCRIPT = (pluginName: string): TemplateFile[] => [ { name: 'server/src/register.ts', contents: outdent` - import type { Strapi } from '@strapi/strapi'; + import type { Core } from '@strapi/strapi'; - const register = ({ strapi }: { strapi: Strapi }) => { + const register = ({ strapi }: { strapi: Core.Strapi }) => { // register phase }; @@ -102,9 +102,9 @@ const TYPESCRIPT = (pluginName: string): TemplateFile[] => [ { name: 'server/src/controllers/controller.ts', contents: outdent` - import type { Strapi } from '@strapi/strapi'; + import type { Core } from '@strapi/strapi'; - const controller = ({ strapi }: { strapi: Strapi }) => ({ + const controller = ({ strapi }: { strapi: Core.Strapi }) => ({ index(ctx) { ctx.body = strapi .plugin('${pluginName}') @@ -158,9 +158,9 @@ const TYPESCRIPT = (pluginName: string): TemplateFile[] => [ { name: 'server/src/services/service.ts', contents: outdent` - import type { Strapi } from '@strapi/strapi'; + import type { Core } from '@strapi/strapi'; - const service = ({ strapi }: { strapi: Strapi }) => ({ + const service = ({ strapi }: { strapi: Core.Strapi }) => ({ getWelcomeMessage() { return 'Welcome to Strapi 🚀'; }, @@ -199,7 +199,7 @@ const JAVASCRIPT = (pluginName: string): TemplateFile[] => [ bootstrap, destroy, register, - + config, controllers, contentTypes, @@ -230,7 +230,7 @@ const JAVASCRIPT = (pluginName: string): TemplateFile[] => [ const destroy = ({ strapi }) => { // destroy phase }; - + module.exports = destroy; `, }, @@ -242,7 +242,7 @@ const JAVASCRIPT = (pluginName: string): TemplateFile[] => [ const register = ({ strapi }) => { // register phase }; - + module.exports = register; `, }, diff --git a/packages/generators/app/src/create-project.ts b/packages/generators/app/src/create-project.ts index a62290c09a..24fb270911 100644 --- a/packages/generators/app/src/create-project.ts +++ b/packages/generators/app/src/create-project.ts @@ -15,7 +15,7 @@ import packageJSON from './resources/json/common/package.json'; import jsconfig from './resources/json/js/jsconfig.json'; import adminTsconfig from './resources/json/ts/tsconfig-admin.json'; import serverTsconfig from './resources/json/ts/tsconfig-server.json'; -import { createDatabaseConfig, generateDbEnvariables } from './resources/templates/database'; +import { createDatabaseConfig, generateDbEnvVariables } from './resources/templates/database'; import createEnvFile from './resources/templates/env'; import { Configuration, Scope, isStderrError } from './types'; @@ -110,7 +110,7 @@ export default async function createProject( await fse.ensureDir(join(rootPath, 'node_modules')); // create config/database - await fse.appendFile(join(rootPath, '.env'), generateDbEnvariables({ client, connection })); + await fse.appendFile(join(rootPath, '.env'), generateDbEnvVariables({ client, connection })); await fse.writeFile( join(rootPath, `config/database.${language}`), createDatabaseConfig({ useTypescript }) diff --git a/packages/generators/app/src/resources/files/ts/src/admin/app.example.tsx b/packages/generators/app/src/resources/files/ts/src/admin/app.example.tsx index 7316221f10..3ea4d919fb 100644 --- a/packages/generators/app/src/resources/files/ts/src/admin/app.example.tsx +++ b/packages/generators/app/src/resources/files/ts/src/admin/app.example.tsx @@ -1,3 +1,5 @@ +import type { StrapiApp } from '@strapi/strapi/admin'; + export default { config: { locales: [ @@ -29,7 +31,7 @@ export default { // 'zh', ], }, - bootstrap(app) { + bootstrap(app: StrapiApp) { console.log(app); }, }; diff --git a/packages/generators/app/src/resources/files/ts/src/index.ts b/packages/generators/app/src/resources/files/ts/src/index.ts index 9fca261c00..58be268232 100644 --- a/packages/generators/app/src/resources/files/ts/src/index.ts +++ b/packages/generators/app/src/resources/files/ts/src/index.ts @@ -1,3 +1,5 @@ +// import type { Core } from '@strapi/strapi'; + export default { /** * An asynchronous register function that runs before @@ -5,7 +7,7 @@ export default { * * This gives you an opportunity to extend code. */ - register(/*{ strapi }*/) {}, + register(/* { strapi }: { strapi: Core.Strapi } */) {}, /** * An asynchronous bootstrap function that runs before @@ -14,5 +16,5 @@ export default { * This gives you an opportunity to set up your data model, * run jobs, or perform some special logic. */ - bootstrap(/*{ strapi }*/) {}, + bootstrap(/* { strapi }: { strapi: Core.Strapi } */) {}, }; diff --git a/packages/generators/app/src/resources/templates/database.ts b/packages/generators/app/src/resources/templates/database.ts index 68034a4c3c..898d0fb561 100644 --- a/packages/generators/app/src/resources/templates/database.ts +++ b/packages/generators/app/src/resources/templates/database.ts @@ -13,7 +13,7 @@ export const createDatabaseConfig = ({ useTypescript }: { useTypescript: boolean return compile(); }; -export const generateDbEnvariables = ({ +export const generateDbEnvVariables = ({ connection, client, }: { diff --git a/packages/generators/generators/src/files/ts/plugin/server/bootstrap.ts b/packages/generators/generators/src/files/ts/plugin/server/bootstrap.ts index d4d6d93b4e..7ac71a0421 100644 --- a/packages/generators/generators/src/files/ts/plugin/server/bootstrap.ts +++ b/packages/generators/generators/src/files/ts/plugin/server/bootstrap.ts @@ -1,5 +1,5 @@ -import { Core } from '@strapi/strapi'; +// import type { Core } from '@strapi/strapi'; -export default ({ strapi }: { strapi: Core.Strapi }) => { +export default (/* { strapi }: { strapi: Core.Strapi } */) => { // bootstrap phase }; diff --git a/packages/generators/generators/src/files/ts/plugin/server/controllers/my-controller.ts.hbs b/packages/generators/generators/src/files/ts/plugin/server/controllers/my-controller.ts.hbs index 9c2b7c14c7..63015633e5 100644 --- a/packages/generators/generators/src/files/ts/plugin/server/controllers/my-controller.ts.hbs +++ b/packages/generators/generators/src/files/ts/plugin/server/controllers/my-controller.ts.hbs @@ -1,6 +1,6 @@ -import { Strapi } from '@strapi/strapi'; +import type { Core } from '@strapi/strapi'; -export default ({ strapi }: { strapi: Strapi }) => ({ +export default ({ strapi }: { strapi: Core.Strapi }) => ({ index(ctx) { ctx.body = strapi .plugin('{{ pluginName }}') diff --git a/packages/generators/generators/src/files/ts/plugin/server/destroy.ts b/packages/generators/generators/src/files/ts/plugin/server/destroy.ts index 48f2914727..cca68bd3ec 100644 --- a/packages/generators/generators/src/files/ts/plugin/server/destroy.ts +++ b/packages/generators/generators/src/files/ts/plugin/server/destroy.ts @@ -1,5 +1,5 @@ -import { Core } from '@strapi/strapi'; +// import type { Core } from '@strapi/strapi'; -export default ({ strapi }: { strapi: Core.Strapi }) => { +export default (/* { strapi }: { strapi: Core.Strapi } */) => { // destroy phase }; diff --git a/packages/generators/generators/src/files/ts/plugin/server/register.ts b/packages/generators/generators/src/files/ts/plugin/server/register.ts index 6785d67ef2..f452b6612a 100644 --- a/packages/generators/generators/src/files/ts/plugin/server/register.ts +++ b/packages/generators/generators/src/files/ts/plugin/server/register.ts @@ -1,5 +1,5 @@ -import { Core } from '@strapi/strapi'; +// import type { Core } from '@strapi/strapi'; -export default ({ strapi }: { strapi: Core.Strapi }) => { +export default (/* { strapi }: { strapi: Core.Strapi } */) => { // register phase }; diff --git a/packages/generators/generators/src/files/ts/plugin/server/services/my-service.ts b/packages/generators/generators/src/files/ts/plugin/server/services/my-service.ts index af306e62be..b724667783 100644 --- a/packages/generators/generators/src/files/ts/plugin/server/services/my-service.ts +++ b/packages/generators/generators/src/files/ts/plugin/server/services/my-service.ts @@ -1,6 +1,6 @@ -import { Strapi } from '@strapi/strapi'; +// import type { Core } from '@strapi/strapi'; -export default ({ strapi }: { strapi: Strapi }) => ({ +export default (/* { strapi }: { strapi: Core.Strapi } */) => ({ getWelcomeMessage() { return 'Welcome to Strapi 🚀'; }, diff --git a/packages/generators/generators/src/templates/ts/middleware.ts.hbs b/packages/generators/generators/src/templates/ts/middleware.ts.hbs index 9849be6809..6b5772a99e 100644 --- a/packages/generators/generators/src/templates/ts/middleware.ts.hbs +++ b/packages/generators/generators/src/templates/ts/middleware.ts.hbs @@ -2,9 +2,9 @@ * `{{ name }}` middleware */ -import { Strapi } from '@strapi/strapi'; +import type { Core } from '@strapi/strapi'; -export default (config, { strapi }: { strapi: Strapi }) => { +export default (config, { strapi }: { strapi: Core.Strapi }) => { // Add your own logic here. return async (ctx, next) => { strapi.log.info('In {{ name }} middleware.');