From fd63444630fe2dfd243d58ea0a557fa6c8a65e96 Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Wed, 8 May 2024 21:38:32 +0200 Subject: [PATCH] chore: migrate the playground to v5 beta --- playground/.env | 13 +- playground/.env.example | 5 + playground/.strapi/client/app.js | 14 + playground/.strapi/client/index.html | 63 ++ playground/README.md | 58 +- playground/config/admin.js | 9 +- playground/config/middlewares.js | 3 +- playground/config/server.js | 6 + playground/database/migrations/.gitkeep | 0 playground/favicon.ico | Bin 3688 -> 0 bytes playground/favicon.png | Bin 0 -> 497 bytes playground/jest.config.js | 7 - playground/jsconfig.json | 8 + playground/package.json | 24 +- playground/types/generated/components.d.ts | 5 + playground/types/generated/contentTypes.d.ts | 730 +++++++++++++++++++ 16 files changed, 912 insertions(+), 33 deletions(-) create mode 100644 playground/.strapi/client/app.js create mode 100644 playground/.strapi/client/index.html create mode 100644 playground/database/migrations/.gitkeep delete mode 100644 playground/favicon.ico create mode 100644 playground/favicon.png delete mode 100644 playground/jest.config.js create mode 100644 playground/jsconfig.json create mode 100644 playground/types/generated/components.d.ts create mode 100644 playground/types/generated/contentTypes.d.ts diff --git a/playground/.env b/playground/.env index 57cb1e7..3dff915 100644 --- a/playground/.env +++ b/playground/.env @@ -1,7 +1,10 @@ HOST=0.0.0.0 PORT=1337 -APP_KEYS=SIwLyqu+IpSHIuUBDQfPZg==,Nzqbq2C3ATsR19u5XEAJQA==,/Agk5Sn8M4EzfoSiIHcDlQ==,gSxT2T0k2zbQatKXUV0zCA== -API_TOKEN_SALT=reQcUBbGXD2KWG2QpRn7DA== -ADMIN_JWT_SECRET= 69mzgwRGfEBUhPEaas8EBA== -TRANSFER_TOKEN_SALT=/LTsSGpC5afHICjZu0oEuQ== -JWT_SECRET=E0TTVdsr+M/FXAjfrNIgXA== +APP_KEYS=ujfpKPEst1tv0WDxJEhjJw==,MOnFjWYKbWYmtrBZ3cQTFQ==,zQpX70tJw/Mw+Y656kXfVA==,xJT1vbsiz3cgabfgpLu72w== +API_TOKEN_SALT=5FoJkYoZV8IA6+NnZJDzng== +ADMIN_JWT_SECRET=tkeg3+HqE+QmTd2ITEivtA== +TRANSFER_TOKEN_SALT=UUMCRQ2cx9qvKw/RkB815Q== +# Database +DATABASE_CLIENT=sqlite +DATABASE_FILENAME=.tmp/data.db +JWT_SECRET=Dn/nUGQsREUw4/lfQYOScw== diff --git a/playground/.env.example b/playground/.env.example index b667b6c..ebfc96a 100644 --- a/playground/.env.example +++ b/playground/.env.example @@ -1,2 +1,7 @@ HOST=0.0.0.0 PORT=1337 +APP_KEYS="toBeModified1,toBeModified2" +API_TOKEN_SALT=tobemodified +ADMIN_JWT_SECRET=tobemodified +TRANSFER_TOKEN_SALT=tobemodified +JWT_SECRET=tobemodified diff --git a/playground/.strapi/client/app.js b/playground/.strapi/client/app.js new file mode 100644 index 0000000..32daad9 --- /dev/null +++ b/playground/.strapi/client/app.js @@ -0,0 +1,14 @@ +/** + * This file was automatically generated by Strapi. + * Any modifications made will be discarded. + */ +import usersPermissions from "@strapi/plugin-users-permissions/strapi-admin"; +import strapiCloud from "@strapi/plugin-cloud/strapi-admin"; +import { renderAdmin } from "@strapi/strapi/admin"; + +renderAdmin(document.getElementById("strapi"), { + plugins: { + "users-permissions": usersPermissions, + "strapi-cloud": strapiCloud, + }, +}); diff --git a/playground/.strapi/client/index.html b/playground/.strapi/client/index.html new file mode 100644 index 0000000..4e9d27c --- /dev/null +++ b/playground/.strapi/client/index.html @@ -0,0 +1,63 @@ + + + + + + + + + Strapi Admin + + + +
+ + + + diff --git a/playground/README.md b/playground/README.md index 4d901a0..879d89b 100644 --- a/playground/README.md +++ b/playground/README.md @@ -1,3 +1,57 @@ -# Strapi application +# 🚀 Getting started with Strapi -A quick description of your strapi application +Strapi comes with a full featured [Command Line Interface](https://docs.strapi.io/dev-docs/cli) (CLI) which lets you scaffold and manage your project in seconds. + +### `develop` + +Start your Strapi application with autoReload enabled. [Learn more](https://docs.strapi.io/dev-docs/cli#strapi-develop) + +``` +npm run develop +# or +yarn develop +``` + +### `start` + +Start your Strapi application with autoReload disabled. [Learn more](https://docs.strapi.io/dev-docs/cli#strapi-start) + +``` +npm run start +# or +yarn start +``` + +### `build` + +Build your admin panel. [Learn more](https://docs.strapi.io/dev-docs/cli#strapi-build) + +``` +npm run build +# or +yarn build +``` + +## ⚙️ Deployment + +Strapi gives you many possible deployment options for your project including [Strapi Cloud](https://cloud.strapi.io). Browse the [deployment section of the documentation](https://docs.strapi.io/dev-docs/deployment) to find the best solution for your use case. + +## 📚 Learn more + +- [Resource center](https://strapi.io/resource-center) - Strapi resource center. +- [Strapi documentation](https://docs.strapi.io) - Official Strapi documentation. +- [Strapi tutorials](https://strapi.io/tutorials) - List of tutorials made by the core team and the community. +- [Strapi blog](https://strapi.io/blog) - Official Strapi blog containing articles made by the Strapi team and the community. +- [Changelog](https://strapi.io/changelog) - Find out about the Strapi product updates, new features and general improvements. + +Feel free to check out the [Strapi GitHub repository](https://github.com/strapi/strapi). Your feedback and contributions are welcome! + +## ✨ Community + +- [Discord](https://discord.strapi.io) - Come chat with the Strapi community including the core team. +- [Forum](https://forum.strapi.io/) - Place to discuss, ask questions and find answers, show your Strapi project and get feedback or just talk with other Community members. +- [Awesome Strapi](https://github.com/strapi/awesome-strapi) - A curated list of awesome things related to Strapi. + +--- + +🤫 Psst! [Strapi is hiring](https://strapi.io/careers). diff --git a/playground/config/admin.js b/playground/config/admin.js index 15a268c..fa18851 100644 --- a/playground/config/admin.js +++ b/playground/config/admin.js @@ -1,10 +1,7 @@ module.exports = ({ env }) => ({ auth: { - secret: env('ADMIN_JWT_SECRET', 'c27c3833823a12b0761e32b22dc0113a'), + secret: env('ADMIN_JWT_SECRET'), }, - watchIgnoreFiles: [ - '**/config/sync/**', - ], apiToken: { salt: env('API_TOKEN_SALT'), }, @@ -13,4 +10,8 @@ module.exports = ({ env }) => ({ salt: env('TRANSFER_TOKEN_SALT'), }, }, + flags: { + nps: env.bool('FLAG_NPS', true), + promoteEE: env.bool('FLAG_PROMOTE_EE', true), + }, }); diff --git a/playground/config/middlewares.js b/playground/config/middlewares.js index f6e65b6..6eaf586 100644 --- a/playground/config/middlewares.js +++ b/playground/config/middlewares.js @@ -1,11 +1,12 @@ module.exports = [ + 'strapi::logger', 'strapi::errors', 'strapi::security', 'strapi::cors', 'strapi::poweredBy', - 'strapi::logger', 'strapi::query', 'strapi::body', + 'strapi::session', 'strapi::favicon', 'strapi::public', ]; diff --git a/playground/config/server.js b/playground/config/server.js index d3f42a3..039daec 100644 --- a/playground/config/server.js +++ b/playground/config/server.js @@ -1,4 +1,10 @@ module.exports = ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env.int('PORT', 1337), + app: { + keys: env.array('APP_KEYS'), + }, + webhooks: { + populateRelations: env.bool('WEBHOOKS_POPULATE_RELATIONS', false), + }, }); diff --git a/playground/database/migrations/.gitkeep b/playground/database/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/playground/favicon.ico b/playground/favicon.ico deleted file mode 100644 index 03eec51b180d0c2500550e83ea5d0b9aead3232d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3688 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 AFaQ7m diff --git a/playground/favicon.png b/playground/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..df668a881b58175effdf6e6d667cd0a29ce98075 GIT binary patch literal 497 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!Vgr0aT!FNQ%YPz~r|W+YAaeN! zM4m4Hfm|S%I{E+RP5<}p{hyZnKR5G#ea-*Q_WyV8{15c~egC1S$L^sn@(SnS%da63LSXaQ`%;7gOVpveiyr7nQL9IZ= z-A`pVKgIF>S>*T2kpBVWANdax|AfbLJG@L@l;9x3(=mx{2S>{97;cxH>_3zyyzXAU zjjdxQ^WxPEN$-xlJne8sF0xqg#Mjh={AZcjd`yxKaLoVx;=zr@liB5BU%YW{PhSw- uckQM0zm%HSf9!WG&HHyg{qyDQlnaA`#FRum$ErX}4pUXO@geCwXjqE-E literal 0 HcmV?d00001 diff --git a/playground/jest.config.js b/playground/jest.config.js deleted file mode 100644 index 7891cc8..0000000 --- a/playground/jest.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - name: 'Integration test', - testMatch: ['**/__tests__/?(*.)+(spec|test).js'], - transform: {}, - coverageDirectory: '../coverage/', - collectCoverage: true, -}; diff --git a/playground/jsconfig.json b/playground/jsconfig.json new file mode 100644 index 0000000..4ebd927 --- /dev/null +++ b/playground/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "moduleResolution": "nodenext", + "target": "ES2021", + "checkJs": true, + "allowJs": true + } +} diff --git a/playground/package.json b/playground/package.json index 4e17df6..47976b0 100644 --- a/playground/package.json +++ b/playground/package.json @@ -1,5 +1,5 @@ { - "name": "playground", + "name": "strapi-5-beta", "private": true, "version": "0.1.0", "description": "A Strapi application", @@ -10,30 +10,26 @@ "strapi": "strapi", "cs": "config-sync" }, - "devDependencies": { - "jest": "^29.7.0", - "jest-cli": "^29.7.0", - "supertest": "^6.3.3" - }, + "devDependencies": {}, "dependencies": { - "@strapi/plugin-i18n": "^5.0.0-beta.5", - "@strapi/plugin-users-permissions": "^5.0.0-beta.5", - "@strapi/strapi": "^5.0.0-beta.5", - "better-sqlite3": "^8.6.0", + "@strapi/strapi": "5.0.0-beta.2", + "@strapi/plugin-users-permissions": "5.0.0-beta.2", + "@strapi/plugin-cloud": "5.0.0-beta.2", + "better-sqlite3": "9.4.3", "react": "^18.0.0", "react-dom": "^18.0.0", - "react-router-dom": "^5.2.0", + "react-router-dom": "^6.0.0", "strapi-plugin-config-sync": "./..", - "styled-components": "^5.2.1" + "styled-components": "5.3.3" }, "author": { "name": "A Strapi developer" }, "strapi": { - "uuid": "2e84e366-1e09-43c2-a99f-a0d0acbc2ca5" + "uuid": "edadddbd-0f25-4da7-833b-d4cd7dcae2fc" }, "engines": { - "node": ">=18.x.x <=20.x.x", + "node": ">=18.0.0 <=20.x.x", "npm": ">=6.0.0" }, "license": "MIT" diff --git a/playground/types/generated/components.d.ts b/playground/types/generated/components.d.ts new file mode 100644 index 0000000..29587e8 --- /dev/null +++ b/playground/types/generated/components.d.ts @@ -0,0 +1,5 @@ +import type { Struct, Schema } from '@strapi/strapi'; + +declare module '@strapi/strapi' { + export module Public {} +} diff --git a/playground/types/generated/contentTypes.d.ts b/playground/types/generated/contentTypes.d.ts new file mode 100644 index 0000000..8c88413 --- /dev/null +++ b/playground/types/generated/contentTypes.d.ts @@ -0,0 +1,730 @@ +import type { Struct, Schema } from '@strapi/strapi'; + +export interface AdminPermission extends Struct.CollectionTypeSchema { + collectionName: 'admin_permissions'; + info: { + name: 'Permission'; + description: ''; + singularName: 'permission'; + pluralName: 'permissions'; + displayName: 'Permission'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + action: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + actionParameters: Schema.Attribute.JSON & Schema.Attribute.DefaultTo<{}>; + subject: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + properties: Schema.Attribute.JSON & Schema.Attribute.DefaultTo<{}>; + conditions: Schema.Attribute.JSON & Schema.Attribute.DefaultTo<[]>; + role: Schema.Attribute.Relation<'manyToOne', 'admin::role'>; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface AdminUser extends Struct.CollectionTypeSchema { + collectionName: 'admin_users'; + info: { + name: 'User'; + description: ''; + singularName: 'user'; + pluralName: 'users'; + displayName: 'User'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + firstname: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + lastname: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + username: Schema.Attribute.String; + email: Schema.Attribute.Email & + Schema.Attribute.Required & + Schema.Attribute.Private & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 6; + }>; + password: Schema.Attribute.Password & + Schema.Attribute.Private & + Schema.Attribute.SetMinMaxLength<{ + minLength: 6; + }>; + resetPasswordToken: Schema.Attribute.String & Schema.Attribute.Private; + registrationToken: Schema.Attribute.String & Schema.Attribute.Private; + isActive: Schema.Attribute.Boolean & + Schema.Attribute.Private & + Schema.Attribute.DefaultTo; + roles: Schema.Attribute.Relation<'manyToMany', 'admin::role'> & + Schema.Attribute.Private; + blocked: Schema.Attribute.Boolean & + Schema.Attribute.Private & + Schema.Attribute.DefaultTo; + preferedLanguage: Schema.Attribute.String; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface AdminRole extends Struct.CollectionTypeSchema { + collectionName: 'admin_roles'; + info: { + name: 'Role'; + description: ''; + singularName: 'role'; + pluralName: 'roles'; + displayName: 'Role'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + name: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + code: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + description: Schema.Attribute.String; + users: Schema.Attribute.Relation<'manyToMany', 'admin::user'>; + permissions: Schema.Attribute.Relation<'oneToMany', 'admin::permission'>; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface AdminApiToken extends Struct.CollectionTypeSchema { + collectionName: 'strapi_api_tokens'; + info: { + name: 'Api Token'; + singularName: 'api-token'; + pluralName: 'api-tokens'; + displayName: 'Api Token'; + description: ''; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + name: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + description: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }> & + Schema.Attribute.DefaultTo<''>; + type: Schema.Attribute.Enumeration<['read-only', 'full-access', 'custom']> & + Schema.Attribute.Required & + Schema.Attribute.DefaultTo<'read-only'>; + accessKey: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + lastUsedAt: Schema.Attribute.DateTime; + permissions: Schema.Attribute.Relation< + 'oneToMany', + 'admin::api-token-permission' + >; + expiresAt: Schema.Attribute.DateTime; + lifespan: Schema.Attribute.BigInteger; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface AdminApiTokenPermission extends Struct.CollectionTypeSchema { + collectionName: 'strapi_api_token_permissions'; + info: { + name: 'API Token Permission'; + description: ''; + singularName: 'api-token-permission'; + pluralName: 'api-token-permissions'; + displayName: 'API Token Permission'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + action: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + token: Schema.Attribute.Relation<'manyToOne', 'admin::api-token'>; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface AdminTransferToken extends Struct.CollectionTypeSchema { + collectionName: 'strapi_transfer_tokens'; + info: { + name: 'Transfer Token'; + singularName: 'transfer-token'; + pluralName: 'transfer-tokens'; + displayName: 'Transfer Token'; + description: ''; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + name: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + description: Schema.Attribute.String & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }> & + Schema.Attribute.DefaultTo<''>; + accessKey: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + lastUsedAt: Schema.Attribute.DateTime; + permissions: Schema.Attribute.Relation< + 'oneToMany', + 'admin::transfer-token-permission' + >; + expiresAt: Schema.Attribute.DateTime; + lifespan: Schema.Attribute.BigInteger; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface AdminTransferTokenPermission + extends Struct.CollectionTypeSchema { + collectionName: 'strapi_transfer_token_permissions'; + info: { + name: 'Transfer Token Permission'; + description: ''; + singularName: 'transfer-token-permission'; + pluralName: 'transfer-token-permissions'; + displayName: 'Transfer Token Permission'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + action: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + token: Schema.Attribute.Relation<'manyToOne', 'admin::transfer-token'>; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface PluginUploadFile extends Struct.CollectionTypeSchema { + collectionName: 'files'; + info: { + singularName: 'file'; + pluralName: 'files'; + displayName: 'File'; + description: ''; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + name: Schema.Attribute.String & Schema.Attribute.Required; + alternativeText: Schema.Attribute.String; + caption: Schema.Attribute.String; + width: Schema.Attribute.Integer; + height: Schema.Attribute.Integer; + formats: Schema.Attribute.JSON; + hash: Schema.Attribute.String & Schema.Attribute.Required; + ext: Schema.Attribute.String; + mime: Schema.Attribute.String & Schema.Attribute.Required; + size: Schema.Attribute.Decimal & Schema.Attribute.Required; + url: Schema.Attribute.String & Schema.Attribute.Required; + previewUrl: Schema.Attribute.String; + provider: Schema.Attribute.String & Schema.Attribute.Required; + provider_metadata: Schema.Attribute.JSON; + related: Schema.Attribute.Relation<'morphToMany'>; + folder: Schema.Attribute.Relation<'manyToOne', 'plugin::upload.folder'> & + Schema.Attribute.Private; + folderPath: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Private & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface PluginUploadFolder extends Struct.CollectionTypeSchema { + collectionName: 'upload_folders'; + info: { + singularName: 'folder'; + pluralName: 'folders'; + displayName: 'Folder'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + name: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + pathId: Schema.Attribute.Integer & + Schema.Attribute.Required & + Schema.Attribute.Unique; + parent: Schema.Attribute.Relation<'manyToOne', 'plugin::upload.folder'>; + children: Schema.Attribute.Relation<'oneToMany', 'plugin::upload.folder'>; + files: Schema.Attribute.Relation<'oneToMany', 'plugin::upload.file'>; + path: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 1; + }>; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface PluginI18NLocale extends Struct.CollectionTypeSchema { + collectionName: 'i18n_locale'; + info: { + singularName: 'locale'; + pluralName: 'locales'; + collectionName: 'locales'; + displayName: 'Locale'; + description: ''; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + name: Schema.Attribute.String & + Schema.Attribute.SetMinMax< + { + min: 1; + max: 50; + }, + number + >; + code: Schema.Attribute.String & Schema.Attribute.Unique; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface PluginContentReleasesRelease + extends Struct.CollectionTypeSchema { + collectionName: 'strapi_releases'; + info: { + singularName: 'release'; + pluralName: 'releases'; + displayName: 'Release'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + name: Schema.Attribute.String & Schema.Attribute.Required; + releasedAt: Schema.Attribute.DateTime; + scheduledAt: Schema.Attribute.DateTime; + timezone: Schema.Attribute.String; + status: Schema.Attribute.Enumeration< + ['ready', 'blocked', 'failed', 'done', 'empty'] + > & + Schema.Attribute.Required; + actions: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::content-releases.release-action' + >; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface PluginContentReleasesReleaseAction + extends Struct.CollectionTypeSchema { + collectionName: 'strapi_release_actions'; + info: { + singularName: 'release-action'; + pluralName: 'release-actions'; + displayName: 'Release Action'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + type: Schema.Attribute.Enumeration<['publish', 'unpublish']> & + Schema.Attribute.Required; + entry: Schema.Attribute.Relation<'morphToOne'>; + contentType: Schema.Attribute.String & Schema.Attribute.Required; + locale: Schema.Attribute.String; + release: Schema.Attribute.Relation< + 'manyToOne', + 'plugin::content-releases.release' + >; + isEntryValid: Schema.Attribute.Boolean; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + }; +} + +export interface PluginUsersPermissionsPermission + extends Struct.CollectionTypeSchema { + collectionName: 'up_permissions'; + info: { + name: 'permission'; + description: ''; + singularName: 'permission'; + pluralName: 'permissions'; + displayName: 'Permission'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + action: Schema.Attribute.String & Schema.Attribute.Required; + role: Schema.Attribute.Relation< + 'manyToOne', + 'plugin::users-permissions.role' + >; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface PluginUsersPermissionsRole + extends Struct.CollectionTypeSchema { + collectionName: 'up_roles'; + info: { + name: 'role'; + description: ''; + singularName: 'role'; + pluralName: 'roles'; + displayName: 'Role'; + }; + options: { + draftAndPublish: false; + }; + pluginOptions: { + 'content-manager': { + visible: false; + }; + 'content-type-builder': { + visible: false; + }; + }; + attributes: { + name: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 3; + }>; + description: Schema.Attribute.String; + type: Schema.Attribute.String & Schema.Attribute.Unique; + permissions: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::users-permissions.permission' + >; + users: Schema.Attribute.Relation< + 'oneToMany', + 'plugin::users-permissions.user' + >; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +export interface PluginUsersPermissionsUser + extends Struct.CollectionTypeSchema { + collectionName: 'up_users'; + info: { + name: 'user'; + description: ''; + singularName: 'user'; + pluralName: 'users'; + displayName: 'User'; + }; + options: { + timestamps: true; + draftAndPublish: false; + }; + attributes: { + username: Schema.Attribute.String & + Schema.Attribute.Required & + Schema.Attribute.Unique & + Schema.Attribute.SetMinMaxLength<{ + minLength: 3; + }>; + email: Schema.Attribute.Email & + Schema.Attribute.Required & + Schema.Attribute.SetMinMaxLength<{ + minLength: 6; + }>; + provider: Schema.Attribute.String; + password: Schema.Attribute.Password & + Schema.Attribute.Private & + Schema.Attribute.SetMinMaxLength<{ + minLength: 6; + }>; + resetPasswordToken: Schema.Attribute.String & Schema.Attribute.Private; + confirmationToken: Schema.Attribute.String & Schema.Attribute.Private; + confirmed: Schema.Attribute.Boolean & Schema.Attribute.DefaultTo; + blocked: Schema.Attribute.Boolean & Schema.Attribute.DefaultTo; + role: Schema.Attribute.Relation< + 'manyToOne', + 'plugin::users-permissions.role' + >; + createdAt: Schema.Attribute.DateTime; + updatedAt: Schema.Attribute.DateTime; + publishedAt: Schema.Attribute.DateTime; + createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & + Schema.Attribute.Private; + locale: Schema.Attribute.String; + }; +} + +declare module '@strapi/strapi' { + export module Public { + export interface ContentTypeSchemas { + 'admin::permission': AdminPermission; + 'admin::user': AdminUser; + 'admin::role': AdminRole; + 'admin::api-token': AdminApiToken; + 'admin::api-token-permission': AdminApiTokenPermission; + 'admin::transfer-token': AdminTransferToken; + 'admin::transfer-token-permission': AdminTransferTokenPermission; + 'plugin::upload.file': PluginUploadFile; + 'plugin::upload.folder': PluginUploadFolder; + 'plugin::i18n.locale': PluginI18NLocale; + 'plugin::content-releases.release': PluginContentReleasesRelease; + 'plugin::content-releases.release-action': PluginContentReleasesReleaseAction; + 'plugin::users-permissions.permission': PluginUsersPermissionsPermission; + 'plugin::users-permissions.role': PluginUsersPermissionsRole; + 'plugin::users-permissions.user': PluginUsersPermissionsUser; + } + } +}