From 537c45b77896bd26940acb6be216a654ff17461e Mon Sep 17 00:00:00 2001 From: Chen Asraf Date: Mon, 27 Nov 2023 13:51:24 +0200 Subject: [PATCH] feat(scaffold): remove unused scaffolds, fix zplug --- plugins/tpl.plugin.zsh | 125 +++++++------ scaffolds/_merge/cra/package.json | 40 ----- scaffolds/_merge/flutter-app/pubspec.yaml | 20 --- scaffolds/_merge/nextjs/package.json | 37 ---- .../cra/component/{{pascalCase name}}.tsx | 12 -- .../_subs/cra/page/{{snakeCase name}}.tsx | 25 --- .../templates/model/{{snakeCase name}}.dart | 9 - .../page/{{snakeCase name}}_page.dart | 10 -- .../templates/widget/{{snakeCase name}}.dart | 10 -- .../nextjs/component/{{pascalCase name}}.tsx | 12 -- .../_subs/nextjs/page/{{snakeCase name}}.tsx | 33 ---- scaffolds/cra/README.md | 46 ----- scaffolds/cra/public/favicon.ico | Bin 3870 -> 0 bytes scaffolds/cra/public/index.html | 43 ----- scaffolds/cra/public/logo192.png | Bin 5347 -> 0 bytes scaffolds/cra/public/logo512.png | Bin 9664 -> 0 bytes scaffolds/cra/public/manifest.json | 25 --- scaffolds/cra/public/robots.txt | 3 - scaffolds/cra/src/App/App.test.tsx | 9 - scaffolds/cra/src/App/App.tsx | 55 ------ scaffolds/cra/src/App/logo.svg | 1 - scaffolds/cra/src/components/atoms/Image.tsx | 9 - scaffolds/cra/src/components/atoms/Link.tsx | 14 -- scaffolds/cra/src/index.tsx | 64 ------- scaffolds/cra/tsconfig.json | 39 ---- scaffolds/editorfiles/.eslintignore | 3 +- scaffolds/editorfiles/.prettierignore | 3 +- scaffolds/flutter-app/scripts/get_name.dart | 15 -- .../flutter-app/scripts/get_version.dart | 15 -- scaffolds/nextjs/.vscode/settings.json | 16 -- .../nextjs/.vscode/snippets.code-snippets | 30 ---- scaffolds/nextjs/.vscode/tasks.json | 20 --- scaffolds/nextjs/Dockerfile | 57 ------ scaffolds/nextjs/README.md | 48 ----- scaffolds/nextjs/components/atoms/Link.tsx | 13 -- scaffolds/nextjs/core/emotion.ts | 11 -- scaffolds/nextjs/next-i18next.config.js | 9 - scaffolds/nextjs/next.config.js | 16 -- scaffolds/nextjs/pages/_app.tsx | 67 ------- scaffolds/nextjs/pages/_document.tsx | 91 ---------- scaffolds/nextjs/pages/index.tsx | 25 --- .../locales/en/{{ hyphenCase name }}.json | 8 - scaffolds/nextjs/tsconfig.json | 38 ---- .../components/atoms/Avatar.tsx | 49 ----- .../atoms/ControlledAutocomplete.tsx | 76 -------- .../components/atoms/ControlledSelect.tsx | 117 ------------ .../components/atoms/MainAppBar.tsx | 56 ------ .../components/atoms/PageLoader.tsx | 30 ---- .../components/atoms/PageWrapper.tsx | 70 -------- .../components/hooks/intl_hooks.ts | 17 -- scaffolds/react-app-common/core/api/api.ts | 38 ---- .../react-app-common/core/api/api_types.ts | 1 - .../react-app-common/core/api/user.api.ts | 55 ------ scaffolds/react-app-common/core/env.ts | 7 - scaffolds/react-app-common/core/i18n.ts | 14 -- .../react-app-common/core/models/user.ts | 5 - scaffolds/react-app-common/core/routes.ts | 33 ---- .../core/stores/user_store.tsx | 169 ------------------ scaffolds/react-app-common/core/theme.ts | 45 ----- scaffolds/react-app-common/core/types.ts | 20 --- .../core/utils/array_utils.ts | 4 - .../core/utils/error_helpers.ts | 14 -- .../react-app-common/core/utils/html_utils.ts | 62 ------- .../core/utils/image_utils.ts | 16 -- .../core/utils/locale_utils.ts | 6 - .../core/utils/object_utils.ts | 33 ---- .../core/utils/promise_utils.ts | 3 - .../core/utils/react_utils.ts | 92 ---------- scaffolds/react-app-common/mui.d.ts | 23 --- zsh_init.sh | 2 +- 70 files changed, 73 insertions(+), 2110 deletions(-) delete mode 100644 scaffolds/_merge/cra/package.json delete mode 100644 scaffolds/_merge/flutter-app/pubspec.yaml delete mode 100644 scaffolds/_merge/nextjs/package.json delete mode 100644 scaffolds/_subs/cra/component/{{pascalCase name}}.tsx delete mode 100644 scaffolds/_subs/cra/page/{{snakeCase name}}.tsx delete mode 100644 scaffolds/_subs/flutter-app/templates/model/{{snakeCase name}}.dart delete mode 100644 scaffolds/_subs/flutter-app/templates/page/{{snakeCase name}}_page.dart delete mode 100644 scaffolds/_subs/flutter-app/templates/widget/{{snakeCase name}}.dart delete mode 100644 scaffolds/_subs/nextjs/component/{{pascalCase name}}.tsx delete mode 100644 scaffolds/_subs/nextjs/page/{{snakeCase name}}.tsx delete mode 100644 scaffolds/cra/README.md delete mode 100644 scaffolds/cra/public/favicon.ico delete mode 100644 scaffolds/cra/public/index.html delete mode 100644 scaffolds/cra/public/logo192.png delete mode 100644 scaffolds/cra/public/logo512.png delete mode 100644 scaffolds/cra/public/manifest.json delete mode 100644 scaffolds/cra/public/robots.txt delete mode 100644 scaffolds/cra/src/App/App.test.tsx delete mode 100644 scaffolds/cra/src/App/App.tsx delete mode 100644 scaffolds/cra/src/App/logo.svg delete mode 100644 scaffolds/cra/src/components/atoms/Image.tsx delete mode 100644 scaffolds/cra/src/components/atoms/Link.tsx delete mode 100644 scaffolds/cra/src/index.tsx delete mode 100644 scaffolds/cra/tsconfig.json delete mode 100644 scaffolds/flutter-app/scripts/get_name.dart delete mode 100644 scaffolds/flutter-app/scripts/get_version.dart delete mode 100644 scaffolds/nextjs/.vscode/settings.json delete mode 100644 scaffolds/nextjs/.vscode/snippets.code-snippets delete mode 100644 scaffolds/nextjs/.vscode/tasks.json delete mode 100644 scaffolds/nextjs/Dockerfile delete mode 100644 scaffolds/nextjs/README.md delete mode 100644 scaffolds/nextjs/components/atoms/Link.tsx delete mode 100644 scaffolds/nextjs/core/emotion.ts delete mode 100644 scaffolds/nextjs/next-i18next.config.js delete mode 100644 scaffolds/nextjs/next.config.js delete mode 100644 scaffolds/nextjs/pages/_app.tsx delete mode 100644 scaffolds/nextjs/pages/_document.tsx delete mode 100644 scaffolds/nextjs/pages/index.tsx delete mode 100644 scaffolds/nextjs/public/locales/en/{{ hyphenCase name }}.json delete mode 100644 scaffolds/nextjs/tsconfig.json delete mode 100644 scaffolds/react-app-common/components/atoms/Avatar.tsx delete mode 100644 scaffolds/react-app-common/components/atoms/ControlledAutocomplete.tsx delete mode 100644 scaffolds/react-app-common/components/atoms/ControlledSelect.tsx delete mode 100644 scaffolds/react-app-common/components/atoms/MainAppBar.tsx delete mode 100644 scaffolds/react-app-common/components/atoms/PageLoader.tsx delete mode 100644 scaffolds/react-app-common/components/atoms/PageWrapper.tsx delete mode 100644 scaffolds/react-app-common/components/hooks/intl_hooks.ts delete mode 100644 scaffolds/react-app-common/core/api/api.ts delete mode 100644 scaffolds/react-app-common/core/api/api_types.ts delete mode 100644 scaffolds/react-app-common/core/api/user.api.ts delete mode 100644 scaffolds/react-app-common/core/env.ts delete mode 100644 scaffolds/react-app-common/core/i18n.ts delete mode 100644 scaffolds/react-app-common/core/models/user.ts delete mode 100644 scaffolds/react-app-common/core/routes.ts delete mode 100644 scaffolds/react-app-common/core/stores/user_store.tsx delete mode 100644 scaffolds/react-app-common/core/theme.ts delete mode 100644 scaffolds/react-app-common/core/types.ts delete mode 100644 scaffolds/react-app-common/core/utils/array_utils.ts delete mode 100644 scaffolds/react-app-common/core/utils/error_helpers.ts delete mode 100644 scaffolds/react-app-common/core/utils/html_utils.ts delete mode 100644 scaffolds/react-app-common/core/utils/image_utils.ts delete mode 100644 scaffolds/react-app-common/core/utils/locale_utils.ts delete mode 100644 scaffolds/react-app-common/core/utils/object_utils.ts delete mode 100644 scaffolds/react-app-common/core/utils/promise_utils.ts delete mode 100644 scaffolds/react-app-common/core/utils/react_utils.ts delete mode 100644 scaffolds/react-app-common/mui.d.ts diff --git a/plugins/tpl.plugin.zsh b/plugins/tpl.plugin.zsh index c3ed458e..b9bff6ce 100755 --- a/plugins/tpl.plugin.zsh +++ b/plugins/tpl.plugin.zsh @@ -2,66 +2,81 @@ SCAFFOLDS_DIR="$DOTFILES/scaffolds" -tpl() { +function tpl() { tpl_name="$1" shift case $tpl_name in - nextjs | cra) - app_name="$1" - shift - tpl_data="" - mkdir -p $app_name - cd $app_name - echo "Creating '$tpl_name' app in directory: '$(pwd)'" - case $tpl_name in - nextjs) - tpl_data='{"nextComponents":true}' - src_dir="./" - yarn create next-app --typescript . + ef | editorfiles) + tpl_name="editorfiles" + npx -y simple-scaffold@latest -t "$SCAFFOLDS_DIR/editorfiles" -o . - $@ ;; - cra) - tpl_data='{"nextComponents":false}' - src_dir="./src" - yarn create react-app --template typescript . - yes | rm -rf ./src/ + *) + echo_red "Usage: tpl [editorfiles]" ;; - esac - npx -y simple-scaffold@latest -t "$SCAFFOLDS_DIR/$tpl_name" -w 1 -o . -d $tpl_data $app_name - npx -y simple-scaffold@latest -t "$SCAFFOLDS_DIR/react-app-common" -w 1 -o $src_dir -d $tpl_data $app_name - echo_gray "Merging package.json..." - jq 'reduce inputs as $s (.; .*$s)' ./package.json $SCAFFOLDS_DIR/_merge/$tpl_name/package.json >./package.json.tmp - mv -f ./package.json.tmp ./package.json && rm -f ./package.json.tmp - echo_gray "Copying sub scaffolds..." - mkdir -p ./scaffolds - cp -R $SCAFFOLDS_DIR/_subs/$tpl_name/ ./scaffolds/ - tpl editorfiles - echo_gray "Installing additional dependencies..." - yarn install - echo_gray "Prettifying files..." - prettier -w "**/*.{js,jsx,ts,tsx,json,html}" - echo_gray "Done" - ;; - ef | editorfiles) - tpl_name="editorfiles" - npx -y simple-scaffold@latest -t "$SCAFFOLDS_DIR/editorfiles" -o . - $@ - ;; - fl | flutter | flutter-app) - tpl_name="flutter-app" - echo_cyan "Creating app '$@'..." - flutter create $@ - cd $1 - echo_cyan "Installing packages..." - flutter pub add firebase_core cloud_firestore firebase_crashlytics firebase_remote_config firebase_auth provider shared_preferences google_sign_in sign_in_with_apple dynamic_themes cached_network_image wakelock intl intl_generator - echo_cyan "Copying files..." - npx -y simple-scaffold@latest -t "$SCAFFOLDS_DIR/$tpl_name" -o ./ $@ - cp -R $SCAFFOLDS_DIR/_subs/$tpl_name/ ./ - echo_cyan "Updating pubspec.yaml..." - echo "$(cat $SCAFFOLDS_DIR/_merge/$tpl_name/pubspec.yaml)" >>./pubspec.yaml - echo_cyan "Done" - ;; - *) - echo_red "Usage: tpl [nextjs|cra|editorfiles|flutter-app]" - ;; esac } + + + # tpl_name="$1" + # shift + # + # case $tpl_name in + # nextjs | cra) + # app_name="$1" + # shift + # tpl_data="" + # mkdir -p $app_name + # cd $app_name + # echo "Creating '$tpl_name' app in directory: '$(pwd)'" + # case $tpl_name in + # nextjs) + # tpl_data='{"nextComponents":true}' + # src_dir="./" + # yarn create next-app --typescript . + # ;; + # cra) + # tpl_data='{"nextComponents":false}' + # src_dir="./src" + # yarn create react-app --template typescript . + # yes | rm -rf ./src/ + # ;; + # esac + # npx -y simple-scaffold@latest -t "$SCAFFOLDS_DIR/$tpl_name" -w 1 -o . -d $tpl_data $app_name + # npx -y simple-scaffold@latest -t "$SCAFFOLDS_DIR/react-app-common" -w 1 -o $src_dir -d $tpl_data $app_name + # echo_gray "Merging package.json..." + # jq 'reduce inputs as $s (.; .*$s)' ./package.json $SCAFFOLDS_DIR/_merge/$tpl_name/package.json >./package.json.tmp + # mv -f ./package.json.tmp ./package.json && rm -f ./package.json.tmp + # echo_gray "Copying sub scaffolds..." + # mkdir -p ./scaffolds + # cp -R $SCAFFOLDS_DIR/_subs/$tpl_name/ ./scaffolds/ + # tpl editorfiles + # echo_gray "Installing additional dependencies..." + # yarn install + # echo_gray "Prettifying files..." + # prettier -w "**/*.{js,jsx,ts,tsx,json,html}" + # echo_gray "Done" + # ;; + # ef | editorfiles) + # tpl_name="editorfiles" + # npx -y simple-scaffold@latest -t "$SCAFFOLDS_DIR/editorfiles" -o . - $@ + # ;; + # fl | flutter | flutter-app) + # tpl_name="flutter-app" + # echo_cyan "Creating app '$@'..." + # flutter create $@ + # cd $1 + # echo_cyan "Installing packages..." + # flutter pub add firebase_core cloud_firestore firebase_crashlytics firebase_remote_config firebase_auth provider shared_preferences google_sign_in sign_in_with_apple dynamic_themes cached_network_image wakelock intl intl_generator + # echo_cyan "Copying files..." + # npx -y simple-scaffold@latest -t "$SCAFFOLDS_DIR/$tpl_name" -o ./ $@ + # cp -R $SCAFFOLDS_DIR/_subs/$tpl_name/ ./ + # echo_cyan "Updating pubspec.yaml..." + # echo "$(cat $SCAFFOLDS_DIR/_merge/$tpl_name/pubspec.yaml)" >>./pubspec.yaml + # echo_cyan "Done" + # ;; + # *) + # echo_red "Usage: tpl [nextjs|cra|editorfiles|flutter-app]" + # ;; + # esac +} diff --git a/scaffolds/_merge/cra/package.json b/scaffolds/_merge/cra/package.json deleted file mode 100644 index 872a64ab..00000000 --- a/scaffolds/_merge/cra/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "version": "0.1.0", - "scripts": { - "gen:page": "npx -y simple-scaffold@latest -t scaffolds/page -s false -o pages ", - "gen:component": "npx -y simple-scaffold@latest -t scaffolds/component -s false -o components/atoms" - }, - "dependencies": { - "@emotion/cache": "^11.9.3", - "@emotion/react": "^11.9.3", - "@emotion/server": "^11.4.0", - "@emotion/styled": "^11.9.3", - "@mui/icons-material": "^5.8.4", - "@mui/material": "^5.9.2", - "axios": "^0.27.2", - "lodash": "^4.17.21", - "mobx-react-lite": "^3.4.0", - "mobx": "^6.6.1", - "node-fetch": "^3.2.10", - "react-hook-form": "^7.34.0", - "react-i18next": "^11.3.0", - "react-query": "^3.39.2", - "react-router-dom": "^6.3.0", - "react-router": "^6.3.0", - "react-use": "^17.4.0", - "stylis-plugin-rtl": "^2.1.1", - "stylis": "^4.1.1" - }, - "devDependencies": { - "@types/lodash": "^4.14.182", - "@types/stylis": "^4.0.2", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", - "css-loader": "^6.7.1", - "csv-parse": "^5.3.0", - "eslint-config-next": "12.2.3", - "eslint": "8.20.0", - "style-loader": "^3.3.1", - "ts-node": "^10.9.1" - } -} diff --git a/scaffolds/_merge/flutter-app/pubspec.yaml b/scaffolds/_merge/flutter-app/pubspec.yaml deleted file mode 100644 index 583624a0..00000000 --- a/scaffolds/_merge/flutter-app/pubspec.yaml +++ /dev/null @@ -1,20 +0,0 @@ - -script_runner: - scripts: - - build:apk: flutter build apk - - name: get-version - cmd: dart scripts/get_version.dart - suppress_header_output: true - - name: get-name - cmd: dart scripts/get_name.dart - suppress_header_output: true - - push: 'version=$(get-version); name=$(get-name); echo "Pushing ${name}-$version.apk"; adb push build/app/outputs/flutter-apk/app-release.apk /sdcard/Download/${name}-${version}.apk' - - install: adb install -r build/app/outputs/flutter-apk/app-release.apk - - to-device: build:apk && push && install - - auto-fix: dart fix --apply - - format: flutter format -l 100 --fix lib/ test/ - - - gen:page: npx simple-scaffold@latest -t templates/page -o lib/modules -s true - - gen:model: npx simple-scaffold@latest -t templates/model -o lib/models -s false - - gen:widget: npx simple-scaffold@latest -t templates/widget -o lib/widgets -s false - - gen:icons: flutter pub run icons_launcher:create diff --git a/scaffolds/_merge/nextjs/package.json b/scaffolds/_merge/nextjs/package.json deleted file mode 100644 index 3d2e9dd3..00000000 --- a/scaffolds/_merge/nextjs/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "version": "0.1.0", - "scripts": { - "gen:page": "npx -y simple-scaffold@latest -t scaffolds/page -s false -o pages ", - "gen:component": "npx -y simple-scaffold@latest -t scaffolds/component -s false -o components/atoms", - "build:docker": "docker build -t nextjs-docker .", - "start:docker": "docker run -p 3100:3000 nextjs-docker" - }, - "dependencies": { - "@emotion/cache": "^11.9.3", - "@emotion/react": "^11.9.3", - "@emotion/server": "^11.4.0", - "@emotion/styled": "^11.9.3", - "@mui/icons-material": "^5.8.4", - "@mui/material": "^5.9.2", - "@types/lodash": "^4.14.182", - "@types/stylis": "^4.0.2", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", - "axios": "^0.27.2", - "css-loader": "^6.7.1", - "csv-parse": "^5.3.0", - "lodash": "^4.17.21", - "mobx-react-lite": "^3.4.0", - "mobx": "^6.6.1", - "next-i18next": "^11.3.0", - "next-transpile-modules": "^9.0.0", - "node-fetch": "^3.2.10", - "react-hook-form": "^7.34.0", - "react-query": "^3.39.2", - "react-use": "^17.4.0", - "style-loader": "^3.3.1", - "stylis-plugin-rtl": "^2.1.1", - "stylis": "^4.1.1", - "ts-node": "^10.9.1" - } -} diff --git a/scaffolds/_subs/cra/component/{{pascalCase name}}.tsx b/scaffolds/_subs/cra/component/{{pascalCase name}}.tsx deleted file mode 100644 index fe39579f..00000000 --- a/scaffolds/_subs/cra/component/{{pascalCase name}}.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react' -import Box, { BoxProps } from '@mui/material/Box' -import { sxc } from 'core/utils/object_utils' -import { CustomComponent } from 'core/types' - -export interface {{pascalCase name}}Props extends CustomComponent { - // -} - -export const {{pascalCase name}}: React.FC<{{pascalCase name}}Props> = ({ sx, children }) => { - return {children} -} diff --git a/scaffolds/_subs/cra/page/{{snakeCase name}}.tsx b/scaffolds/_subs/cra/page/{{snakeCase name}}.tsx deleted file mode 100644 index 66fa0371..00000000 --- a/scaffolds/_subs/cra/page/{{snakeCase name}}.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react' -import { useHistory } from 'react-router-dom' -import { useTranslation } from 'react-i18next' -import Box from '@mui/material/Box' -import { PageWrapper } from 'components/atoms/PageWrapper' - -// NOTE -// This page mights need to be SSRed using `getStaticProps`. If that's the case, -// we will need to use `getStaticPaths` to generate the routes. - -export const {{pascalCase name}}: React.FC = () => { - const router = useHistory() - const params = router.query - const { t } = useTranslation('{{snakeCase name}}') - - return ( - - - {{ pascalCase name }} Page - - - ) -} - -export default {{pascalCase name}} diff --git a/scaffolds/_subs/flutter-app/templates/model/{{snakeCase name}}.dart b/scaffolds/_subs/flutter-app/templates/model/{{snakeCase name}}.dart deleted file mode 100644 index 193b67f0..00000000 --- a/scaffolds/_subs/flutter-app/templates/model/{{snakeCase name}}.dart +++ /dev/null @@ -1,9 +0,0 @@ -class {{pascalCase name}} { - {{pascalCase name}}(); - - factory {{pascalCase name}}.fromJson(Map json) => throw UnimplementedError(); - - Map toJson() => throw UnimplementedError(); - - {{pascalCase name}} copyWith() => throw UnimplementedError(); -} diff --git a/scaffolds/_subs/flutter-app/templates/page/{{snakeCase name}}_page.dart b/scaffolds/_subs/flutter-app/templates/page/{{snakeCase name}}_page.dart deleted file mode 100644 index fccc196a..00000000 --- a/scaffolds/_subs/flutter-app/templates/page/{{snakeCase name}}_page.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter/material.dart'; - -class {{pascalCase name}}Page extends StatelessWidget { - const {{pascalCase name}}Page({super.key}); - - @override - Widget build(BuildContext context) { - return Container(); - } -} diff --git a/scaffolds/_subs/flutter-app/templates/widget/{{snakeCase name}}.dart b/scaffolds/_subs/flutter-app/templates/widget/{{snakeCase name}}.dart deleted file mode 100644 index 67ec0996..00000000 --- a/scaffolds/_subs/flutter-app/templates/widget/{{snakeCase name}}.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter/material.dart'; - -class {{pascalCase name}} extends StatelessWidget { - const {{pascalCase name}}({super.key}); - - @override - Widget build(BuildContext context) { - return Container(); - } -} diff --git a/scaffolds/_subs/nextjs/component/{{pascalCase name}}.tsx b/scaffolds/_subs/nextjs/component/{{pascalCase name}}.tsx deleted file mode 100644 index fe39579f..00000000 --- a/scaffolds/_subs/nextjs/component/{{pascalCase name}}.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react' -import Box, { BoxProps } from '@mui/material/Box' -import { sxc } from 'core/utils/object_utils' -import { CustomComponent } from 'core/types' - -export interface {{pascalCase name}}Props extends CustomComponent { - // -} - -export const {{pascalCase name}}: React.FC<{{pascalCase name}}Props> = ({ sx, children }) => { - return {children} -} diff --git a/scaffolds/_subs/nextjs/page/{{snakeCase name}}.tsx b/scaffolds/_subs/nextjs/page/{{snakeCase name}}.tsx deleted file mode 100644 index 5ca76df1..00000000 --- a/scaffolds/_subs/nextjs/page/{{snakeCase name}}.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react' -import { NextPage, NextPageContext } from 'next' -import { useRouter } from 'next/router' -import { getI18nProps } from 'core/i18n' -import { useTranslation } from 'next-i18next' -import Box from '@mui/material/Box' -import { PageWrapper } from 'components/atoms/PageWrapper' - -// NOTE -// This page mights need to be SSRed using `getStaticProps`. If that's the case, -// we will need to use `getStaticPaths` to generate the routes. - -export const {{pascalCase name}}: NextPage = () => { - const router = useRouter() - const params = router.query - const { t } = useTranslation('{{snakeCase name}}') - - return ( - - - {{ pascalCase name }} Page - - - ) -} - -export async function getServerSideProps({ locale }: NextPageContext) { - return { - props: await getI18nProps(locale, ['{{snakeCase name}}']), - } -} - -export default {{pascalCase name}} diff --git a/scaffolds/cra/README.md b/scaffolds/cra/README.md deleted file mode 100644 index b58e0af8..00000000 --- a/scaffolds/cra/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Getting Started with Create React App - -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -## Available Scripts - -In the project directory, you can run: - -### `yarn start` - -Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in the browser. - -The page will reload if you make edits.\ -You will also see any lint errors in the console. - -### `yarn test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `yarn build` - -Builds the app for production to the `build` folder.\ -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `yarn eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/scaffolds/cra/public/favicon.ico b/scaffolds/cra/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/scaffolds/cra/public/index.html b/scaffolds/cra/public/index.html deleted file mode 100644 index aa069f27..00000000 --- a/scaffolds/cra/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - React App - - - -
- - - diff --git a/scaffolds/cra/public/logo192.png b/scaffolds/cra/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/scaffolds/cra/public/manifest.json b/scaffolds/cra/public/manifest.json deleted file mode 100644 index 080d6c77..00000000 --- a/scaffolds/cra/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/scaffolds/cra/public/robots.txt b/scaffolds/cra/public/robots.txt deleted file mode 100644 index e9e57dc4..00000000 --- a/scaffolds/cra/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/scaffolds/cra/src/App/App.test.tsx b/scaffolds/cra/src/App/App.test.tsx deleted file mode 100644 index 2a68616d..00000000 --- a/scaffolds/cra/src/App/App.test.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/scaffolds/cra/src/App/App.tsx b/scaffolds/cra/src/App/App.tsx deleted file mode 100644 index 7d9f17ac..00000000 --- a/scaffolds/cra/src/App/App.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import Box from '@mui/material/Box' -import Image from '{{#if nextComponents}}next/image{{else}}components/atoms/Image{{/if}}' -import Typography from '@mui/material/Typography' -import Link from '@mui/material/Link' -import logo from './logo.svg' - -function App() { - return ( - - - logo - - Edit src/App.tsx and save to reload. - - - Learn React - - - - ) -} - -export default App diff --git a/scaffolds/cra/src/App/logo.svg b/scaffolds/cra/src/App/logo.svg deleted file mode 100644 index 9dfc1c05..00000000 --- a/scaffolds/cra/src/App/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/scaffolds/cra/src/components/atoms/Image.tsx b/scaffolds/cra/src/components/atoms/Image.tsx deleted file mode 100644 index 6512d38f..00000000 --- a/scaffolds/cra/src/components/atoms/Image.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import Box, { BoxProps } from '@mui/material/Box' -import { CustomComponent, HTMLComponent } from 'core/types' - -export type ImageProps = CustomComponent & HTMLComponent -export const Image: React.FC = (props) => { - return -} - -export default Image diff --git a/scaffolds/cra/src/components/atoms/Link.tsx b/scaffolds/cra/src/components/atoms/Link.tsx deleted file mode 100644 index 04c199c8..00000000 --- a/scaffolds/cra/src/components/atoms/Link.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Link as RouterLink, LinkProps as RouterLinkProps } from 'react-router-dom' -import React from 'react' - -export const LinkBehavior = React.forwardRef< - HTMLAnchorElement, - Omit & { - href: RouterLinkProps['to'] - } ->((props, ref) => { - const { href, ...rest } = props - return -}) - -export default LinkBehavior diff --git a/scaffolds/cra/src/index.tsx b/scaffolds/cra/src/index.tsx deleted file mode 100644 index 26665ef7..00000000 --- a/scaffolds/cra/src/index.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import CssBaseline from '@mui/material/CssBaseline' -import ThemeProvider from '@mui/material/styles/ThemeProvider' -import { lightTheme, themeDir } from 'theme' -import { useTranslation } from 'react-i18next' -import { QueryClientProvider, QueryClient } from 'react-query' -import { useSilentLoginFlow } from 'stores/user_store' -import reportWebVitals from './reportWebVitals' -import App from './App' - -let windowInit = false - -const _{{ pascalCase name }}App: React.FC = () => { - const queryClient = new QueryClient({ - defaultOptions: { - queries: { - staleTime: Infinity, - refetchOnMount: false, - refetchOnReconnect: false, - refetchOnWindowFocus: false, - }, - }, - }) - - const { i18n } = useTranslation() - const themeWithDirection = React.useMemo( - () => themeDir(lightTheme, i18n.dir(i18n.language)), - [i18n], - ) - const silentLogin = useSilentLoginFlow() - - React.useEffect(() => { - if (!windowInit && typeof window !== 'undefined') { - windowInit = true - silentLogin() - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [typeof window]) - - return ( - - - - - - - ) -} - -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement -) - -root.render( - - <_{{ pascalCase name }}App /> - -) - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/scaffolds/cra/tsconfig.json b/scaffolds/cra/tsconfig.json deleted file mode 100644 index 5cdabd73..00000000 --- a/scaffolds/cra/tsconfig.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "baseUrl": "./src/", - }, - "ts-node": { - "compilerOptions": { - "module": "commonjs" - } - }, - "include": [ - "src", - "mui.d.ts", - "**/*.ts", - "**/*.tsx" - ], - "exclude": [ - "node_modules", - "templates/**/*" - ] -} diff --git a/scaffolds/editorfiles/.eslintignore b/scaffolds/editorfiles/.eslintignore index a52a73ca..e8e450be 100644 --- a/scaffolds/editorfiles/.eslintignore +++ b/scaffolds/editorfiles/.eslintignore @@ -1,2 +1 @@ -templates/ -scaffolds/ +gen/ diff --git a/scaffolds/editorfiles/.prettierignore b/scaffolds/editorfiles/.prettierignore index a52a73ca..e8e450be 100644 --- a/scaffolds/editorfiles/.prettierignore +++ b/scaffolds/editorfiles/.prettierignore @@ -1,2 +1 @@ -templates/ -scaffolds/ +gen/ diff --git a/scaffolds/flutter-app/scripts/get_name.dart b/scaffolds/flutter-app/scripts/get_name.dart deleted file mode 100644 index f39236fc..00000000 --- a/scaffolds/flutter-app/scripts/get_name.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'dart:io'; - -void main() { - // get version from pubspec.yaml - final pubspecFile = File('pubspec.yaml'); - final version = pubspecFile - .readAsStringSync() - .split('\n') - .firstWhere((x) => x.startsWith('name:')) - .split(':') - .last - .trim(); - // ignore: avoid_print - print(version); -} diff --git a/scaffolds/flutter-app/scripts/get_version.dart b/scaffolds/flutter-app/scripts/get_version.dart deleted file mode 100644 index 81c8cc6a..00000000 --- a/scaffolds/flutter-app/scripts/get_version.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'dart:io'; - -void main() { - // get version from pubspec.yaml - final pubspecFile = File('pubspec.yaml'); - final version = pubspecFile - .readAsStringSync() - .split('\n') - .firstWhere((x) => x.startsWith('version:')) - .split(':') - .last - .trim(); - // ignore: avoid_print - print(version); -} diff --git a/scaffolds/nextjs/.vscode/settings.json b/scaffolds/nextjs/.vscode/settings.json deleted file mode 100644 index b654bdeb..00000000 --- a/scaffolds/nextjs/.vscode/settings.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "cSpell.words": [ - "{{ hyphenCase name }}", - "MAPBOX", - "mapboxgl", - "stylis", - "Unmatch" - ], - "i18n-ally.localesPaths": [ - "public/locales" - ], - "i18n-ally.sourceLanguage": "he", - "i18n-ally.displayLanguage": "he", - "i18next.i18nPaths": "public/locales", - "i18n-ally.keystyle": "nested", -} diff --git a/scaffolds/nextjs/.vscode/snippets.code-snippets b/scaffolds/nextjs/.vscode/snippets.code-snippets deleted file mode 100644 index 306621f9..00000000 --- a/scaffolds/nextjs/.vscode/snippets.code-snippets +++ /dev/null @@ -1,30 +0,0 @@ -{ - // Place your {{ hyphenCase name }}-web workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and - // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope - // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is - // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: - // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. - // Placeholders with the same ids are connected. - // Example: - // "Print to console": { - // "scope": "javascript,typescript", - // "prefix": "log", - // "body": [ - // "console.log('$1');", - // "$2" - // ], - // "description": "Log output to console" - // } - "Load Translation SSR Props": { - "scope": "javascriptreact,typescriptreact", - "prefix": "tssr", - "body": [ - "export async function getStaticProps({ locale }: NextPageContext) {", - " return {", - " props: await getI18nProps(locale ?? 'he', ['${1:{{ hyphenCase name }} }']),", - " }", - "}", - ], - "description": "Load Translation SSR Props", - } -} diff --git a/scaffolds/nextjs/.vscode/tasks.json b/scaffolds/nextjs/.vscode/tasks.json deleted file mode 100644 index a646f267..00000000 --- a/scaffolds/nextjs/.vscode/tasks.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "dev", - "problemMatcher": [], - "label": "npm: dev", - "detail": "next dev" - }, - { - "type": "npm", - "script": "build", - "group": "build", - "problemMatcher": [], - "label": "npm: build", - "detail": "next build" - }, - ] -} diff --git a/scaffolds/nextjs/Dockerfile b/scaffolds/nextjs/Dockerfile deleted file mode 100644 index 2e8f5a67..00000000 --- a/scaffolds/nextjs/Dockerfile +++ /dev/null @@ -1,57 +0,0 @@ -# Install dependencies only when needed -FROM node:16-alpine AS deps -# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. -RUN apk add --no-cache libc6-compat -WORKDIR /app - -# Install dependencies based on the preferred package manager -COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ -RUN \ - if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ - elif [ -f package-lock.json ]; then npm ci; \ - elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i; \ - else echo "Lockfile not found." && exit 1; \ - fi - - -# Rebuild the source code only when needed -FROM node:16-alpine AS builder -WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules -COPY . . - -# Next.js collects completely anonymous telemetry data about general usage. -# Learn more here: https://nextjs.org/telemetry -# Uncomment the following line in case you want to disable telemetry during the build. -# ENV NEXT_TELEMETRY_DISABLED 1 - -RUN yarn build - -# Production image, copy all the files and run next -FROM node:16-alpine AS runner -WORKDIR /app - -ENV NODE_ENV production -# Uncomment the following line in case you want to disable telemetry during runtime. -# ENV NEXT_TELEMETRY_DISABLED 1 - -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs - -# You only need to copy next.config.js if you are NOT using the default configuration -COPY --from=builder /app/next.config.js ./ -COPY --from=builder /app/public ./public -COPY --from=builder /app/package.json ./package.json - -# Automatically leverage output traces to reduce image size -# https://nextjs.org/docs/advanced-features/output-file-tracing -COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ -COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static - -USER nextjs - -EXPOSE 3000 - -ENV PORT 3000 - -CMD ["node", "server.js"] diff --git a/scaffolds/nextjs/README.md b/scaffolds/nextjs/README.md deleted file mode 100644 index 1d410e9f..00000000 --- a/scaffolds/nextjs/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# {{ pascalCase name }} Web App - -## Dev Requirements - -1. [Node.js](https://nodejs.org/en/download/) -2. Yarn: `npm install -g yarn` - -> These requirements are for development mode only. -> You can run this project statically using Docker without having to install other dependencies. - -## Run in dev mode - -Dev mode allows hot reloading of files & components, and JIT build; as opposed to AOT build + -static serving. - -1. Install/update project dependencies: `yarn install` -2. Add `.env.local` file to the repository root folder, and fill it with the correct env variables: - - ```shell - ENV_VAR= - ``` - -3. Run in development mode with hot reload: `yarn dev` -4. Open [http://localhost:3000](http://localhost:3000) with your browser - -## Run using Docker - -Add the `.env.local` file mentioned in "Run in dev mode" to build the Docker with the correct -environment. Then, you can build the container and run as an image: - -### Shell - Manual - -```shell -# build -docker build -t nextjs-docker . -# run -# this docker exposes port 3000, you may forward to any other port -# (in this case 3100, to avoid conflict with dev mode run) -docker run -p 3100:3000 nextjs-docker -``` - -### NPM Script - Automated - -```shell -# build & run via npm scripts if you have Node.js installed -yarn build:docker -yarn start:docker -``` diff --git a/scaffolds/nextjs/components/atoms/Link.tsx b/scaffolds/nextjs/components/atoms/Link.tsx deleted file mode 100644 index ae2555ca..00000000 --- a/scaffolds/nextjs/components/atoms/Link.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import NextLink, { LinkProps as NextLinkProps } from 'next/link' -import MUILink, { LinkProps as MUILinkProps } from '@mui/material/Link' - -export const LinkBehavior: React.FC = (props) => { - const { href, children, ...rest } = props - return ( - - {children} - - ) -} - -export default LinkBehavior diff --git a/scaffolds/nextjs/core/emotion.ts b/scaffolds/nextjs/core/emotion.ts deleted file mode 100644 index c4fb9155..00000000 --- a/scaffolds/nextjs/core/emotion.ts +++ /dev/null @@ -1,11 +0,0 @@ -import createCache from '@emotion/cache' -import stylisRTLPlugin from 'stylis-plugin-rtl' -import { prefixer } from 'stylis' - -export const createEmotionCache = () => { - return createCache({ - key: 'css', - prepend: true, - stylisPlugins: [prefixer, stylisRTLPlugin], - }) -} diff --git a/scaffolds/nextjs/next-i18next.config.js b/scaffolds/nextjs/next-i18next.config.js deleted file mode 100644 index f3e351a8..00000000 --- a/scaffolds/nextjs/next-i18next.config.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - debug: process.env.NODE_ENV === 'development', - i18n: { - defaultLocale: 'en', - locales: ['en'], - }, - defaultNS: '{{ hyphenCase name }}', - reloadOnPrerender: process.env.NODE_ENV === 'development', -} diff --git a/scaffolds/nextjs/next.config.js b/scaffolds/nextjs/next.config.js deleted file mode 100644 index 13d52fdc..00000000 --- a/scaffolds/nextjs/next.config.js +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -const withTM = require('next-transpile-modules')(['@mui/material']) // pass the modules you would like to see transpiled -const { i18n } = require('./next-i18next.config') - -/** @type {import('next').NextConfig} */ -const nextConfig = { - output: 'standalone', - reactStrictMode: true, - swcMinify: true, - i18n, - images: { - domains: ['placeholder.photo'], - }, -} - -module.exports = withTM(nextConfig) diff --git a/scaffolds/nextjs/pages/_app.tsx b/scaffolds/nextjs/pages/_app.tsx deleted file mode 100644 index 34a6c935..00000000 --- a/scaffolds/nextjs/pages/_app.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from 'react' -import type { AppProps } from 'next/app' -import CssBaseline from '@mui/material/CssBaseline' -import ThemeProvider from '@mui/material/styles/ThemeProvider' -import { lightTheme, themeDir } from 'core/theme' -import { CacheProvider, EmotionCache } from '@emotion/react' -import { createEmotionCache } from 'core/emotion' -import { enableStaticRendering } from 'mobx-react-lite' -import { appWithTranslation, useTranslation } from 'next-i18next' -import nextI18nConfig from '../next-i18next.config' -import { QueryClientProvider, QueryClient } from 'react-query' -import { ENV } from 'core/env' -import { useSilentLoginFlow } from 'core/stores/user_store' - -export interface {{ pascalCase name }}AppProps extends AppProps { - emotionCache?: EmotionCache -} - -let windowInit = false - -const clientSideEmotionCache = createEmotionCache() -const isBrowserLoaded = ENV.BROWSER_LOADED -enableStaticRendering(!isBrowserLoaded) - -const _{{ pascalCase name }}App: React.FC<{{ pascalCase name }}AppProps> = (props) => { - const { Component, pageProps, emotionCache = clientSideEmotionCache } = props - const queryClient = new QueryClient({ - defaultOptions: { - queries: { - staleTime: Infinity, - refetchOnMount: false, - refetchOnReconnect: false, - refetchOnWindowFocus: false, - }, - }, - }) - - const { i18n } = useTranslation() - const themeWithDirection = React.useMemo( - () => themeDir(lightTheme, i18n.dir(i18n.language)), - [i18n], - ) - const silentLogin = useSilentLoginFlow() - - React.useEffect(() => { - if (!windowInit && typeof window !== 'undefined') { - windowInit = true - silentLogin() - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [typeof window]) - - return ( - - - - - - - - - ) -} - -const {{ pascalCase name }}App = appWithTranslation(_{{ pascalCase name }}App, nextI18nConfig) - -export default {{ pascalCase name }}App diff --git a/scaffolds/nextjs/pages/_document.tsx b/scaffolds/nextjs/pages/_document.tsx deleted file mode 100644 index c49c12d4..00000000 --- a/scaffolds/nextjs/pages/_document.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import * as React from 'react' -import Document, { Html, Head, Main, NextScript } from 'next/document' -import { createEmotionCache } from 'core/emotion' -import createEmotionServer from '@emotion/server/create-instance' - -export default class MyDocument extends Document { - render() { - return ( - - - - - - - {(this.props as any).emotionStyleTags} - - - {/* Main page content - deferred */} -
- - - - ) - } -} - -// `getInitialProps` belongs to `_document` (instead of `_app`), -// it's compatible with static-site generation (SSG). -MyDocument.getInitialProps = async (ctx) => { - // Resolution order - // - // On the server: - // 1. app.getInitialProps - // 2. page.getInitialProps - // 3. document.getInitialProps - // 4. app.render - // 5. page.render - // 6. document.render - // - // On the server with error: - // 1. document.getInitialProps - // 2. app.render - // 3. page.render - // 4. document.render - // - // On the client - // 1. app.getInitialProps - // 2. page.getInitialProps - // 3. app.render - // 4. page.render - - const originalRenderPage = ctx.renderPage - - // You can consider sharing the same emotion cache between all the SSR requests to speed up performance. - // However, be aware that it can have global side effects. - const cache = createEmotionCache() - const { extractCriticalToChunks } = createEmotionServer(cache) - - /* eslint-disable */ - ctx.renderPage = () => - originalRenderPage({ - enhanceApp: (App) => - function EnhanceApp(props) { - const _injectedProps: any = { emotionCache: cache } - return - }, - }) - /* eslint-enable */ - - const initialProps = await Document.getInitialProps(ctx) - // This is important. It prevents emotion to render invalid HTML. - // See https://github.com/mui-org/material-ui/issues/26561#issuecomment-855286153 - const emotionStyles = extractCriticalToChunks(initialProps.html) - const emotionStyleTags = emotionStyles.styles.map((style) => ( -