Compare commits

...

105 Commits

Author SHA1 Message Date
Pilou
1e233b6582 Merge pull request #541 from nhost/changeset-release/main
chore: update versions
2022-05-09 21:47:15 +02:00
github-actions[bot]
9ebd014287 chore: update versions 2022-05-09 19:32:16 +00:00
Pilou
6ce2534a36 Merge pull request #540 from nhost/dont-ignore-changeset
ci: trigger GH action even if comitted files are only in the `.changeset` directory
2022-05-09 21:31:23 +02:00
Pierre-Louis Mercereau
9f8e792f0d ci: trigger GH action even if comitted files are only in the .changeset directory 2022-05-09 21:29:29 +02:00
Szilárd Dóró
812d7a8eae Merge pull request #539 from nhost/chore/nhost-react-changesets
chore: @nhost/react release notes
2022-05-09 21:10:53 +02:00
Szilárd Dóró
2887ce0f82 @nhost/react release notes 2022-05-09 21:08:18 +02:00
Szilárd Dóró
8bdfb8fcac Merge pull request #538 from nhost/fix/xstate-react-version
fix: @xstate/react bump to support React 18
2022-05-09 21:00:54 +02:00
Szilárd Dóró
573436dd87 fix: @xstate/react version to support React 18 2022-05-09 20:48:47 +02:00
Szilárd Dóró
f58c2bb9ce Merge pull request #530 from nhost/changeset-release/main
chore: update versions
2022-05-09 14:10:10 +02:00
Pilou
41db6f613a Merge pull request #532 from nhost/contributors-readme-action-dGXEs_q2EP
contributors readme action update
2022-05-09 10:44:31 +02:00
github-actions[bot]
ee84bfa098 chore: update versions 2022-05-09 08:43:56 +00:00
github-actions[bot]
ad1b7b80e2 contrib-readme-action has updated readme 2022-05-09 08:42:51 +00:00
Pilou
3fcd345cff Merge pull request #528 from nhost/nextjs-example-email-sent-model
nextjs example: add an "email sent" modal to the magic-link page
2022-05-09 10:42:37 +02:00
Pierre-Louis Mercereau
43a3f1dd46 Merge remote-tracking branch 'origin/main' into nextjs-example-email-sent-model 2022-05-09 10:36:36 +02:00
Pilou
3ec745c91e Merge pull request #514 from MarcelloTheArcane/patch-1
Fix signIn/signUp typo
2022-05-09 10:34:09 +02:00
Pierre-Louis Mercereau
92deec4531 docs: docgen 2022-05-09 10:28:26 +02:00
Pierre-Louis Mercereau
c7fcc9fe82 Merge remote-tracking branch 'origin/main' into patch-1 2022-05-09 10:27:22 +02:00
Pilou
081377af6c Merge pull request #531 from nhost/clean-nextjs-example
refactor: stop using next-transpile-modules
2022-05-09 10:25:11 +02:00
Pierre-Louis Mercereau
23cb207afc style: typo 2022-05-09 10:23:59 +02:00
Pierre-Louis Mercereau
0f55f6db9b style: post feedback 2022-05-09 10:07:04 +02:00
Pierre-Louis Mercereau
7b16a8d790 Merge remote-tracking branch 'origin/main' into nextjs-example-email-sent-model 2022-05-09 10:05:00 +02:00
Pierre-Louis Mercereau
dca8233601 refactor: stop using next-transpile-modules
It is not required in the new monorepo setup
2022-05-09 10:03:27 +02:00
Pilou
a7535b260b Merge pull request #529 from nhost/contributors-readme-action-xXIDbIv_3L
contributors readme action update
2022-05-09 09:56:40 +02:00
github-actions[bot]
82520963f1 contrib-readme-action has updated readme 2022-05-09 07:48:43 +00:00
Szilárd Dóró
722abd9a19 Merge pull request #462 from nhost/monorepo-improvements
Monorepo improvements
2022-05-09 09:48:28 +02:00
Szilárd Dóró
2aff6c0b4e fix: lock file changes 2022-05-09 09:12:03 +02:00
Szilárd Dóró
e101915f60 Merge branch 'main' into monorepo-improvements 2022-05-09 09:09:35 +02:00
Pierre-Louis Mercereau
0195143fe1 fix: correct the way to monitor the email is awaiting verification 2022-05-08 19:08:53 +02:00
Pierre-Louis Mercereau
e362925041 feat: pull needsEmailVerification out of the signedIn state 2022-05-07 21:19:26 +02:00
Pierre-Louis Mercereau
b4f8c7457d docs: remove option that raises a React warning 2022-05-07 16:39:59 +02:00
Pierre-Louis Mercereau
84f1ab2f61 docs: add an "email sent" modal to the magic-link page 2022-05-07 16:35:41 +02:00
Pilou
dee93bb873 Merge pull request #526 from nhost/changeset-release/main
chore: update versions
2022-05-06 22:29:55 +02:00
github-actions[bot]
173b587802 chore: update versions 2022-05-06 20:24:16 +00:00
Pilou
30ef1660b4 Merge pull request #525 from nhost/fix/cookie-mode
fix: correct cookie storage type
2022-05-06 22:23:12 +02:00
Pierre-Louis Mercereau
a613aa9f0c refactor: unnest if block 2022-05-06 22:12:50 +02:00
Pierre-Louis Mercereau
3c03b9b46f refactor: remove dead code 2022-05-06 22:09:51 +02:00
Pierre-Louis Mercereau
65a3061146 fix: correct cookie storage type 2022-05-06 22:01:38 +02:00
Pilou
55864eac30 Merge pull request #522 from nhost/event-triggers-syntax-error
fixed syntax error in Event Triggers docs
2022-05-06 19:59:46 +02:00
Szilárd Dóró
28494d6c1f fixed syntax error in Event Triggers docs 2022-05-06 19:09:51 +02:00
Pilou
6777738c53 Merge pull request #519 from nhost/changeset-release/main
chore: update versions
2022-05-06 15:24:04 +02:00
Szilárd Dóró
34532b1a2f Merge branch 'main' into monorepo-improvements 2022-05-06 14:53:03 +02:00
github-actions[bot]
0d60693c27 chore: update versions 2022-05-06 11:43:21 +00:00
Pilou
c159c9c98c Merge pull request #518 from nhost/fix/refresh-token-load
fix: corrections and reshape the react-apollo example
2022-05-06 13:42:05 +02:00
Pierre-Louis Mercereau
58fa2a201c fix: corrections and reshape the react-apollo example 2022-05-06 12:55:17 +02:00
Johan Eliasson
db4607ccac Merge pull request #516 from nhost/docs-guides
Docs intro of Nhost
2022-05-06 11:50:05 +02:00
Johan Eliasson
95b14557a0 intro 2022-05-06 11:47:29 +02:00
Johan Eliasson
8b527d0fcb Merge pull request #445 from nhost/docs-guides
docs: intro, architecture and quickstarts
2022-05-06 11:43:41 +02:00
Szilárd Dóró
67f0450dac fixed issues with package references in Next.js docs 2022-05-06 11:01:53 +02:00
Pilou
fc50beec5e Merge pull request #513 from nhost/docs/clean-nextjs-intro
remove reference to useless component
2022-05-06 10:42:24 +02:00
Szilárd Dóró
584976d1ad added patch notes 2022-05-06 10:32:13 +02:00
Szilárd Dóró
509ed7d864 Merge branch 'main' into monorepo-improvements 2022-05-06 08:56:34 +02:00
Max Reynolds
71b92363b4 Fix signIn/signUp typo
I think the example should be for signUp here.
2022-05-06 06:25:20 +01:00
Pierre-Louis Mercereau
ed0de2d930 remove reference to useless component 2022-05-05 21:53:37 +02:00
Szilárd Dóró
bb548cd108 added support for TS package references, fixed CI 2022-05-05 14:15:20 +02:00
Szilárd Dóró
adb30c537f updated pnpm-lock.yaml file 2022-05-05 13:53:54 +02:00
Szilárd Dóró
d7d3e8f903 Merge branch 'main' into monorepo-improvements 2022-05-05 13:53:09 +02:00
Szilárd Dóró
8a4064e99f reverted next-transpile-modules change 2022-05-05 13:31:27 +02:00
Pilou
937e28116b Merge pull request #509 from nhost/monorepo-adjustments
Adjustments to the new monorepo setup
2022-05-05 13:27:57 +02:00
Pierre-Louis Mercereau
d885fe7b02 refactor: remove direct dependency to @nhost/core 2022-05-05 12:50:55 +02:00
Pierre-Louis Mercereau
b0d7217276 refactor: correct react-apollo-crm tsconfig 2022-05-05 12:38:49 +02:00
Pierre-Louis Mercereau
bfba4ae7ec refactor: make the react examples work inside the monorepo 2022-05-05 12:37:30 +02:00
Szilárd Dóró
44b12dc0a0 updated DEVELOPERS.md: fixed some typos, added development mode related info 2022-05-05 10:46:43 +02:00
Szilárd Dóró
bf6ee5d360 unified Prettier configuration, temporarily disabled import sorter 2022-05-05 10:28:11 +02:00
Szilárd Dóró
9f8bdb504d fixed UMD config 2022-05-04 16:02:13 +02:00
Szilárd Dóró
cd2594f66a fixed linter configs 2022-05-04 13:33:03 +02:00
Szilárd Dóró
c6a3e9f516 restructured project configuration, removed config copy script 2022-05-04 13:15:07 +02:00
Szilárd Dóró
1bfb1e6d10 Merge branch 'main' into monorepo-improvements 2022-05-04 11:13:13 +02:00
Szilárd Dóró
35fd7b1b7c added root lintstagedrc to gitignore 2022-05-04 11:10:01 +02:00
Szilárd Dóró
04c1ed6955 moved lintstagedrc and tsconfig files to .config folder 2022-05-04 11:02:40 +02:00
Szilárd Dóró
0c591daef4 fixed source code references of docs 2022-05-04 10:54:29 +02:00
Johan Eliasson
2192fdc92e change cta 2022-05-04 09:04:53 +02:00
Johan Eliasson
eec2601a3a architecture 2022-05-04 08:55:17 +02:00
Johan Eliasson
93eaa85b47 Merge branch 'main' into docs-guides 2022-05-04 07:40:53 +02:00
Szilárd Dóró
6f5729eb45 fixed Next.js example configuration 2022-05-03 15:54:21 +02:00
Szilárd Dóró
9bc447dbff fixed pnpm-lock 2022-05-03 15:51:02 +02:00
Szilárd Dóró
d2d0e7fced reverted package versions to leverage pnpm workspace features 2022-05-03 15:48:59 +02:00
Szilárd Dóró
0ad654226b fixed example projects, upgraded Vite to latest version 2022-05-03 13:54:32 +02:00
Szilárd Dóró
9d8f2dea22 UMD module name change for all packages 2022-05-03 11:16:33 +02:00
Szilárd Dóró
f3a44931a5 reverted unnecessary build command change 2022-05-03 08:35:51 +02:00
Szilárd Dóró
1c1656441b removed esbuild related packages from pnpm-lock 2022-05-02 17:00:42 +02:00
Szilárd Dóró
5f68f8fe31 fixed build warning caused by a missing global 2022-05-02 16:54:26 +02:00
Szilárd Dóró
961103d7a5 removed individual Vite configs, using unified 2022-05-02 16:27:48 +02:00
Szilárd Dóró
2bebab3f8e fixed ESLint ignore patterns to prevent lint error 2022-05-02 15:11:12 +02:00
Szilárd Dóró
0363abbbb1 fixed CI build and test step 2022-05-02 14:48:47 +02:00
Szilárd Dóró
2f3715d02a fixed linter errors 2022-05-02 14:05:26 +02:00
Szilárd Dóró
7c101e5226 removed unnecessary tsconfig, fixed an issue in NhostClient 2022-05-02 13:52:42 +02:00
Szilárd Dóró
ef943995e2 added umd folder to cached turborepo output 2022-05-02 13:30:56 +02:00
Szilárd Dóró
b6032508bc docs reference update, tsconfig fixes 2022-05-02 12:50:53 +02:00
Szilárd Dóró
a6b00294e7 Merge branch 'main' into monorepo-improvements 2022-05-02 12:17:52 +02:00
Szilárd Dóró
dbfc5ec220 added support for UMD build 2022-05-02 11:55:42 +02:00
Szilárd Dóró
6ffaf31af5 simplified tsconfig of React libs 2022-04-29 17:33:29 +02:00
Szilárd Dóró
8ec18157bb simplified Vite config of packages, improved TSConfig 2022-04-29 17:31:18 +02:00
Szilárd Dóró
175ab26e04 Merge branch 'main' into monorepo-improvements 2022-04-29 13:54:29 +02:00
Szilárd Dóró
eb2d064cbe restored removed docs pages 2022-04-29 13:38:53 +02:00
Szilárd Dóró
17d2c8c3d9 bump axios to 0.26.0 so that all packages use the same version 2022-04-29 13:32:54 +02:00
Szilárd Dóró
4e0aab1bb2 removed unnecessary @nhost/config package, excluded several packages from CI command 2022-04-29 12:33:53 +02:00
Szilárd Dóró
1bde3e6516 dependency optimization, build improvements 2022-04-28 14:48:50 +02:00
Szilárd Dóró
3674f11183 upgraded turborepo, updated turborepo commands 2022-04-28 13:31:48 +02:00
Szilárd Dóró
76b3cb4643 Merge branch 'main' into monorepo-improvements 2022-04-28 12:34:45 +02:00
Szilárd Dóró
556190dfc5 Merge branch 'main' into monorepo-improvements 2022-04-28 10:44:15 +02:00
Szilárd Dóró
69f3a84bf5 vite config to exclude external dependencies from bundle 2022-04-25 17:23:24 +02:00
Szilárd Dóró
16dcd314bb replaced esbuild with Vite, unified entry point and publish configuration of packages 2022-04-25 14:45:14 +02:00
Johan Eliasson
5a212aaa12 link fix 2022-04-22 22:34:45 +02:00
Johan Eliasson
79056d8b48 update 2022-04-22 22:30:02 +02:00
Johan Eliasson
f86883df88 new menu strucutre 2022-04-22 22:20:42 +02:00
216 changed files with 2974 additions and 2535 deletions

View File

@@ -1,50 +0,0 @@
{
"env": {
"browser": true,
"es6": true,
"node": true
},
"ignorePatterns": ["**/dist", "**/build", "**/.next"],
"extends": ["react-app", "plugin:react/recommended", "plugin:react-hooks/recommended"],
"parserOptions": {
// "project": "./tsconfig.json"
"project": ["packages/*/tsconfig.json", "examples/*/tsconfig.json"]
},
"plugins": ["react", "@typescript-eslint", "react-hooks", "simple-import-sort"],
"rules": {
"no-use-before-define": "off",
"simple-import-sort/exports": "error",
"simple-import-sort/imports": [
"error",
{
"groups": [
// Node.js builtins. You could also generate this regex if you use a `.js` config.
// For example: `^(${require("module").builtinModules.join("|")})(/|$)`
[
"^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)"
],
// Packages
["^\\w"],
// Internal packages.
["^(@|config/)(/*|$)"],
// Side effect imports.
["^\\u0000"],
// Parent imports. Put `..` last.
["^\\.\\.(?!/?$)", "^\\.\\./?$"],
// Other relative imports. Put same-folder imports and `.` last.
["^\\./(?=.*/)(?!/?$)", "^\\.(?!/?$)", "^\\./?$"],
// Style imports.
["^.+\\.s?css$"]
]
}
],
"import/no-anonymous-default-export": [
"error",
{
"allowArrowFunction": true,
"allowAnonymousFunction": true
}
]
}
}

View File

@@ -1,30 +0,0 @@
const esbuild = require('esbuild')
// Automatically exclude all node_modules from the bundled version
const { nodeExternalsPlugin } = require('esbuild-node-externals')
esbuild
.build({
entryPoints: ['./src/index.ts'],
outfile: 'dist/index.cjs.js',
bundle: true,
minify: true,
platform: 'node',
format: 'cjs',
sourcemap: true,
target: 'node14',
plugins: [nodeExternalsPlugin()]
})
.catch(() => process.exit(1))
esbuild
.build({
entryPoints: ['./src/index.ts'],
outfile: 'dist/index.es.js',
bundle: true,
minify: true,
platform: 'browser',
format: 'esm',
sourcemap: true,
target: 'es2019'
})
.catch(() => process.exit(1))

View File

@@ -1,7 +0,0 @@
const base = require('./jest.config.base.js')
module.exports = {
...base,
projects: ['<rootDir>/packages/*/jest.config.js'],
coverageDirectory: '<rootDir>/coverage/'
}

View File

@@ -9,6 +9,7 @@ on:
- 'examples/**'
- 'assets/**'
- '**.md'
- '!.changeset/**'
- 'LICENSE'
jobs:

10
.gitignore vendored
View File

@@ -19,6 +19,7 @@ logs/
# Directories
coverage/
dist/
umd/
lib/
node_modules/
tmp/
@@ -32,16 +33,15 @@ tmp/
*.map
todo.md
# Generated configs
# Config files that are not part of the repository root anymore. Should be removed in the future.
/.eslintignore
/.eslintrc
/.prettierignore
/prettier.config.js
/.eslintrc*
/vite.*.js
/jest.*.js
/*tsconfig*.json
/esbuild.*.js
!.config/**
!config/**
*.tsbuildinfo

View File

@@ -11,6 +11,11 @@ module.exports = {
tabWidth: 2,
trailingComma: 'none',
useTabs: false,
// TODO: add import sort configuration to match ESLint rules
// plugins: ['./node_modules/@trivago/prettier-plugin-sort-imports'],
// importOrderSeparation: true,
// importOrderSortSpecifiers: true
plugins: [],
overrides: [
{
files: ['*.json', '*.yaml'],
@@ -18,7 +23,5 @@ module.exports = {
useTabs: false
}
}
],
importOrderSeparation: true,
importOrderSortSpecifiers: true
]
}

View File

@@ -2,15 +2,17 @@
## Requirements
- We use [pnpm](https://pnpm.io/) as a package manager to fasten development and builds, and as a backbone to our monorepo. You have to make sure it is installed in your machine. There are [multiple ways to install it](https://pnpm.io/installation), but the easiest way is with `npm`:
- We use [pnpm](https://pnpm.io/) as a package manager to speed up development and builds, and as a basis for our monorepo. You need to make sure it's installed on your machine. There are [several ways to install it](https://pnpm.io/installation), but the easiest way is with `npm`:
```sh
npm install -g pnpm
$ npm install -g pnpm
```
- Our tests and examples are using the Nhost CLI to run the backend services locally. You can follow the instructions to install it in [our documentation](https://docs.nhost.io/get-started/cli-workflow/install-cli)
- Our tests and examples use the Nhost CLI, to run the backend services locally. You can follow the installation instructions in [our documentation](https://docs.nhost.io/get-started/cli-workflow/install-cli).
## Getting things ready
## Get started
### Installation
First, clone this repository:
@@ -21,57 +23,74 @@ git clone https://github.com/nhost/nhost
Then, install the dependencies with `pnpm`:
```sh
cd nhost
pnpm install
$ cd nhost
$ pnpm install
```
## Starting development from an example
### Development
Let's follow the instructions to start [react-apollo example](https://github.com/nhost/nhost/blob/main/examples/react-apollo/README.md).
Although package references are correctly updated on the fly for TypeScript, example projects won't
see the changes because they are depending on the build output. To fix this, you can run packages
in development mode.
## Running the documentation website locally
The easier way to contribute to our documentation is to move to the `docs` folder and follow the [instructions to start local development](https://github.com/nhost/nhost/blob/main/docs/README.md):
Running packages in development mode is as simple as:
```sh
cd docs
# not necessary step if you've done this step already anywhere in the repository
pnpm install
pnpm start
$ pnpm dev
```
## Testing
Our packages are linked together using [PNPM's workspace](https://pnpm.io/workspaces) feature. Vite automatically detects changes in the dependencies and rebuilds everything, so that the changes are immediately reflected in the other packages.
In order to run tests, the Nhost testing backend should run locally. You can start it in from a separate terminal:
### Use examples
Examples are a great way to test your changes in practice. Make sure you've `pnpm dev` running in your terminal and then run an example.
Let's follow the instructions to run [react-apollo example](https://github.com/nhost/nhost/blob/main/examples/react-apollo/README.md).
## Run the documentation website locally
The easier way to contribute to our documentation is to go to the `docs` folder and follow the [instructions to start local development](https://github.com/nhost/nhost/blob/main/docs/README.md):
```sh
cd examples/testing-project
nhost -d
$ cd docs
# not necessary if you've already done this step somewhere in the repository
$ pnpm install
$ pnpm start
```
Once Nhost started locally, you can run the tests from the root folder of the repository with the following command:
## Run test suites
In order to run tests, the Nhost testing backend should be running locally. You can run it from a separate terminal:
```sh
pnpm test
$ cd examples/testing-project
$ nhost -d
```
Once Nhost is started locally, you can run the tests with the following command from the repository root:
```sh
$ pnpm test
```
## Changesets
If you made some changes in the packages, you will have to describe these changes so they will be taken into account in the next release.
We are using [changesets](https://github.com/changesets/changesets) to support our version/publish workflows. When submitting a pull request, a bot will check if some changesets are present, and if not, will guide you to add them.
If you've made changes to the packages, you must describe those changes so that they can be reflected in the next release.
We use [changesets](https://github.com/changesets/changesets) to support our versioning and release workflows. When you submit a pull request, a bot checks if some changesets are present, and if not, it directs you to add them.
The most comprehensive way to add a changeset is to run the following command from the root directory of the repository:
The most comprehensive way to add a changeset is to run the following command in the repository root:
```sh
pnpm changeset
$ pnpm changeset
```
This will generate a file in the `.changeset` directory. You can edit it to give further details about the change you just made.
You can have a look at the changesets documentation on [how to add a changeset](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md)
This will create a file in the `.changeset` directory. You can edit it to give more details about the change you just made.
## Commiting changes
You can take a look at the changeset documentation: [How to add a changeset](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md).
You may notice `git commit` takes a few seconds to run. We set a commit hook that scan the changes in the code, automatically generates the documentation from the inline [TSDoc](https://tsdoc.org/) annotations, and add these generated documentation files to the commit. They will automatically update the [reference documentation](https://docs.nhost.io/reference).
## Committing changes
You'll notice that `git commit` takes a few seconds to run. We set a commit hook that scans the changes in the code, automatically generates documentation from the inline [TSDoc](https://tsdoc.org/) annotations, and adds these generated documentation files to the commit. They automatically update the [reference documentation](https://docs.nhost.io/reference).
<!-- ## Good practices
- lint

View File

@@ -134,13 +134,6 @@ Here are some ways of contributing to making Nhost better:
<sub><b>Pilou</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/elitan">
<img src="https://avatars.githubusercontent.com/u/331818?v=4" width="100;" alt="elitan"/>
<br />
<sub><b>Johan Eliasson</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/szilarddoro">
<img src="https://avatars.githubusercontent.com/u/310881?v=4" width="100;" alt="szilarddoro"/>
@@ -148,6 +141,13 @@ Here are some ways of contributing to making Nhost better:
<sub><b>Szilárd Dóró</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/elitan">
<img src="https://avatars.githubusercontent.com/u/331818?v=4" width="100;" alt="elitan"/>
<br />
<sub><b>Johan Eliasson</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/nunopato">
<img src="https://avatars.githubusercontent.com/u/1523504?v=4" width="100;" alt="nunopato"/>
@@ -320,6 +320,13 @@ Here are some ways of contributing to making Nhost better:
<sub><b>Jacob Duval</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/MarcelloTheArcane">
<img src="https://avatars.githubusercontent.com/u/21159570?v=4" width="100;" alt="MarcelloTheArcane"/>
<br />
<sub><b>Max Reynolds</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/ghoshnirmalya">
<img src="https://avatars.githubusercontent.com/u/6391763?v=4" width="100;" alt="ghoshnirmalya"/>
@@ -333,7 +340,8 @@ Here are some ways of contributing to making Nhost better:
<br />
<sub><b>Quentin Decré</b></sub>
</a>
</td>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/komninoschat">
<img src="https://avatars.githubusercontent.com/u/29049104?v=4" width="100;" alt="komninoschat"/>

65
config/.eslintrc.js Normal file
View File

@@ -0,0 +1,65 @@
module.exports = {
env: {
browser: true,
es6: true,
node: true
},
ignorePatterns: [
'dist',
'umd',
'build',
'.next',
'node_modules',
'tsup.config.ts',
'__tests__',
'__mocks__',
'*.test.ts',
'*.test.tsx',
'*.spec.ts',
'*.spec.tsx',
'tests/**/*.ts',
'tests/**/*.d.ts'
],
extends: ['react-app', 'plugin:react/recommended', 'plugin:react-hooks/recommended'],
parserOptions: {
ecmaVersion: 2020,
sourceType: 'module'
},
plugins: ['react', '@typescript-eslint', 'react-hooks', 'simple-import-sort'],
rules: {
'react/prop-types': 'off',
'no-use-before-define': 'off',
'simple-import-sort/exports': 'error',
'simple-import-sort/imports': [
'error',
{
groups: [
// Node.js builtins. You could also generate this regex if you use a `.js` config.
// For example: `^(${require("module").builtinModules.join("|")})(/|$)`
[
'^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib|freelist|v8|process|async_hooks|http2|perf_hooks)(/.*|$)'
],
// Packages
['^\\w'],
// Internal packages.
['^(@|config/)(/*|$)'],
// Side effect imports.
['^\\u0000'],
// Parent imports. Put `..` last.
['^\\.\\.(?!/?$)', '^\\.\\./?$'],
// Other relative imports. Put same-folder imports and `.` last.
['^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'],
// Style imports.
['^.+\\.s?css$']
]
}
],
'import/no-anonymous-default-export': [
'error',
{
allowArrowFunction: true,
allowAnonymousFunction: true
}
]
}
}

View File

@@ -7,7 +7,6 @@ module.exports = {
testRegex: '(/tests/.*.(test|spec)).(jsx?|tsx?)$',
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
collectCoverage: true,
// coveragePathIgnorePatterns: ['(tests/.*.mock).(jsx?|tsx?)$'],
verbose: true,
testTimeout: 30000,
globals: {

15
config/jest.config.js Normal file
View File

@@ -0,0 +1,15 @@
module.exports = {
rootDir: process.cwd(),
preset: 'ts-jest',
collectCoverage: true,
coverageProvider: 'v8',
coverageDirectory: '<rootDir>/coverage',
clearMocks: true,
verbose: true,
testTimeout: 30000,
globals: {
'ts-jest': {
isolatedModules: true
}
}
}

View File

@@ -0,0 +1,8 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "React Library",
"extends": "./tsconfig.base.json",
"compilerOptions": {
"jsx": "preserve"
}
}

56
config/tsconfig.base.json Normal file
View File

@@ -0,0 +1,56 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"display": "Default",
"compilerOptions": {
"composite": false,
"declaration": true,
"declarationMap": true,
"strict": true,
"isolatedModules": true,
"forceConsistentCasingInFileNames": true,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"moduleResolution": "node",
"target": "ES6",
"module": "CommonJS",
"lib": [
"es5",
"dom",
"es2015.promise",
"es2015.symbol",
"es2015.iterable",
"es2015.collection",
"es2015.symbol.wellknown",
"es2015.core",
"es2017.object",
"es2017.string"
],
"resolveJsonModule": true,
"esModuleInterop": true,
"sourceMap": true,
"types": ["node"],
"typeRoots": [
"./node_modules/@types", "**/*/dist", "**/*/build", "**/*/.next", "**/*/umd"
],
"paths": {
"@nhost/apollo": ["../packages/apollo/src/index.ts"],
"@nhost/core": ["../packages/core/src/index.ts"],
"@nhost/docgen": ["../packages/docgen/src/index.ts"],
"@nhost/hasura-auth-js": ["../packages/hasura-auth-js/src/index.ts"],
"@nhost/hasura-storage-js": ["../packages/hasura-storage-js/src/index.ts"],
"@nhost/nextjs": ["../packages/nextjs/src/index.ts"],
"@nhost/nhost-js": ["../packages/nhost-js/src/index.ts"],
"@nhost/react": ["../packages/react/src/index.ts"],
"@nhost/react-apollo": ["../packages/react-apollo/src/index.ts"],
"@nhost/react-auth": ["../packages/react-auth/src/index.ts"]
}
},
"exclude": [
"node_modules",
"**/*/dist",
"**/*/build",
"**/*/.next",
"**/*/__tests__",
"**/*/__mocks__"
]
}

View File

@@ -5,20 +5,19 @@ import { defineConfig } from 'vite'
import dts from 'vite-plugin-dts'
import tsconfigPaths from 'vite-tsconfig-paths'
import react from '@vitejs/plugin-react'
const PWD = process.env.PWD
const pkg = require(path.join(PWD, 'package.json'))
const tsEntry = path.resolve(PWD, 'src/index.ts')
const entry = fs.existsSync(tsEntry) ? tsEntry : tsEntry.replace('.ts', '.tsx')
/**
* @type {import('vite').UserConfig}
*/
const deps = [...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies))]
export default defineConfig({
optimizeDeps: {
include: ['react/jsx-runtime']
},
plugins: [
react(),
tsconfigPaths(),
dts({
exclude: ['**/*.spec.ts', '**/*.test.ts', '**/tests/**'],
@@ -32,16 +31,29 @@ export default defineConfig({
})
],
build: {
sourcemap: true,
lib: {
entry,
name: pkg.name,
fileName: 'index'
fileName: 'index',
formats: ['cjs', 'es']
},
rollupOptions: {
external: ['react', '@nhost/react'],
external: (id) => deps.some((dep) => id.startsWith(dep)),
output: {
globals: {
react: 'react',
'graphql/language/printer': 'graphql/language/printer',
'@apollo/client': '@apollo/client',
'@apollo/client/link/context': '@apollo/client/link/context',
'@apollo/client/link/subscriptions': '@apollo/client/link/subscriptions',
'@apollo/client/utilities': '@apollo/client/utilities',
'graphql-ws': 'graphql-ws',
xstate: 'xstate',
axios: 'axios',
'js-cookie': 'Cookies',
react: 'React',
'react-dom': 'ReactDOM',
'react/jsx-runtime': '_jsx',
'@nhost/react': '@nhost/react'
}
}

View File

@@ -0,0 +1,13 @@
import { defineConfig } from 'vite'
import viteLibConfig from './vite.lib.config'
export default defineConfig({
...viteLibConfig,
build: {
...viteLibConfig.build,
watch: {
buildDelay: 500
}
}
})

View File

@@ -0,0 +1,42 @@
import fs from 'fs'
import path from 'path'
import { defineConfig } from 'vite'
import dts from 'vite-plugin-dts'
import tsconfigPaths from 'vite-tsconfig-paths'
import baseLibConfig from './vite.lib.config'
const PWD = process.env.PWD
const pkg = require(path.join(PWD, 'package.json'))
const deps = [...Object.keys(Object.assign({}, pkg.peerDependencies))]
export default defineConfig({
plugins: [
tsconfigPaths(),
dts({
exclude: ['**/*.spec.ts', '**/*.test.ts', '**/tests/**'],
afterBuild: () => {
const types = fs.readdirSync(path.join(PWD, 'umd/src'))
types.forEach((file) => {
fs.renameSync(path.join(PWD, 'umd/src', file), path.join(PWD, 'umd', file))
})
fs.rmdirSync(path.join(PWD, 'umd/src'))
}
})
],
build: {
...(baseLibConfig.build || {}),
outDir: 'umd',
lib: {
...(baseLibConfig.build?.lib || {}),
fileName: pkg.name.replace(/@nhost\//g, ''),
formats: ['umd']
},
rollupOptions: {
...(baseLibConfig.build?.rollupOptions || {}),
external: (id) => deps.some((dep) => id.startsWith(dep))
}
}
})

View File

@@ -0,0 +1,8 @@
import react from '@vitejs/plugin-react'
import { defineConfig } from 'vite'
import baseLibConfig from './vite.lib.config'
export default defineConfig({
...baseLibConfig,
plugins: [react(), ...baseLibConfig.plugins]
})

View File

@@ -0,0 +1,12 @@
import { defineConfig } from 'vite'
import viteReactConfig from './vite.react.config'
export default defineConfig({
...viteReactConfig,
build: {
...viteReactConfig.build,
watch: {
buildDelay: 500
}
}
})

View File

@@ -0,0 +1,45 @@
import fs from 'fs'
import path from 'path'
import { defineConfig } from 'vite'
import dts from 'vite-plugin-dts'
import tsconfigPaths from 'vite-tsconfig-paths'
import react from '@vitejs/plugin-react'
import baseLibConfig from './vite.lib.config'
const PWD = process.env.PWD
const pkg = require(path.join(PWD, 'package.json'))
const deps = [...Object.keys(Object.assign({}, pkg.peerDependencies))]
export default defineConfig({
plugins: [
react(),
tsconfigPaths(),
dts({
exclude: ['**/*.spec.ts', '**/*.test.ts', '**/tests/**'],
afterBuild: () => {
const types = fs.readdirSync(path.join(PWD, 'umd/src'))
types.forEach((file) => {
fs.renameSync(path.join(PWD, 'umd/src', file), path.join(PWD, 'umd', file))
})
fs.rmdirSync(path.join(PWD, 'umd/src'))
}
})
],
build: {
...(baseLibConfig.build || {}),
outDir: 'umd',
lib: {
...(baseLibConfig.build?.lib || {}),
fileName: pkg.name.replace(/@nhost\//g, ''),
formats: ['umd']
},
rollupOptions: {
...(baseLibConfig.build?.rollupOptions || {}),
external: (id) => deps.some((dep) => id.startsWith(dep))
}
}
})

View File

@@ -1,11 +0,0 @@
{
"singleQuote": true,
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
"trailingComma": "all",
"bracketSpacing": true,
"bracketSameLine": false,
"endOfLine": "auto",
"semi": true
}

9
docs/CHANGELOG.md Normal file
View File

@@ -0,0 +1,9 @@
# @nhost/docs
## 0.0.1
### Patch Changes
- 584976d: - publishable directory structure changes (ESM, CJS and UMD included in the output)
- build system improvements
- fixed some bundling concerns (https://github.com/nhost/nhost/issues/428)

View File

@@ -1,5 +0,0 @@
{
"label": "The Nhost Platform",
"position": 1,
"link": { "type": "generated-index", "slug": "/platform" }
}

View File

@@ -1,5 +1,4 @@
{
"label": "Authentication",
"position": 4,
"link": { "id": "platform/authentication/index", "type": "doc" }
"position": 6
}

View File

@@ -1,6 +1,6 @@
---
title: 'Nhost CLI'
sidebar_position: 3
title: 'CLI'
sidebar_position: 11
---
import Tabs from '@theme/Tabs';

View File

@@ -1,4 +1,4 @@
{
"label": "Database",
"position": 2
"position": 4
}

View File

@@ -1,6 +1,6 @@
---
title: 'Environment variables'
sidebar_position: 1
sidebar_position: 9
---
Environment variables are key-value pairs configured outside your source code. They are used to store environment-specific values such as API keys.

View File

@@ -1,6 +1,6 @@
---
title: 'GitHub integration'
sidebar_position: 2
sidebar_position: 10
---
You can connect your Nhost app to a GitHub repository. When you do this, any updates you push to your code will automatically be deployed.
@@ -21,7 +21,7 @@ Specifically, the following will be deployed:
## Workflow
Create a new Nhost app. Then use [Nhost CLI](/platform/nhost/local-development) to initialize your Nhost app locally.
Create a new Nhost app. Then use [Nhost CLI](/platform/cli) to initialize your Nhost app locally.
The workflow is as follows:

View File

@@ -1,4 +1,4 @@
{
"label": "GraphQL",
"position": 3
"position": 5
}

View File

@@ -1,11 +0,0 @@
---
title: 'The Nhost Platform'
sidebar_position: 1
---
- [Database](/platform/database)
- [GraphQL](/platform/graphql)
- [Authentication](/platform/authentication)
- [Storage](/platform/storage)
- [Serverless Functions](/platform/serverless-functions)
- [Nhost](/platform/nhost)

View File

@@ -0,0 +1,28 @@
---
title: 'Introduction to Nhost'
sidebar_label: Introduction
sidebar_position: 1
---
Nhost is the open source GraphQL backend (Firebase Alternative) and a development platform. Nhost is doing for the backend, what [Netlify](https://netlify.com/) and [Vercel](https://vercel.com/) are doing for the frontend.
We provide a modern backend with the general building blocks required to build fantastic digital products.
We make it easy to build and deploy this backend using our platform that takes care of configuration, security, and performance. Things just works and scale automatically so you can focus on your product and on your business.
## Quickstart
Get started quickly by following one of our quickstart guides:
- [Next.js](/platform/quickstarts/nextjs)
- [React](/platform/quickstarts/react)
## Products and features
Learn more about the product and features of Nhost.
- [Database](/platform/database)
- [GraphQL](/platform/graphql)
- [Authentication](/platform/authentication)
- [Storage](/platform/storage)
- [Serverless Functions](/platform/serverless-functions)

View File

@@ -1,4 +0,0 @@
{
"label": "Nhost",
"position": 7
}

View File

@@ -1,9 +0,0 @@
---
title: 'Overview'
---
Documentation for other platform features:
- [Environment variables](/platform/nhost/environment-variables)
- [GitHub integration](/platform/nhost/github-integration)
- [Local development](/platform/nhost/local-development)

View File

@@ -0,0 +1,5 @@
{
"label": "Overview",
"position": 2,
"collapsed": false
}

View File

@@ -0,0 +1,30 @@
---
title: 'Architecture'
sidebar_position: 2
---
Nhost is a backend as a service built with open source tools to provide developers the general building blocks required to build fantastic digital apps and products.
Here's a diagram of the Nhost stack on a high level:
![Nhost Architecture Diagram](/img/architecture/nhost-diagram.png)
As you see in the image above, Nhost provides endpoints for:
- GraphQL (`/graphql`)
- Authentication (`/auth`)
- Storage (`/storage`)
- Functions (`/functions`)
Data is stored in Postgres and files are stored in S3.
## Open Source
The open source tools used for the full Nhost stack are:
- Database: [Postgres](https://www.postgresql.org/)
- S3: [Minio](https://github.com/minio/minio)
- GraphQL: [Hasura](https://github.com/hasura/graphql-engine)
- Authentication: [Hasura Auth](https://github.com/nhost/hasura-auth)
- Storage: [Hasura Storage](https://github.com/nhost/hasura-storage)
- Functions: [Node.js](https://nodejs.org/en/)

View File

@@ -0,0 +1,5 @@
{
"label": "Quickstarts",
"position": 3,
"collapsed": false
}

View File

@@ -0,0 +1,8 @@
---
title: 'Quickstart: Next.js'
sidebar_position: 2
---
## Introduction
This is a quickstart guide for React with Nhost.

View File

@@ -0,0 +1,8 @@
---
title: 'Quickstart: React'
sidebar_position: 1
---
## Introduction
This is a quickstart guide for React with Nhost.

View File

@@ -1,4 +1,4 @@
{
"label": "Serverless Functions",
"position": 6
"position": 8
}

View File

@@ -15,7 +15,7 @@ Event triggers are managed in Hasura. Go to Hasura, then select **Events** in th
![Creating event trigger in Hasura](/img/platform/hasura-create-event-trigger.png)
Nhost's [environment variables](/platform/nhost/environment-variables) can be used in event trigger headers. For example, you can attach `NHOST_WEBHOOK_SECRET` to an outgoing webhook here.
Nhost's [environment variables](/platform/environment-variables) can be used in event trigger headers. For example, you can attach `NHOST_WEBHOOK_SECRET` to an outgoing webhook here.
---
@@ -43,7 +43,7 @@ In your serverless function, you need to make sure the request actually comes fr
- Check the header in the serverless function. It should match the environment variable `NHOST_WEBHOOK_SECRET`.
```js
export default function async handler(req, res) {
export default async function handler(req, res) {
// Check webhook secret to make sure the request is valid
if (

View File

@@ -1,4 +1,4 @@
{
"label": "Storage",
"position": 5
"position": 7
}

View File

@@ -12,7 +12,7 @@ custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-j
Use `signUp` to sign up users using email an password.
```ts
auth.signIn({ email, password }) // email password
auth.signUp({ email, password }) // email password
```
## Parameters

View File

@@ -4,7 +4,7 @@ title: signIn()
sidebar_label: signIn()
slug: /reference/javascript/auth/sign-in
description: Use `signIn` to sign in users using email and password, passwordless (email or sms) or an external provider. `signIn` can be used in various ways depending on the parameters.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L166
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L171
---
# `signIn()`

View File

@@ -4,7 +4,7 @@ title: signOut()
sidebar_label: signOut()
slug: /reference/javascript/auth/sign-out
description: Use `signOut` to sign out a user
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L315
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L343
---
# `signOut()`

View File

@@ -4,7 +4,7 @@ title: resetPassword()
sidebar_label: resetPassword()
slug: /reference/javascript/auth/reset-password
description: Use `resetPassword` to reset a user's password.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L342
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L370
---
# `resetPassword()`

View File

@@ -4,7 +4,7 @@ title: changePassword()
sidebar_label: changePassword()
slug: /reference/javascript/auth/change-password
description: Use `changePassword` to change a user's password.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L367
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L395
---
# `changePassword()`

View File

@@ -4,7 +4,7 @@ title: sendVerificationEmail()
sidebar_label: sendVerificationEmail()
slug: /reference/javascript/auth/send-verification-email
description: Use `sendVerificationEmail` to send a verification email to the specified email.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L393
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L421
---
# `sendVerificationEmail()`

View File

@@ -4,7 +4,7 @@ title: changeEmail()
sidebar_label: changeEmail()
slug: /reference/javascript/auth/change-email
description: Use `changeEmail` to change a user's email
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L420
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L448
---
# `changeEmail()`

View File

@@ -4,7 +4,7 @@ title: deanonymize()
sidebar_label: deanonymize()
slug: /reference/javascript/auth/deanonymize
description: Use `deanonymize` to deanonymize a user
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L445
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L473
---
# `deanonymize()`

View File

@@ -4,7 +4,7 @@ title: onTokenChanged()
sidebar_label: onTokenChanged()
slug: /reference/javascript/auth/on-token-changed
description: Use `onTokenChanged` to add a custom function that will trigger whenever the access and refresh token is changed.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L479
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L507
---
# `onTokenChanged()`

View File

@@ -4,7 +4,7 @@ title: onAuthStateChanged()
sidebar_label: onAuthStateChanged()
slug: /reference/javascript/auth/on-auth-state-changed
description: Use `onAuthStateChanged` to add a custom function that will trigger whenever the state of the user changed. Ex from signed in to signed out or vice versa.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L516
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L544
---
# `onAuthStateChanged()`

View File

@@ -4,7 +4,7 @@ title: isAuthenticated()
sidebar_label: isAuthenticated()
slug: /reference/javascript/auth/is-authenticated
description: Use `isAuthenticated` to check if the user is authenticated or not.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L556
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L584
---
# `isAuthenticated()`
@@ -12,9 +12,9 @@ custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-j
Use `isAuthenticated` to check if the user is authenticated or not.
```ts
const = auth.isAuthenticated();
const isAuthenticated = auth.isAuthenticated()
if (authenticated) {
console.log('User is authenticated');
if (isAuthenticated) {
console.log('User is authenticated')
}
```

View File

@@ -4,7 +4,7 @@ title: isAuthenticatedAsync()
sidebar_label: isAuthenticatedAsync()
slug: /reference/javascript/auth/is-authenticated-async
description: Use `isAuthenticatedAsync` to wait and check if the user is authenticated or not.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L574
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L602
---
# `isAuthenticatedAsync()`
@@ -12,9 +12,9 @@ custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-j
Use `isAuthenticatedAsync` to wait and check if the user is authenticated or not.
```ts
const isAuthenticated = awiat auth.isAuthenticatedAsync();
const isAuthenticated = await auth.isAuthenticatedAsync()
if (isAuthenticated) {
console.log('User is authenticated');
console.log('User is authenticated')
}
```

View File

@@ -4,7 +4,7 @@ title: getAuthenticationStatus()
sidebar_label: getAuthenticationStatus()
slug: /reference/javascript/auth/get-authentication-status
description: Use `getAuthenticationStatus` to get the authentication status of the user.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L601
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L629
---
# `getAuthenticationStatus()`

View File

@@ -5,7 +5,7 @@ sidebar_label: getJWTToken()
slug: /reference/javascript/auth/get-jwt-token
sidebar_class_name: deprecated
description: No description provided.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L615
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L643
---
# `getJWTToken()`

View File

@@ -4,7 +4,7 @@ title: getAccessToken()
sidebar_label: getAccessToken()
slug: /reference/javascript/auth/get-access-token
description: Use `getAccessToken` to get the logged in user's access token.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L629
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L657
---
# `getAccessToken()`

View File

@@ -4,7 +4,7 @@ title: getDecodedAccessToken()
sidebar_label: getDecodedAccessToken()
slug: /reference/javascript/auth/get-decoded-access-token
description: Decode the current decoded access token (JWT), or return `null` if the user is not authenticated (no token)
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L637
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L665
---
# `getDecodedAccessToken()`

View File

@@ -4,7 +4,7 @@ title: getHasuraClaims()
sidebar_label: getHasuraClaims()
slug: /reference/javascript/auth/get-hasura-claims
description: Decode the Hasura claims from the current access token (JWT) located in the `https://hasura.io/jwt/claims` namespace, or return `null` if the user is not authenticated (no token)
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L647
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L675
---
# `getHasuraClaims()`

View File

@@ -4,7 +4,7 @@ title: getHasuraClaim()
sidebar_label: getHasuraClaim()
slug: /reference/javascript/auth/get-hasura-claim
description: Get the value of a given Hasura claim in the current access token (JWT). Returns null if the user is not authenticated, or if the claim is not in the token. Return `null` if the user is not authenticated (no token)
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L657
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L685
---
# `getHasuraClaim()`

View File

@@ -4,7 +4,7 @@ title: refreshSession()
sidebar_label: refreshSession()
slug: /reference/javascript/auth/refresh-session
description: Use `refreshSession()` to refresh the current session or refresh the session with an provided `refreshToken`.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L676
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L704
---
# `refreshSession()`

View File

@@ -4,7 +4,7 @@ title: getSession()
sidebar_label: getSession()
slug: /reference/javascript/auth/get-session
description: Use `getSession()` to get the current session.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L719
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L747
---
# `getSession()`

View File

@@ -4,7 +4,7 @@ title: getUser()
sidebar_label: getUser()
slug: /reference/javascript/auth/get-user
description: Use `getUser()` to get the current user.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L734
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/hasura-auth-js/src/hasura-auth-client.ts#L762
---
# `getUser()`

View File

@@ -4,7 +4,7 @@ title: NhostClient
sidebar_label: NhostClient
description: No description provided.
slug: /reference/nextjs/nhost-client
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/nextjs/src/index.ts#L16
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/nextjs/src/index.ts#L17
---
# `NhostClient`

View File

@@ -4,7 +4,7 @@ title: useProviderLink()
sidebar_label: useProviderLink()
slug: /reference/nextjs/use-provider-link
description: Hook that returns OAuth provider URLs
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L393
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L450
---
# `useProviderLink()`

View File

@@ -4,7 +4,7 @@ title: useSignInAnonymous()
sidebar_label: useSignInAnonymous()
slug: /reference/nextjs/use-sign-in-anonymous
description: No description provided.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L346
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L370
---
# `useSignInAnonymous()`

View File

@@ -4,7 +4,7 @@ title: useSignInEmailPassword()
sidebar_label: useSignInEmailPassword()
slug: /reference/nextjs/use-sign-in-email-password
description: Email and Password Sign-In
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L114
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L116
---
# `useSignInEmailPassword()`

View File

@@ -4,7 +4,7 @@ title: useSignInEmailPasswordless()
sidebar_label: useSignInEmailPasswordless()
slug: /reference/nextjs/use-sign-in-email-passwordless
description: Passwordless email authentication hook
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L284
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L292
---
# `useSignInEmailPasswordless()`

View File

@@ -4,7 +4,7 @@ title: NhostNextClientConstructorParams
sidebar_label: NhostNextClientConstructorParams
description: No description provided.
displayed_sidebar: referenceSidebar
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/nextjs/src/index.ts#L10
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/nextjs/src/index.ts#L11
---
# `NhostNextClientConstructorParams`

View File

@@ -17,6 +17,13 @@ custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/pro
---
**<span className="parameter-name">initial</span>** <span className="optional-status">optional</span> `NhostSession`
**<span className="parameter-name">initial</span>** <span className="optional-status">optional</span> [`NhostSession`](/reference/docgen/nextjs/types/nhost-session)
| Property | Type | Required | Notes |
| :------------------------------------------------------------------------------------------------------- | :------- | :------: | :---- |
| <span className="parameter-name"><span className="light-grey">initial.</span>user</span> | `User` | ✔️ | |
| <span className="parameter-name"><span className="light-grey">initial.</span>refreshToken</span> | `string` | ✔️ | |
| <span className="parameter-name"><span className="light-grey">initial.</span>accessTokenExpiresIn</span> | `number` | ✔️ | |
| <span className="parameter-name"><span className="light-grey">initial.</span>accessToken</span> | `string` | ✔️ | |
---

View File

@@ -0,0 +1,30 @@
---
# ⚠️ AUTO-GENERATED CONTENT. DO NOT EDIT THIS FILE DIRECTLY! ⚠️
title: NhostSession
sidebar_label: NhostSession
description: No description provided.
displayed_sidebar: referenceSidebar
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/core/src/types.ts#L126
---
# `NhostSession`
## Parameters
---
**<span className="parameter-name">accessToken</span>** <span className="optional-status">required</span> `string`
---
**<span className="parameter-name">accessTokenExpiresIn</span>** <span className="optional-status">required</span> `number`
---
**<span className="parameter-name">refreshToken</span>** <span className="optional-status">required</span> `string`
---
**<span className="parameter-name">user</span>** <span className="optional-status">required</span> `User`
---

View File

@@ -4,7 +4,7 @@ title: useProviderLink()
sidebar_label: useProviderLink()
slug: /reference/react/use-provider-link
description: Hook that returns OAuth provider URLs
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L393
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L450
---
# `useProviderLink()`

View File

@@ -4,7 +4,7 @@ title: useSignInAnonymous()
sidebar_label: useSignInAnonymous()
slug: /reference/react/use-sign-in-anonymous
description: No description provided.
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L346
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L370
---
# `useSignInAnonymous()`

View File

@@ -4,7 +4,7 @@ title: useSignInEmailPassword()
sidebar_label: useSignInEmailPassword()
slug: /reference/react/use-sign-in-email-password
description: Email and Password Sign-In
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L114
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L116
---
# `useSignInEmailPassword()`

View File

@@ -4,7 +4,7 @@ title: useSignInEmailPasswordless()
sidebar_label: useSignInEmailPasswordless()
slug: /reference/react/use-sign-in-email-passwordless
description: Passwordless email authentication hook
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L284
custom_edit_url: https://github.com/nhost/nhost/edit/main/packages/react/src/hooks/authentication.ts#L292
---
# `useSignInEmailPasswordless()`

View File

@@ -38,17 +38,12 @@ import type { AppProps } from 'next/app';
import { NhostClient, NhostNextProvider } from '@nhost/nextjs';
import Header from '../components/Header';
const nhost = new NhostClient({ backendUrl: 'my-app.nhost.run' });
function MyApp({ Component, pageProps }: AppProps) {
return (
<NhostNextProvider nhost={nhost} initial={pageProps.nhostSession}>
<div>
<Header />
<Component {...pageProps} />
</div>
<Component {...pageProps} />
</NhostNextProvider>
);
}

View File

@@ -94,7 +94,7 @@ const config = {
href: 'https://app.nhost.io',
className: 'header-get-started-link',
position: 'right',
label: 'Create an app',
label: 'Get started',
},
],
},

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/docs",
"version": "0.0.0",
"version": "0.0.1",
"private": true,
"scripts": {
"docusaurus": "docusaurus",

View File

@@ -156,6 +156,10 @@
color: var(--ifm-footer-link-hover-color);
}
article {
padding: 0 20px;
}
.header-github-link:hover {
opacity: 0.6;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@@ -0,0 +1,10 @@
module.exports = {
extends: [
'../../config/.eslintrc.js',
'plugin:react/jsx-runtime',
'plugin:@next/next/recommended'
],
rules: {
'react/react-in-jsx-scope': 'off'
}
}

View File

@@ -1,7 +0,0 @@
{
"extends": ["plugin:@next/next/recommended"],
"rules": {
"react/react-in-jsx-scope": "off",
"react/prop-types": "off"
}
}

View File

@@ -1,5 +1,4 @@
import Link from 'next/link'
import React from 'react'
import { Button, ButtonVariant } from '@mantine/core'

View File

@@ -1,4 +1,3 @@
import React from 'react'
import { FaFacebook, FaGithub, FaGoogle } from 'react-icons/fa'
import { useProviderLink } from '@nhost/react'

View File

@@ -1,13 +1,13 @@
import { useRouter } from 'next/router'
import { useState } from 'react'
import { Button, SimpleGrid, TextInput } from '@mantine/core'
import { Button, Modal, SimpleGrid, TextInput } from '@mantine/core'
import { showNotification } from '@mantine/notifications'
import { useSignInEmailPasswordless } from '@nhost/nextjs'
export const SignUpPasswordlessForm: React.FC = () => {
const router = useRouter()
const { signInEmailPasswordless } = useSignInEmailPasswordless()
const { signInEmailPasswordless } = useSignInEmailPasswordless({ redirectTo: '/guarded-ssr' })
const [emailVerificationToggle, setEmailVerificationToggle] = useState(false)
const [email, setEmail] = useState('')
const signIn = async () => {
const result = await signInEmailPasswordless(email)
@@ -18,11 +18,23 @@ export const SignUpPasswordlessForm: React.FC = () => {
message: result.error.message
})
} else {
router.replace('/')
setEmailVerificationToggle(true)
}
}
return (
<SimpleGrid cols={1} spacing={6}>
<Modal
title="Verification email sent"
centered
opened={emailVerificationToggle}
onClose={() => {
setEmailVerificationToggle(false)
}}
>
A verification email has been sent. Please check your inbox and follow the link to complete
authentication. This page will automatically redirect you to the authenticated home page
once the email has been verified.
</Modal>
<TextInput
type="email"
placeholder="Email Address"

View File

@@ -1,13 +1,8 @@
/** @type {import('next').NextConfig} */
const nextConfig = {}
const pkg = require('./package.json')
// * Only required to make it work with the monorepo. Is not required otherwise
const withTM = require('next-transpile-modules')(
// * All references to workspace packages are transpiled
Object.entries(pkg.dependencies)
.filter(([name, version]) => version.startsWith('workspace'))
.map(([name]) => name)
)
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true'
})
module.exports = withTM(nextConfig)
module.exports = withBundleAnalyzer(nextConfig)

View File

@@ -4,7 +4,8 @@
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"build": "ANALYZE=false next build",
"build:analyze": "ANALYZE=true next build",
"start": "next start",
"prettier": "prettier --check .",
"prettier:fix": "prettier --write .",
@@ -19,12 +20,7 @@
"@mantine/hooks": "^4.2.2",
"@mantine/next": "^4.2.2",
"@mantine/notifications": "^4.2.2",
"@nhost/apollo": "workspace:*",
"@nhost/core": "workspace:*",
"@nhost/hasura-auth-js": "workspace:*",
"@nhost/hasura-storage-js": "workspace:*",
"@nhost/nextjs": "workspace:*",
"@nhost/nhost-js": "workspace:*",
"@nhost/react": "workspace:*",
"@nhost/react-apollo": "workspace:*",
"graphql": "^16.3.0",
@@ -34,11 +30,11 @@
"react-icons": "^4.3.1"
},
"devDependencies": {
"@next/bundle-analyzer": "^12.1.5",
"@types/node": "17.0.23",
"@types/react": "18.0.8",
"@xstate/inspect": "^0.6.2",
"eslint-config-next": "12.0.10",
"next-transpile-modules": "^9.0.0",
"typescript": "4.5.5",
"ws": "^8.5.0",
"xstate": "^4.31.0"

View File

@@ -1,6 +1,5 @@
import type { AppProps } from 'next/app'
import Head from 'next/head'
import React from 'react'
import { AppShell, Header, MantineProvider } from '@mantine/core'
import { NotificationsProvider } from '@mantine/notifications'

View File

@@ -1,5 +1,4 @@
import Link from 'next/link'
import React from 'react'
import { Container, Title } from '@mantine/core'

View File

@@ -1,5 +1,3 @@
import React from 'react'
import { Container, Title } from '@mantine/core'
import { useAccessToken } from '@nhost/nextjs'

View File

@@ -1,9 +1,7 @@
import { GetServerSideProps } from 'next'
import React from 'react'
import { Container, Title } from '@mantine/core'
import { NhostSession } from '@nhost/core'
import { getNhostSession, useAccessToken } from '@nhost/nextjs'
import { getNhostSession, NhostSession, useAccessToken } from '@nhost/nextjs'
import { authProtected } from '../components/protected-route'
import { BACKEND_URL } from '../helpers'

View File

@@ -1,5 +1,4 @@
import { NextPage } from 'next'
import React from 'react'
import { Container, Title } from '@mantine/core'
import { useAccessToken, useAuthenticated } from '@nhost/nextjs'

View File

@@ -1,9 +1,7 @@
import { GetServerSideProps } from 'next'
import React from 'react'
import { Container, Title } from '@mantine/core'
import { NhostSession } from '@nhost/core'
import { getNhostSession, useAccessToken, useAuthenticated } from '@nhost/nextjs'
import { getNhostSession, NhostSession, useAccessToken, useAuthenticated } from '@nhost/nextjs'
import { BACKEND_URL } from '../helpers'
@@ -19,6 +17,7 @@ export const getServerSideProps: GetServerSideProps = async (context) => {
const PublicSSRPage: React.FC<{ initial: NhostSession }> = () => {
const isAuthenticated = useAuthenticated()
const accessToken = useAccessToken()
return (
<Container>
<Title>Public Server-side Page</Title>

View File

@@ -1,5 +1,4 @@
import { NextPage } from 'next'
import React from 'react'
import { FaLock } from 'react-icons/fa'
import { Divider } from '@mantine/core'

View File

@@ -41,7 +41,6 @@ export const SignUpPasswordPage: NextPage = () => {
transition="fade"
centered
transitionDuration={600}
transitionTimingFunction="ease"
opened={emailVerificationToggle}
onClose={() => {
setEmailVerificationToggle(false)

View File

@@ -1,5 +1,4 @@
import { NextPage } from 'next'
import React from 'react'
import { FaLock } from 'react-icons/fa'
import { Divider } from '@mantine/core'

View File

@@ -1,4 +1,5 @@
{
"extends": "../../config/tsconfig.base.json",
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],

View File

@@ -6,7 +6,6 @@
"@apollo/client": "^3.5.10",
"@headlessui/react": "^1.5.0",
"@heroicons/react": "^1.0.6",
"@nhost/nhost-js": "workspace:*",
"@nhost/react": "workspace:*",
"@nhost/react-apollo": "workspace:*",
"@tailwindcss/forms": "^0.5.0",
@@ -61,11 +60,11 @@
"@types/react": "^17.0.44",
"@types/react-dom": "^17.0.15",
"@types/express": "^4.17.13",
"@vitejs/plugin-react": "^1.3.1",
"@vitejs/plugin-react": "^1.3.2",
"autoprefixer": "^10.4.4",
"express": "^4.17.3",
"postcss": "^8.4.12",
"typescript": "^4.6.3",
"vite": "^2.9.5"
"vite": "^2.9.7"
}
}

View File

@@ -1,9 +1,22 @@
{
"extends": "../../tsconfig.json",
"extends": "../../config/tsconfig.base.json",
"compilerOptions": {
"outDir": "dist",
"composite": true,
"module": "esnext"
"target": "ESNext",
"useDefineForClassFields": true,
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"allowJs": false,
"skipLibCheck": true,
"esModuleInterop": false,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "ESNext",
"moduleResolution": "Node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": ["src/**/*", "types/**/*", "../../types/**/*", "tests/**/*"]
"include": ["src"],
"references": [{ "path": "../../config/tsconfig.base.json" }]
}

View File

@@ -0,0 +1,9 @@
{
"compilerOptions": {
"composite": true,
"module": "esnext",
"moduleResolution": "node"
},
"include": ["vite.config.ts"]
}

Some files were not shown because too many files have changed in this diff Show More