diff --git a/examples/kitchensink-ts/.editorconfig b/examples/kitchensink-ts/.editorconfig new file mode 100644 index 0000000000..473e45184b --- /dev/null +++ b/examples/kitchensink-ts/.editorconfig @@ -0,0 +1,16 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[{package.json,*.yml}] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/examples/kitchensink-ts/.env.example b/examples/kitchensink-ts/.env.example new file mode 100644 index 0000000000..b667b6c4a1 --- /dev/null +++ b/examples/kitchensink-ts/.env.example @@ -0,0 +1,2 @@ +HOST=0.0.0.0 +PORT=1337 diff --git a/examples/kitchensink-ts/.gitignore b/examples/kitchensink-ts/.gitignore new file mode 100644 index 0000000000..8e339ee395 --- /dev/null +++ b/examples/kitchensink-ts/.gitignore @@ -0,0 +1,114 @@ +############################ +# OS X +############################ + +.DS_Store +.AppleDouble +.LSOverride +Icon +.Spotlight-V100 +.Trashes +._* + + +############################ +# Linux +############################ + +*~ + + +############################ +# Windows +############################ + +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ +*.cab +*.msi +*.msm +*.msp + + +############################ +# Packages +############################ + +*.7z +*.csv +*.dat +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip +*.com +*.class +*.dll +*.exe +*.o +*.seed +*.so +*.swo +*.swp +*.swn +*.swm +*.out +*.pid + + +############################ +# Logs and databases +############################ + +.tmp +*.log +*.sql +*.sqlite +*.sqlite3 + + +############################ +# Misc. +############################ + +*# +ssl +.idea +nbproject +public/uploads/* +!public/uploads/.gitkeep + +############################ +# Node.js +############################ + +lib-cov +lcov.info +pids +logs +results +node_modules +.node_history + +############################ +# Tests +############################ + +testApp +coverage + +############################ +# Strapi +############################ + +.env +license.txt +exports +*.cache +build +.strapi-updater.json diff --git a/examples/kitchensink-ts/README.md b/examples/kitchensink-ts/README.md new file mode 100644 index 0000000000..4d901a095d --- /dev/null +++ b/examples/kitchensink-ts/README.md @@ -0,0 +1,3 @@ +# Strapi application + +A quick description of your strapi application diff --git a/examples/kitchensink-ts/config/admin.ts b/examples/kitchensink-ts/config/admin.ts new file mode 100644 index 0000000000..9866839fff --- /dev/null +++ b/examples/kitchensink-ts/config/admin.ts @@ -0,0 +1,5 @@ +export default ({ env }) => ({ + auth: { + secret: env('ADMIN_JWT_SECRET', 'example-token'), + }, +}); diff --git a/examples/kitchensink-ts/config/api.ts b/examples/kitchensink-ts/config/api.ts new file mode 100644 index 0000000000..37f7c14a42 --- /dev/null +++ b/examples/kitchensink-ts/config/api.ts @@ -0,0 +1,7 @@ +export default { + rest: { + defaultLimit: 25, + maxLimit: 100, + withCount: true, + }, +}; diff --git a/examples/kitchensink-ts/config/database.ts b/examples/kitchensink-ts/config/database.ts new file mode 100644 index 0000000000..641c84bc25 --- /dev/null +++ b/examples/kitchensink-ts/config/database.ts @@ -0,0 +1,11 @@ +import path from 'path'; + +export default ({ env }) => ({ + connection: { + client: 'sqlite', + connection: { + filename: path.join(__dirname, '..', env('DATABASE_FILENAME', '.tmp/data.db')), + }, + useNullAsDefault: true, + }, +}); diff --git a/examples/kitchensink-ts/config/functions/bootstrap.ts b/examples/kitchensink-ts/config/functions/bootstrap.ts new file mode 100644 index 0000000000..0665e6e0c0 --- /dev/null +++ b/examples/kitchensink-ts/config/functions/bootstrap.ts @@ -0,0 +1,11 @@ +/** + * An asynchronous bootstrap function that runs before + * your application gets started. + * + * This gives you an opportunity to set up your data model, + * run jobs, or perform some special logic. + * + * See more details here: https://strapi.io/documentation/developer-docs/latest/setup-deployment-guides/configurations.html#bootstrap + */ + +export default () => {}; diff --git a/examples/kitchensink-ts/config/functions/cron.ts b/examples/kitchensink-ts/config/functions/cron.ts new file mode 100644 index 0000000000..16c9f3256c --- /dev/null +++ b/examples/kitchensink-ts/config/functions/cron.ts @@ -0,0 +1,19 @@ +/** + * Cron config that gives you an opportunity + * to run scheduled jobs. + * + * The cron format consists of: + * [SECOND (optional)] [MINUTE] [HOUR] [DAY OF MONTH] [MONTH OF YEAR] [DAY OF WEEK] + * + * See more details here: https://strapi.io/documentation/developer-docs/latest/setup-deployment-guides/configurations.html#cron-tasks + */ + +export default { + /** + * Simple example. + * Every monday at 1am. + */ + // '0 1 * * 1': () => { + // + // } +}; diff --git a/examples/kitchensink-ts/config/functions/responses/404.ts b/examples/kitchensink-ts/config/functions/responses/404.ts new file mode 100644 index 0000000000..d0ce1353f3 --- /dev/null +++ b/examples/kitchensink-ts/config/functions/responses/404.ts @@ -0,0 +1,3 @@ +export default async (/* ctx */) => { + // return ctx.notFound('My custom message 404'); +}; diff --git a/examples/kitchensink-ts/config/server.ts b/examples/kitchensink-ts/config/server.ts new file mode 100644 index 0000000000..364c42b396 --- /dev/null +++ b/examples/kitchensink-ts/config/server.ts @@ -0,0 +1,12 @@ +export default ({ env }) => ({ + host: env('HOST', '0.0.0.0'), + port: env.int('PORT', 6567), + admin: { + auth: { + secret: env('ADMIN_JWT_SECRET', '6f75e424d1a0307077c294fcc3c7d78d'), + }, + }, + app: { + keys: env.array('APP_KEYS', ['toBeModified1', 'toBeModified2']), + }, +}); diff --git a/examples/kitchensink-ts/favicon.ico b/examples/kitchensink-ts/favicon.ico new file mode 100644 index 0000000000..03eec51b18 Binary files /dev/null and b/examples/kitchensink-ts/favicon.ico differ diff --git a/examples/kitchensink-ts/package.json b/examples/kitchensink-ts/package.json new file mode 100644 index 0000000000..94668a8014 --- /dev/null +++ b/examples/kitchensink-ts/package.json @@ -0,0 +1,41 @@ +{ + "name": "kitchensink-ts", + "private": true, + "version": "4.1.1", + "description": "A Strapi application.", + "scripts": { + "develop": "strapi develop", + "develop:ce": "STRAPI_DISABLE_EE=true strapi develop", + "start": "strapi start", + "build": "strapi build", + "build:ce": "STRAPI_DISABLE_EE=true strapi build", + "strapi": "strapi" + }, + "dependencies": { + "@strapi/admin": "4.1.1", + "@strapi/provider-email-mailgun": "4.1.1", + "@strapi/provider-upload-aws-s3": "4.1.1", + "@strapi/provider-upload-cloudinary": "4.1.1", + "@strapi/strapi": "4.1.1", + "@strapi/utils": "4.1.1", + "lodash": "4.17.21", + "mysql": "2.18.1", + "passport-google-oauth2": "0.2.0", + "pg": "8.6.0", + "sqlite3": "5.0.2" + }, + "devDependencies": { + "@swc/cli": "0.1.55", + "@swc/core": "1.2.146", + "tsc": "2.0.4", + "typescript": "4.6.2" + }, + "strapi": { + "uuid": "getstarted" + }, + "engines": { + "node": ">=12.22.0 <=16.x.x", + "npm": ">=6.0.0" + }, + "license": "SEE LICENSE IN LICENSE" +} diff --git a/examples/kitchensink-ts/public/robots.txt b/examples/kitchensink-ts/public/robots.txt new file mode 100644 index 0000000000..ff5d3164e0 --- /dev/null +++ b/examples/kitchensink-ts/public/robots.txt @@ -0,0 +1,3 @@ +# To prevent search engines from seeing the site altogether, uncomment the next two lines: +# User-Agent: * +# Disallow: / diff --git a/examples/kitchensink-ts/public/uploads/.gitkeep b/examples/kitchensink-ts/public/uploads/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/kitchensink-ts/src/admin/app.example.js b/examples/kitchensink-ts/src/admin/app.example.js new file mode 100644 index 0000000000..55e1bbcbd4 --- /dev/null +++ b/examples/kitchensink-ts/src/admin/app.example.js @@ -0,0 +1,33 @@ +import theme from './extensions/theme'; + +export default { + config: { + auth: { + logo: + 'https://images.unsplash.com/photo-1593642634367-d91a135587b5?ixid=MnwxMjA3fDF8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=750&q=80', + }, + head: { + favicon: + 'https://images.unsplash.com/photo-1593642634367-d91a135587b5?ixid=MnwxMjA3fDF8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=750&q=80', + title: 'Strapi test', + }, + locales: ['fr', 'de'], + menu: { + logo: + 'https://images.unsplash.com/photo-1593642634367-d91a135587b5?ixid=MnwxMjA3fDF8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=750&q=80', + }, + theme, + translations: { + fr: { + 'Auth.form.email.label': 'test', + Users: 'Utilisateurs', + City: 'CITY FRENCH', + // Customize the label of the CM table.. + Id: 'ID french', + }, + }, + tutorials: false, + notifications: { release: false }, + }, + bootstrap() {}, +}; diff --git a/examples/kitchensink-ts/src/admin/extensions/theme.js b/examples/kitchensink-ts/src/admin/extensions/theme.js new file mode 100644 index 0000000000..ad6e1eae5a --- /dev/null +++ b/examples/kitchensink-ts/src/admin/extensions/theme.js @@ -0,0 +1,47 @@ +const theme = { + colors: { + alternative100: '#f6ecfc', + alternative200: '#e0c1f4', + alternative500: '#ac73e6', + alternative600: '#9736e8', + alternative700: '#8312d1', + danger100: '#fcecea', + danger200: '#f5c0b8', + danger500: '#ee5e52', + danger600: '#d02b20', + danger700: '#b72b1a', + neutral0: 'black', + neutral100: '#f6f6f9', + neutral150: '#eaeaef', + neutral200: '#dcdce4', + neutral300: '#c0c0cf', + neutral400: '#a5a5ba', + neutral500: '#8e8ea9', + neutral600: '#666687', + neutral700: '#4a4a6a', + neutral800: '#32324d', + neutral900: '#212134', + primary100: '#f0f0ff', + primary200: '#d9d8ff', + primary500: '#7b79ff', + primary600: '#4945ff', + primary700: '#271fe0', + secondary100: '#eaf5ff', + secondary200: '#b8e1ff', + secondary500: '#66b7f1', + secondary600: '#0c75af', + secondary700: '#006096', + success100: '#eafbe7', + success200: '#c6f0c2', + success500: '#5cb176', + success600: '#328048', + success700: '#2f6846', + warning100: '#fdf4dc', + warning200: '#fae7b9', + warning500: '#f29d41', + warning600: '#d9822f', + warning700: '#be5d01', + }, +}; + +export default theme; diff --git a/examples/kitchensink-ts/src/admin/foo.ts b/examples/kitchensink-ts/src/admin/foo.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/kitchensink-ts/src/admin/webpack.config.example.js b/examples/kitchensink-ts/src/admin/webpack.config.example.js new file mode 100644 index 0000000000..a36d60ff39 --- /dev/null +++ b/examples/kitchensink-ts/src/admin/webpack.config.example.js @@ -0,0 +1,10 @@ +'use strict'; + +/* eslint-disable no-unused-vars */ +module.exports = (config, webpack) => { + // Note: we provide webpack above so you should not `require` it + // Perform customizations to webpack config + // Important: return the modified config + console.log('custom'); + return config; +}; diff --git a/examples/kitchensink-ts/src/api/.gitkeep b/examples/kitchensink-ts/src/api/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/kitchensink-ts/src/extensions/.gitkeep b/examples/kitchensink-ts/src/extensions/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/examples/kitchensink-ts/tsconfig.json b/examples/kitchensink-ts/tsconfig.json new file mode 100644 index 0000000000..d5004ac7ce --- /dev/null +++ b/examples/kitchensink-ts/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "lib": ["es2019", "es2020.promise", "es2020.bigint", "es2020.string"], + "module": "commonjs", + "target": "es2019", + "strict": false, + "noImplicitAny": false, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "outDir": "dist", + "noEmitOnError": true + }, + + "exclude": [ + // Misc + "node_modules/", + "dist/", + // Admin Directories + "src/admin", + "src/plugins/**/admin", + "src/extensions/**/admin" // to verify + ] +}