From c28ca35990d0b19ebe1aa74ed0696b224eb2fff6 Mon Sep 17 00:00:00 2001 From: Convly Date: Mon, 7 Mar 2022 11:13:29 +0100 Subject: [PATCH] Add a typescript kitchensink example --- examples/kitchensink-ts/.editorconfig | 16 +++ examples/kitchensink-ts/.env.example | 2 + examples/kitchensink-ts/.gitignore | 114 ++++++++++++++++++ examples/kitchensink-ts/README.md | 3 + examples/kitchensink-ts/config/admin.ts | 5 + examples/kitchensink-ts/config/api.ts | 7 ++ examples/kitchensink-ts/config/database.ts | 11 ++ .../config/functions/bootstrap.ts | 11 ++ .../kitchensink-ts/config/functions/cron.ts | 19 +++ .../config/functions/responses/404.ts | 3 + examples/kitchensink-ts/config/server.ts | 12 ++ examples/kitchensink-ts/favicon.ico | Bin 0 -> 3688 bytes examples/kitchensink-ts/package.json | 41 +++++++ examples/kitchensink-ts/public/robots.txt | 3 + .../kitchensink-ts/public/uploads/.gitkeep | 0 .../kitchensink-ts/src/admin/app.example.js | 33 +++++ .../src/admin/extensions/theme.js | 47 ++++++++ examples/kitchensink-ts/src/admin/foo.ts | 0 .../src/admin/webpack.config.example.js | 10 ++ examples/kitchensink-ts/src/api/.gitkeep | 0 .../kitchensink-ts/src/extensions/.gitkeep | 0 examples/kitchensink-ts/tsconfig.json | 25 ++++ 22 files changed, 362 insertions(+) create mode 100644 examples/kitchensink-ts/.editorconfig create mode 100644 examples/kitchensink-ts/.env.example create mode 100644 examples/kitchensink-ts/.gitignore create mode 100644 examples/kitchensink-ts/README.md create mode 100644 examples/kitchensink-ts/config/admin.ts create mode 100644 examples/kitchensink-ts/config/api.ts create mode 100644 examples/kitchensink-ts/config/database.ts create mode 100644 examples/kitchensink-ts/config/functions/bootstrap.ts create mode 100644 examples/kitchensink-ts/config/functions/cron.ts create mode 100644 examples/kitchensink-ts/config/functions/responses/404.ts create mode 100644 examples/kitchensink-ts/config/server.ts create mode 100644 examples/kitchensink-ts/favicon.ico create mode 100644 examples/kitchensink-ts/package.json create mode 100644 examples/kitchensink-ts/public/robots.txt create mode 100644 examples/kitchensink-ts/public/uploads/.gitkeep create mode 100644 examples/kitchensink-ts/src/admin/app.example.js create mode 100644 examples/kitchensink-ts/src/admin/extensions/theme.js create mode 100644 examples/kitchensink-ts/src/admin/foo.ts create mode 100644 examples/kitchensink-ts/src/admin/webpack.config.example.js create mode 100644 examples/kitchensink-ts/src/api/.gitkeep create mode 100644 examples/kitchensink-ts/src/extensions/.gitkeep create mode 100644 examples/kitchensink-ts/tsconfig.json 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 0000000000000000000000000000000000000000..03eec51b180d0c2500550e83ea5d0b9aead3232d GIT binary patch literal 3688 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 AFaQ7m literal 0 HcmV?d00001 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 + ] +}