diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..3da87ea
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,20 @@
+{
+ "extends": "next/core-web-vitals",
+ "rules": {
+ "no-console": [
+ "warn",
+ {
+ "allow": ["debug", "info", "warn", "error"]
+ }
+ ],
+ "import/first": "off",
+ "import/no-webpack-loader-syntax": "off",
+ "no-unused-vars": [
+ "warn",
+ {
+ "varsIgnorePattern": "^unused",
+ "argsIgnorePattern": "^_+$|^e$"
+ }
+ ]
+ }
+}
diff --git a/.gitignore b/.gitignore
index 0dd21fb..3afd5e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,4 +22,12 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
-.vercel
\ No newline at end of file
+.vercel
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+# next.js
+/.next/
+/out/
+*.pem
+# debug
+# local env files
+# vercel
\ No newline at end of file
diff --git a/next-env.d.ts b/next-env.d.ts
new file mode 100644
index 0000000..9bc3dd4
--- /dev/null
+++ b/next-env.d.ts
@@ -0,0 +1,6 @@
+///
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/next.config.js b/next.config.js
new file mode 100644
index 0000000..d7cf568
--- /dev/null
+++ b/next.config.js
@@ -0,0 +1,8 @@
+module.exports = {
+ env: {
+ PUBLIC_URL: "",
+ },
+ eslint: {
+ dirs: ["src"],
+ },
+};
diff --git a/package.json b/package.json
index 8fe9d8c..11784fa 100644
--- a/package.json
+++ b/package.json
@@ -41,6 +41,7 @@
"jwks-rsa": "^1.9.0",
"lru-cache": "^6.0.0",
"mysql2": "^2.1.0",
+ "next": "12.0.2",
"node-fetch": "^2.6.0",
"playwright-core": "^1.14.0",
"react": "^17.0.1",
@@ -49,23 +50,22 @@
"react-icons": "^4.2.0",
"react-router-dom": "^5.1.2",
"react-router-hash-link": "^2.4.3",
- "react-scripts": "^4.0.1",
"react-transition-group": "^4.3.0",
"react-virtualized": "^9.22.3",
"simple-markdown": "^0.7.2",
"tweenjs": "^1.0.2",
- "typescript": "^4.1.3",
+ "typescript": "^4.4.4",
"xmlrpc": "^1.3.2"
},
"scripts": {
"prepare": "husky install",
- "start": "TS_NODE_COMPILER=typescript-cached-transpile vercel dev",
- "dev": "yarn build-cached-data && REACT_APP_IMPRESS_LOG_IN_AS=$IMPRESS_LOG_IN_AS react-scripts start",
- "build": "yarn build-cached-data && react-scripts build",
+ "start": "TS_NODE_COMPILER=typescript-cached-transpile next start",
+ "dev": "yarn build-cached-data && REACT_APP_IMPRESS_LOG_IN_AS=$IMPRESS_LOG_IN_AS TS_NODE_COMPILER=typescript-cached-transpile next dev",
+ "build": "yarn build-cached-data && next build",
"vercel-build": "yum install libuuid-devel libmount-devel && cp /lib64/{libuuid,libmount,libblkid}.so.1 node_modules/canvas/build/Release/",
- "test": "react-scripts test --env=jsdom",
+ "test": "jest test --env=jsdom",
+ "lint": "next lint",
"cypress": "cypress open",
- "eject": "react-scripts eject",
"mysql": "mysql --host=impress.openneo.net --user=$(dotenv -p IMPRESS_MYSQL_USER) --password=$(dotenv -p IMPRESS_MYSQL_PASSWORD) --database=openneo_impress",
"mysql-dev": "mysql --host=localhost --user=impress_2020_dev --password=impress_2020_dev --database=impress_2020_dev",
"mysql-admin": "mysql --host=impress.openneo.net --user=matchu --password --database=openneo_impress",
@@ -78,38 +78,9 @@
"delete-user": "ts-node --compiler=typescript-cached-transpile --transpile-only -r dotenv/config scripts/delete-user.js",
"export-users-to-auth0": "ts-node --compiler=typescript-cached-transpile --transpile-only -r dotenv/config scripts/export-users-to-auth0.js"
},
- "eslintConfig": {
- "extends": [
- "react-app",
- "plugin:cypress/recommended"
- ],
- "rules": {
- "no-console": [
- "warn",
- {
- "allow": [
- "debug",
- "info",
- "warn",
- "error"
- ]
- }
- ],
- "import/first": "off",
- "import/no-webpack-loader-syntax": "off",
- "no-unused-vars": "off",
- "@typescript-eslint/no-unused-vars": [
- "warn",
- {
- "varsIgnorePattern": "^unused",
- "argsIgnorePattern": "^_+$|^e$"
- }
- ]
- }
- },
"lint-staged": {
"*.{js,ts,tsx}": [
- "eslint --max-warnings=0 --fix"
+ "next lint --max-warnings=0 --fix"
]
},
"browserslist": {
@@ -132,6 +103,8 @@
"cypress-plugin-snapshots": "^1.4.4",
"dotenv-cli": "^3.1.0",
"es6-promise-pool": "^2.5.0",
+ "eslint": "<8.0.0",
+ "eslint-config-next": "12.0.2",
"eslint-plugin-cypress": "^2.11.2",
"husky": "^6.0.0",
"imports-loader": "^1.2.0",
@@ -143,7 +116,6 @@
"react-is": "^16.13.1",
"ts-node": "^9.1.1",
"typescript-cached-transpile": "^0.0.6",
- "typescript-eslint": "^0.0.1-alpha.0",
- "vercel": "^21.2.3"
+ "typescript-eslint": "^0.0.1-alpha.0"
}
}
diff --git a/pages/[[...slug]].tsx b/pages/[[...slug]].tsx
new file mode 100644
index 0000000..8015020
--- /dev/null
+++ b/pages/[[...slug]].tsx
@@ -0,0 +1,15 @@
+// import NextIndexWrapper from '../src'
+
+// next/dynamic is used to prevent breaking incompatibilities
+// with SSR from window.SOME_VAR usage, if this is not used
+// next/dynamic can be removed to take advantage of SSR/prerendering
+import dynamic from "next/dynamic";
+
+// try changing "ssr" to true below to test for incompatibilities, if
+// no errors occur the above static import can be used instead and the
+// below removed
+const NextIndexWrapper = dynamic(() => import("../src"), { ssr: false });
+
+export default function Page(props) {
+ return ;
+}
diff --git a/pages/_app.tsx b/pages/_app.tsx
new file mode 100644
index 0000000..63943a4
--- /dev/null
+++ b/pages/_app.tsx
@@ -0,0 +1,14 @@
+import Head from 'next/head'
+
+export default function MyApp({ Component, pageProps}) {
+ return (
+ <>
+
+ Dress to Impress
+
+
+
+
+ >
+ )
+}
diff --git a/public/index.html b/pages/_document.tsx
similarity index 54%
rename from public/index.html
rename to pages/_document.tsx
index 2ac4164..d7890a9 100644
--- a/public/index.html
+++ b/pages/_document.tsx
@@ -1,28 +1,16 @@
-
-
-
-
-
-
-
-
-
- Dress to Impress
-
-
-
-
-
-
-
-
-
-
-
-
+ ` }} />
+
+
+
+
+
+
+
+
+