1
0
mirror of synced 2026-02-06 18:00:14 -05:00

Compare commits

...

27 Commits

Author SHA1 Message Date
github-actions[bot]
6e8eeb1514 Version Packages (#4327)
* Version Packages

* update pnpm lock

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Siddharth Suresh <siddh.suresh@gmail.com>
2024-04-17 14:14:39 +00:00
Siddharth Suresh
5e61a16815 bug: merge existing and blitz turbo config (#4323)
* do not oveeride existing config

* Create calm-deers-sin.md

* Update packages/blitz-next/src/index-server.ts
2024-04-17 19:34:19 +05:30
Siddharth Suresh
77555468f3 fix: add missing host in next-auth adapter (#4325)
* fix: add missing host in next-auth adapter

* Create red-masks-drop.md

* Update .changeset/red-masks-drop.md
2024-04-17 19:26:15 +05:30
github-actions[bot]
22e402af01 Version Packages (#4320)
* Version Packages

* pnpm lock fix

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Siddharth Suresh <siddh.suresh@gmail.com>
2024-04-05 21:03:50 +05:30
Siddharth Suresh
19afc57530 internal: unblock the changeset release 2024-04-05 20:50:21 +05:30
Blitz.js Bot
b7dab1d800 (meta) added @timneutkens as contributor 2024-04-05 10:28:56 -04:00
Tim Neutkens
ee7bf87ec0 Turbopack support for Blitz (#4314)
* Use this.rootContext instead of webpack internals

Ensures the root context is read from the public API that webpack exposes. This is the first step for Turbopack support as Turbopack includes `this.rootContext` as well

* Turbopack support for Blitz

* Update packages/blitz-rpc/src/server/loader/server/loader-server.ts

Co-authored-by: Tobias Koppers <tobias.koppers@googlemail.com>

* fix: CI and update next.js version in test app

* feat: add tests for turbo and expose new `turbo` boolean

* upgrade to latest next version

* use latest canary in internal packages and tests

* chore: add changeset

* chore: minor fix on how the test is run

* fix stray DYNAMIC_SERVER_USAGE thrown

* cleanup

* chore: changeset

* pnpm lock fix

* fix turbo tests

* fixes

* oops

* add turbo config only when needed

* remove need for any change to `next.config.js`

---------

Co-authored-by: Tobias Koppers <tobias.koppers@googlemail.com>
Co-authored-by: Siddharth Suresh <siddh.suresh@gmail.com>
2024-04-05 10:28:50 -04:00
Siddharth Suresh
451ead089c chore: try fixing the pr release for usage with forks 2024-04-03 14:04:18 +05:30
Siddharth Suresh
5d9570f7f4 chore: update dependencies of CI workflows 2024-04-03 13:56:36 +05:30
Siddharth Suresh
178c152b2c fix: pages and app directory - Uncaught Error: DYNAMIC_SERVER_USAGE (#4318)
* fix stray DYNAMIC_SERVER_USAGE thrown

* cleanup

* chore: changeset
2024-04-02 14:34:27 +00:00
github-actions[bot]
bbe1a54d7a Version Packages (#4316)
* Version Packages

* chore: update pnpm lock

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Siddharth Suresh <siddh.suresh@gmail.com>
2024-04-02 06:39:08 +00:00
Siddharth Suresh
9b075dbb47 chore: upgrade release CI to latest versions 2024-04-02 12:00:21 +05:30
Siddharth Suresh
60a4d90c86 chore: override version of mime blocking release CI 2024-04-02 11:53:32 +05:30
Blitz.js Bot
a674897601 (meta) added @gengjiawen as contributor 2024-04-01 08:56:45 -04:00
Jiawen Geng
5a587a6c31 fix: production issue (#4311)
* fix: production issue

* Update .changeset/soft-tables-ring.md

---------

Co-authored-by: Siddharth Suresh <siddh.suresh@gmail.com>
2024-04-01 12:56:40 +00:00
Siddharth Suresh
744242f25b chore: remove --no-frozen-lockfile install step for release workflow 2024-03-08 00:47:36 +05:30
Blitz.js Bot
0f5297f1aa (meta) added @lmisea as contributor 2024-03-07 13:26:25 -05:00
Luis Isea
76a2544f9d fix: process.kill("SIGABRT") not supported on windows (#4308)
* fix: process.kill("SIGABRT") not supported on windows

* fix: use process.kill("SIGINT") across all operative systems

* Update .changeset/clever-insects-shave.md

---------

Co-authored-by: Siddharth Suresh <siddh.suresh@gmail.com>
2024-03-07 18:26:20 +00:00
github-actions[bot]
6f44c2334e Version Packages (#4301)
* Version Packages

* pnpm lock

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Siddharth Suresh <siddh.suresh@gmail.com>
2024-02-17 06:33:47 +00:00
Siddharth Suresh
8a417533f6 feat: remove restriction to use secure cookies in localhost (#4300)
* feat: remove restriction to use secure cookies in localhost

* changeset

* pnpm lock fix

* Update .changeset/grumpy-deers-rest.md

* Update .changeset/grumpy-deers-rest.md

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2024-02-16 23:34:36 +00:00
Siddharth Suresh
6f54841b7a fix: getBlitzContext() can only be used in React Server Components in Nextjs 13 or higher (#4299)
* fix: remove custom errors thrown by blitz

* Create curvy-cougars-lick.md

* use require and eval rather than the await which becomes a `yield import` possibly causing the issue

* pnpm lock fix

* Update .changeset/curvy-cougars-lick.md

* add comment

* use correct error type

* Apply suggestions from code review
2024-02-16 23:27:05 +00:00
github-actions[bot]
e8f564ea66 Version Packages (#4292)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-02-06 22:30:47 +05:30
Siddharth Suresh
71b9950037 fix: ajv dependency was not installed with blitz new (#4297)
* add ajv to devDeps

* Create four-dots-retire.md
2024-02-06 22:25:55 +05:30
Siddharth Suresh
28a79040e4 feat: export BlitzServerMiddleware from blitz-next (#4296)
* feat: export `BlitzServerMiddleware` from blitz-next

* Create sixty-pants-hunt.md

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2024-02-06 22:25:36 +05:30
Siddharth Suresh
dd604c7675 perf: add filter to query only non expired sessions (#4288)
* perf: add check to make sure only non expired sessions are selected by default

* remove console.logs

* Create chatty-ants-bake.md

* remove `expiresAt` from the publicData

* remove internal from changelog

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2024-02-06 16:13:32 +00:00
Blitz.js Bot
0a8d4bfdaf (meta) added @Doc0x1 as contributor 2024-01-25 03:48:39 -05:00
Doc0x1
f25aac08c0 Added codemod support for legacy projects with a /src folder (#4290)
* Added support for legacy projects that have the pages folder located inside a /src directory

* Fixed line 687 for path.resolve(`${findPagesDirectory}/api/rpc`) not actually calling the function and added path.resolve's to findPagesDirectory

* Update for lines 56 and 1340 to add support for app and pages directories located in /src
2024-01-25 14:18:34 +05:30
84 changed files with 1948 additions and 764 deletions

View File

@@ -4024,6 +4024,47 @@
"doc", "doc",
"code" "code"
] ]
},
{
"login": "Doc0x1",
"name": "Doc0x1",
"avatar_url": "https://avatars.githubusercontent.com/u/19937034?v=4",
"profile": "https://hacknex.us",
"contributions": [
"doc",
"code"
]
},
{
"login": "lmisea",
"name": "Luis Isea",
"avatar_url": "https://avatars.githubusercontent.com/u/106825636?v=4",
"profile": "https://github.com/lmisea",
"contributions": [
"doc",
"code"
]
},
{
"login": "gengjiawen",
"name": "Jiawen Geng",
"avatar_url": "https://avatars.githubusercontent.com/u/3759816?v=4",
"profile": "https://www.gengjiawen.com",
"contributions": [
"doc",
"code"
]
},
{
"login": "timneutkens",
"name": "Tim Neutkens",
"avatar_url": "https://avatars.githubusercontent.com/u/6324199?v=4",
"profile": "https://timn.tech",
"contributions": [
"doc",
"code",
"test"
]
} }
], ],
"contributorsPerLine": 7, "contributorsPerLine": 7,

View File

@@ -28,17 +28,20 @@ jobs:
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/checkout@v3 - uses: actions/checkout@v4
with: with:
ref: ${{ steps.refs.outputs.head_ref }} ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Setup PNPM - name: Setup PNPM
uses: pnpm/action-setup@v2.2.1 uses: pnpm/action-setup@646cdf48217256a3d0b80361c5a50727664284f2
with:
version: 8.9.0
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: 16 node-version: 20
registry-url: "https://registry.npmjs.org" registry-url: "https://registry.npmjs.org"
cache: "pnpm" cache: "pnpm"

View File

@@ -19,12 +19,12 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout Repo - name: Checkout Repo
uses: actions/checkout@v2 uses: actions/checkout@v4
- name: Setup Node.js 16.x - name: Setup Node.js 20.x
uses: actions/setup-node@v2 uses: actions/setup-node@v4
with: with:
node-version: 16.x node-version: 20.x
- name: Creating .npmrc - name: Creating .npmrc
run: | run: |
@@ -37,8 +37,10 @@ jobs:
- name: Pre-publish - name: Pre-publish
uses: pnpm/action-setup@646cdf48217256a3d0b80361c5a50727664284f2 uses: pnpm/action-setup@646cdf48217256a3d0b80361c5a50727664284f2
with: with:
version: 6.32.6 version: 8.9.0
- run: pnpm install --no-frozen-lockfile - run: pnpm install
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- run: pnpm build - run: pnpm build
- name: Create Release Pull Request - name: Create Release Pull Request
@@ -49,10 +51,3 @@ jobs:
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
# - name: Github Release
# uses: release-drafter/release-drafter@v5.19.0
# with:
# config-name: release-drafter.yml
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -6,7 +6,7 @@
<img alt="" src="https://img.shields.io/badge/Join%20our%20community-6700EB.svg?style=for-the-badge&labelColor=000000&logoWidth=20&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ9SURBVHgB7d3dVdtAEIbhcSpICUoH0IEogQqSVBBSAU4FSSpIOoAORAfQgSghHXzZ1U/YcMD4R9rZmf2ec3y448LyiNf27iLiGIAmPLrweC9Un3DhrzG6EarLNP09nlwJ1SOZ/lQr5N80/S/p2QMVCBf5N17XCfm1Y/rBHqjAG9PPHvBsz+mf9WAP+HLA9M/YA14cOP2payH7jpj+VCtk1wnTP+vj7xCy6cTpn7EHLMLp059iD1iD8eveJbVCNsSLheX1YA/YgOWnf8YeKB3Wmf7Ud6Fy4f/FHmtpxbl3YlC4MJ/Cj0bWdwPnPbARg+L0S54XQHS32WwuxClzd4CM0z9rPfeAuTtA5ulPXYQ7wZ04Y+oOoDD9KZc9YOoOoDj9s4dwFzgXR6w1wIPoOvPWA9buAHEJ173o3gWiy3AnuBUHLEbgmYwvAk1/wuM8vAgexThzbwPDkx7/DHwVXfFOxP2GmsKd4Ab6zPeAyU8CI7AHFmH2BRCBPXAyk18GzUrqAXCTiR4ssyj0VFw/oCU8+e+RZ33AWz6KMaYbIIWxB+JSLs1bsbkeMN0AqakHvoku9oA2sAfqBvbAQdw0QArsgb25aYBUQT3QgT2gB+yBuqGcHij2UCqXDZACe2Anlw2QYg/QAOyBuoE98CL3DZDCuK4/rh/Q7oGL6U+TOvcNkJoijN8X1C48+T+g75eQDrAH/qmqAVJgDwyqaoAUe4AGYA/UDZX3QLUNkEIZPRCd5+6BahsgVUgPROwBTSijB7jpVAvGHriHvmw9wAZ4BpX1ABvgmakHtPcbRuwBTWAPULgAV9D/jKDY9YRvwvgEaurD44uQHvAol7qBW7WKluVtIHiUS7GyvA0s6CiXDnxrpQfsgbqBS7GKk/2jYHCrVlGyfxTMrVo0ALdq1Q3sgSKofh0M9oA61a+D2QM0AHugbmAPqClmSRjK2apVVQ8UsySsoK1aHdgDesCtWnUDeyCrIpeFg1u3sylyWTi3btMA7IG6gT2wuuK3hoE9sKrit4YVslWLPaAN7IG6ocKt2zmY2h4O9sDiTG0PZw/QANy6XTewBxZj9ogYVHy025LMHhEz9cBn0We6B0yfERReBLfhx0/R1YQHPx/QBPbA0VwcEwf2wNFcHBPHHjiem3MC2QPHcXdSaJjA+KfgTPQ8hhfjBzHC40mhlzJ+Xq9lK4a4PCs43AVaGTed5mZq+iOXZwWHi3AnOj2wFWNcnxYe7gTxLtBKHuamP/J+Wnh8a5irB7ZC5Yk9gPX1QuXC+usHWqGyhYvUYR0a7zboUOFCNVhnk0krZAOW7wFOvzXhom2xnEbIHizTA1wEYhWW6YFGyC6c1gOcfg9wfA80Qj7g8B7g9HuCww+haIR8wf49wOn3Cvv9k8tGyC/s7gFOv3fY3QONkH+v9MBWqB7PeqDn9FcIT//kcitUn6kHOu/T/xfWzlQy3dEHhwAAAABJRU5ErkJggg=="> <img alt="" src="https://img.shields.io/badge/Join%20our%20community-6700EB.svg?style=for-the-badge&labelColor=000000&logoWidth=20&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQ9SURBVHgB7d3dVdtAEIbhcSpICUoH0IEogQqSVBBSAU4FSSpIOoAORAfQgSghHXzZ1U/YcMD4R9rZmf2ec3y448LyiNf27iLiGIAmPLrweC9Un3DhrzG6EarLNP09nlwJ1SOZ/lQr5N80/S/p2QMVCBf5N17XCfm1Y/rBHqjAG9PPHvBsz+mf9WAP+HLA9M/YA14cOP2payH7jpj+VCtk1wnTP+vj7xCy6cTpn7EHLMLp059iD1iD8eveJbVCNsSLheX1YA/YgOWnf8YeKB3Wmf7Ud6Fy4f/FHmtpxbl3YlC4MJ/Cj0bWdwPnPbARg+L0S54XQHS32WwuxClzd4CM0z9rPfeAuTtA5ulPXYQ7wZ04Y+oOoDD9KZc9YOoOoDj9s4dwFzgXR6w1wIPoOvPWA9buAHEJ173o3gWiy3AnuBUHLEbgmYwvAk1/wuM8vAgexThzbwPDkx7/DHwVXfFOxP2GmsKd4Ab6zPeAyU8CI7AHFmH2BRCBPXAyk18GzUrqAXCTiR4ssyj0VFw/oCU8+e+RZ33AWz6KMaYbIIWxB+JSLs1bsbkeMN0AqakHvoku9oA2sAfqBvbAQdw0QArsgb25aYBUQT3QgT2gB+yBuqGcHij2UCqXDZACe2Anlw2QYg/QAOyBuoE98CL3DZDCuK4/rh/Q7oGL6U+TOvcNkJoijN8X1C48+T+g75eQDrAH/qmqAVJgDwyqaoAUe4AGYA/UDZX3QLUNkEIZPRCd5+6BahsgVUgPROwBTSijB7jpVAvGHriHvmw9wAZ4BpX1ABvgmakHtPcbRuwBTWAPULgAV9D/jKDY9YRvwvgEaurD44uQHvAol7qBW7WKluVtIHiUS7GyvA0s6CiXDnxrpQfsgbqBS7GKk/2jYHCrVlGyfxTMrVo0ALdq1Q3sgSKofh0M9oA61a+D2QM0AHugbmAPqClmSRjK2apVVQ8UsySsoK1aHdgDesCtWnUDeyCrIpeFg1u3sylyWTi3btMA7IG6gT2wuuK3hoE9sKrit4YVslWLPaAN7IG6ocKt2zmY2h4O9sDiTG0PZw/QANy6XTewBxZj9ogYVHy025LMHhEz9cBn0We6B0yfERReBLfhx0/R1YQHPx/QBPbA0VwcEwf2wNFcHBPHHjiem3MC2QPHcXdSaJjA+KfgTPQ8hhfjBzHC40mhlzJ+Xq9lK4a4PCs43AVaGTed5mZq+iOXZwWHi3AnOj2wFWNcnxYe7gTxLtBKHuamP/J+Wnh8a5irB7ZC5Yk9gPX1QuXC+usHWqGyhYvUYR0a7zboUOFCNVhnk0krZAOW7wFOvzXhom2xnEbIHizTA1wEYhWW6YFGyC6c1gOcfg9wfA80Qj7g8B7g9HuCww+haIR8wf49wOn3Cvv9k8tGyC/s7gFOv3fY3QONkH+v9MBWqB7PeqDn9FcIT//kcitUn6kHOu/T/xfWzlQy3dEHhwAAAABJRU5ErkJggg==">
</a> </a>
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --> <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
<a aria-label="All Contributors" href="#contributors-"><img alt="" src="https://img.shields.io/badge/all_contributors-424-17BB8A.svg?style=for-the-badge&labelColor=000000"></a> <a aria-label="All Contributors" href="#contributors-"><img alt="" src="https://img.shields.io/badge/all_contributors-428-17BB8A.svg?style=for-the-badge&labelColor=000000"></a>
<!-- ALL-CONTRIBUTORS-BADGE:END --> <!-- ALL-CONTRIBUTORS-BADGE:END -->
<a aria-label="License" href="https://github.com/blitz-js/blitz/blob/main/LICENSE"> <a aria-label="License" href="https://github.com/blitz-js/blitz/blob/main/LICENSE">
<img alt="" src="https://img.shields.io/npm/l/blitz.svg?style=for-the-badge&labelColor=000000&color=blue"> <img alt="" src="https://img.shields.io/npm/l/blitz.svg?style=for-the-badge&labelColor=000000&color=blue">
@@ -748,6 +748,12 @@ Thanks to these wonderful people ([emoji key](https://allcontributors.org/docs/e
<td align="center"><a href="https://github.com/potikhanovsergey"><img src="https://avatars.githubusercontent.com/u/71494201?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sergey</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=potikhanovsergey" title="Documentation">📖</a></td> <td align="center"><a href="https://github.com/potikhanovsergey"><img src="https://avatars.githubusercontent.com/u/71494201?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sergey</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=potikhanovsergey" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/papsavas"><img src="https://avatars.githubusercontent.com/u/50584606?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Savvas Papageorgiadis</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=papsavas" title="Documentation">📖</a> <a href="https://github.com/blitz-js/blitz/commits?author=papsavas" title="Code">💻</a></td> <td align="center"><a href="https://github.com/papsavas"><img src="https://avatars.githubusercontent.com/u/50584606?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Savvas Papageorgiadis</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=papsavas" title="Documentation">📖</a> <a href="https://github.com/blitz-js/blitz/commits?author=papsavas" title="Code">💻</a></td>
<td align="center"><a href="https://flow-office.eu/"><img src="https://avatars.githubusercontent.com/u/77194479?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Leonidas</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=LeonMueller-OneAndOnly" title="Documentation">📖</a> <a href="https://github.com/blitz-js/blitz/commits?author=LeonMueller-OneAndOnly" title="Code">💻</a></td> <td align="center"><a href="https://flow-office.eu/"><img src="https://avatars.githubusercontent.com/u/77194479?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Leonidas</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=LeonMueller-OneAndOnly" title="Documentation">📖</a> <a href="https://github.com/blitz-js/blitz/commits?author=LeonMueller-OneAndOnly" title="Code">💻</a></td>
<td align="center"><a href="https://hacknex.us"><img src="https://avatars.githubusercontent.com/u/19937034?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Doc0x1</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=Doc0x1" title="Documentation">📖</a> <a href="https://github.com/blitz-js/blitz/commits?author=Doc0x1" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/lmisea"><img src="https://avatars.githubusercontent.com/u/106825636?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Luis Isea</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=lmisea" title="Documentation">📖</a> <a href="https://github.com/blitz-js/blitz/commits?author=lmisea" title="Code">💻</a></td>
<td align="center"><a href="https://www.gengjiawen.com"><img src="https://avatars.githubusercontent.com/u/3759816?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jiawen Geng</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=gengjiawen" title="Documentation">📖</a> <a href="https://github.com/blitz-js/blitz/commits?author=gengjiawen" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://timn.tech"><img src="https://avatars.githubusercontent.com/u/6324199?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tim Neutkens</b></sub></a><br /><a href="https://github.com/blitz-js/blitz/commits?author=timneutkens" title="Documentation">📖</a> <a href="https://github.com/blitz-js/blitz/commits?author=timneutkens" title="Code">💻</a> <a href="https://github.com/blitz-js/blitz/commits?author=timneutkens" title="Tests">⚠️</a></td>
</tr> </tr>
</table> </table>

View File

@@ -1,5 +1,65 @@
# next-blitz-auth # next-blitz-auth
## 0.1.9
### Patch Changes
- Updated dependencies [5e61a1681]
- Updated dependencies [77555468f]
- @blitzjs/next@2.0.8
- blitz@2.0.8
- @blitzjs/auth@2.0.8
- @blitzjs/rpc@2.0.8
- @blitzjs/config@2.0.8
## 0.1.8
### Patch Changes
- Updated dependencies [ee7bf87ec]
- Updated dependencies [178c152b2]
- blitz@2.0.7
- @blitzjs/next@2.0.7
- @blitzjs/rpc@2.0.7
- @blitzjs/auth@2.0.7
- @blitzjs/config@2.0.7
## 0.1.7
### Patch Changes
- Updated dependencies [76a2544f9]
- Updated dependencies [5a587a6c3]
- blitz@2.0.6
- @blitzjs/auth@2.0.6
- @blitzjs/next@2.0.6
- @blitzjs/rpc@2.0.6
- @blitzjs/config@2.0.6
## 0.1.6
### Patch Changes
- Updated dependencies [6f54841b7]
- Updated dependencies [8a417533f]
- @blitzjs/auth@2.0.5
- blitz@2.0.5
- @blitzjs/rpc@2.0.5
- @blitzjs/next@2.0.5
- @blitzjs/config@2.0.5
## 0.1.5
### Patch Changes
- Updated dependencies [dd604c767]
- Updated dependencies [28a79040e]
- @blitzjs/auth@2.0.4
- blitz@2.0.4
- @blitzjs/next@2.0.4
- @blitzjs/rpc@2.0.4
- @blitzjs/config@2.0.4
## 0.1.4 ## 0.1.4
### Patch Changes ### Patch Changes

View File

@@ -1,5 +1,13 @@
const {withBlitz} = require("@blitzjs/next") const {withBlitz} = require("@blitzjs/next")
const loaderClient = require.resolve("@blitzjs/rpc/dist/loader-client.cjs")
const loaderServer = require.resolve("@blitzjs/rpc/dist/loader-server.cjs")
const loaderServerResolvers = require.resolve("@blitzjs/rpc/dist/loader-server-resolvers.cjs")
console.log("loaderClient", loaderClient)
console.log("loaderServer", loaderServer)
console.log("loaderServerResolvers", loaderServerResolvers)
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = {} const nextConfig = {}

View File

@@ -1,6 +1,6 @@
{ {
"name": "next-blitz-auth", "name": "next-blitz-auth",
"version": "0.1.4", "version": "0.1.9",
"private": true, "private": true,
"scripts": { "scripts": {
"blitz:dev": "next dev", "blitz:dev": "next dev",
@@ -12,17 +12,17 @@
"schema": "prisma/schema.prisma" "schema": "prisma/schema.prisma"
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@hookform/error-message": "2.0.0", "@hookform/error-message": "2.0.0",
"@hookform/resolvers": "2.9.10", "@hookform/resolvers": "2.9.10",
"@prisma/client": "^4.5.0", "@prisma/client": "^4.5.0",
"@tanstack/react-query": "4.0.10", "@tanstack/react-query": "4.0.10",
"blitz": "2.0.3", "blitz": "2.0.8",
"flatted": "3.2.7", "flatted": "3.2.7",
"next": "14.0.4", "next": "canary",
"prisma": "^4.5.0", "prisma": "^4.5.0",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",

View File

@@ -23,15 +23,15 @@
] ]
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@hookform/error-message": "2.0.0", "@hookform/error-message": "2.0.0",
"@hookform/resolvers": "2.9.10", "@hookform/resolvers": "2.9.10",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "14.0.4", "next": "canary",
"openid-client": "5.2.1", "openid-client": "5.2.1",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",

View File

@@ -24,15 +24,15 @@
] ]
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@hookform/error-message": "2.0.0", "@hookform/error-message": "2.0.0",
"@hookform/resolvers": "2.9.10", "@hookform/resolvers": "2.9.10",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "14.0.4", "next": "canary",
"next-auth": "4.18.7", "next-auth": "4.18.7",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",

View File

@@ -16,17 +16,17 @@
"schema": "./db/schema.prisma" "schema": "./db/schema.prisma"
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"@types/jest": "29.2.2", "@types/jest": "29.2.2",
"@types/passport-twitter": "1.0.37", "@types/passport-twitter": "1.0.37",
"blitz": "2.0.3", "blitz": "2.0.8",
"jest": "29.3.0", "jest": "29.3.0",
"jest-environment-jsdom": "29.3.0", "jest-environment-jsdom": "29.3.0",
"next": "14.0.4", "next": "canary",
"passport-mock-strategy": "2.0.0", "passport-mock-strategy": "2.0.0",
"passport-twitter": "1.0.4", "passport-twitter": "1.0.4",
"prisma": "4.6.1", "prisma": "4.6.1",

View File

@@ -17,16 +17,16 @@
"prisma:studio": "prisma studio" "prisma:studio": "prisma studio"
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@hookform/error-message": "2.0.0", "@hookform/error-message": "2.0.0",
"@hookform/resolvers": "2.9.10", "@hookform/resolvers": "2.9.10",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"delay": "5.0.0", "delay": "5.0.0",
"next": "14.0.4", "next": "canary",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",

View File

@@ -79,11 +79,13 @@ const runTests = () => {
let text = await browser.elementByCss("#content").text() let text = await browser.elementByCss("#content").text()
expect(text).toMatch(/logged-out/) expect(text).toMatch(/logged-out/)
await browser.elementByCss("#login").click() await browser.elementByCss("#login").click()
await waitFor(200) await waitFor(7500)
text = await browser.elementByCss("#content").text() text = await browser.elementByCss("#content").text()
expect(text).toMatch(/logged-in/) expect(text).toMatch(/logged-in/)
await browser.elementByCss("#logout").click() await browser.elementByCss("#logout").click()
await waitFor(250) await waitFor(5000)
text = await browser.elementByCss("#content").text() text = await browser.elementByCss("#content").text()
expect(text).toMatch(/logged-out/) expect(text).toMatch(/logged-out/)
@@ -93,16 +95,16 @@ const runTests = () => {
it("should logout without infinite loop #2233", async () => { it("should logout without infinite loop #2233", async () => {
// Login // Login
let browser = await webdriver(appPort, "/login") let browser = await webdriver(appPort, "/login")
await waitFor(200) await waitFor(5000)
await browser.elementByCss("#login").click() await browser.elementByCss("#login").click()
await waitFor(200) await waitFor(5000)
await browser.eval(`window.location = "/authenticated-query"`) await browser.eval(`window.location = "/authenticated-query"`)
await browser.waitForElementByCss("#content") await browser.waitForElementByCss("#content")
let text = await browser.elementByCss("#content").text() let text = await browser.elementByCss("#content").text()
expect(text).toMatch(/authenticated-basic-result/) expect(text).toMatch(/authenticated-basic-result/)
await browser.elementByCss("#logout").click() await browser.elementByCss("#logout").click()
await waitFor(200) await waitFor(5000)
await browser.waitForElementByCss("#error") await browser.waitForElementByCss("#error")
text = await browser.elementByCss("#error").text() text = await browser.elementByCss("#error").text()
if (mode === "server") { if (mode === "server") {
@@ -115,9 +117,9 @@ const runTests = () => {
it("Page.authenticate = {role} should throw authentication error ", async () => { it("Page.authenticate = {role} should throw authentication error ", async () => {
let browser = await webdriver(appPort, "/login") let browser = await webdriver(appPort, "/login")
await waitFor(200) await waitFor(5000)
await browser.elementByCss("#login").click() await browser.elementByCss("#login").click()
await waitFor(200) await waitFor(5000)
await browser.eval(`window.location = "/page-dot-authenticate-role"`) await browser.eval(`window.location = "/page-dot-authenticate-role"`)
await browser.waitForElementByCss("#error") await browser.waitForElementByCss("#error")
let text = await browser.elementByCss("#error").text() let text = await browser.elementByCss("#error").text()
@@ -169,7 +171,7 @@ const runTests = () => {
let text = await browser.elementByCss("#content").text() let text = await browser.elementByCss("#content").text()
expect(text).toMatch(/authenticated-basic-result/) expect(text).toMatch(/authenticated-basic-result/)
await browser.elementByCss("#logout").click() await browser.elementByCss("#logout").click()
await waitFor(500) await waitFor(5000)
expect(await browser.url()).toMatch(/\/login/) expect(await browser.url()).toMatch(/\/login/)
if (browser) await browser.close() if (browser) await browser.close()
@@ -275,7 +277,7 @@ const runTests = () => {
} }
describe("Auth Tests", () => { describe("Auth Tests", () => {
describe("dev mode", () => { describe("dev mode - webpack", () => {
beforeAll(async () => { beforeAll(async () => {
mode = "dev" mode = "dev"
try { try {
@@ -290,6 +292,21 @@ describe("Auth Tests", () => {
runTests() runTests()
}) })
describe("dev mode - turbo", () => {
beforeAll(async () => {
mode = "dev"
try {
await runBlitzCommand(["prisma", "migrate", "reset", "--force"])
appPort = await findPort()
app = await blitzLaunchApp(appPort, {cwd: process.cwd()}, true)
} catch (error) {
console.log(error)
}
}, 5000 * 60 * 2)
afterAll(async () => await killApp(app))
runTests()
})
describe("server mode", () => { describe("server mode", () => {
beforeAll(async () => { beforeAll(async () => {
mode = "server" mode = "server"

View File

@@ -17,13 +17,13 @@
"prisma:studio": "prisma studio" "prisma:studio": "prisma studio"
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"lowdb": "3.0.0", "lowdb": "3.0.0",
"next": "14.0.4", "next": "canary",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",

View File

@@ -16,19 +16,19 @@
"schema": "db/schema.prisma" "schema": "db/schema.prisma"
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"lowdb": "3.0.0", "lowdb": "3.0.0",
"next": "14.0.4", "next": "canary",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0"
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@next/bundle-analyzer": "12.0.8", "@next/bundle-analyzer": "12.0.8",
"@types/express": "4.17.13", "@types/express": "4.17.13",
"@types/fs-extra": "9.0.13", "@types/fs-extra": "9.0.13",

View File

@@ -11,11 +11,11 @@
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next" "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next"
}, },
"dependencies": { "dependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "14.0.4", "next": "canary",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0"
}, },

View File

@@ -1,34 +0,0 @@
"use client"
import {useQuery, useMutation} from "@blitzjs/rpc"
import logout from "../src/auth/mutations/logout"
import getCurrentUser from "../src/users/queries/getCurrentUser"
import {useTransition} from "react"
import {useRouter} from "next/navigation"
export default function Test() {
const router = useRouter()
const [user] = useQuery(getCurrentUser, null)
const [isPending, startTransition] = useTransition()
const [logoutMutation] = useMutation(logout)
console.log(user)
return (
<div>
<h1>Test</h1>
<p>{user?.email}</p>
<button
className="button small"
onClick={async () => {
await logoutMutation()
startTransition(() => {
// Refresh the current route and fetch new data from the server without
// losing client-side browser or React state.
router.refresh()
})
}}
>
Logout
</button>
</div>
)
}

View File

@@ -17,14 +17,14 @@
"prisma:studio": "prisma studio" "prisma:studio": "prisma studio"
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"lowdb": "3.0.0", "lowdb": "3.0.0",
"next": "14.0.4", "next": "canary",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",

View File

@@ -153,7 +153,7 @@ const runTests = (mode?: string) => {
} }
describe("Auth Tests", () => { describe("Auth Tests", () => {
describe("dev mode", async () => { describe("dev mode - webpack", async () => {
beforeAll(async () => { beforeAll(async () => {
try { try {
await runBlitzCommand(["prisma", "migrate", "reset", "--force"]) await runBlitzCommand(["prisma", "migrate", "reset", "--force"])
@@ -169,19 +169,19 @@ describe("Auth Tests", () => {
runTests() runTests()
}) })
// describe("server mode", () => { describe("dev mode - turbo", async () => {
// beforeAll(async () => { beforeAll(async () => {
// try { try {
// await runBlitzCommand(["prisma", "generate"]) await runBlitzCommand(["prisma", "migrate", "reset", "--force"])
// await runBlitzCommand(["prisma", "migrate", "deploy"]) appPort = await findPort()
// await blitzBuild() app = await blitzLaunchApp(appPort, {cwd: process.cwd()}, true)
// // appPort = await findPort() } catch (error) {
// app = await blitzStart(appPort, {cwd: process.cwd()}) console.log(error)
// } catch (err) { }
// console.log(err) }, 5000 * 60 * 2)
// } afterAll(async () => {
// }, 5000 * 60 * 2) await killApp(app)
// afterAll(async () => await killApp(app)) })
// runTests() runTests()
// }) })
}) })

View File

@@ -16,19 +16,19 @@
"prisma:studio": "prisma studio" "prisma:studio": "prisma studio"
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"lowdb": "3.0.0", "lowdb": "3.0.0",
"next": "14.0.4", "next": "canary",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0"
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@next/bundle-analyzer": "12.0.8", "@next/bundle-analyzer": "12.0.8",
"@types/express": "4.17.13", "@types/express": "4.17.13",
"@types/fs-extra": "9.0.13", "@types/fs-extra": "9.0.13",

View File

@@ -8,14 +8,14 @@
"clean": "rm -rf .turbo && rm -rf node_modules" "clean": "rm -rf .turbo && rm -rf node_modules"
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"@tanstack/react-query": "4.0.10", "@tanstack/react-query": "4.0.10",
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "14.0.4", "next": "canary",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0"

View File

@@ -16,18 +16,18 @@
"schema": "db/schema.prisma" "schema": "db/schema.prisma"
}, },
"dependencies": { "dependencies": {
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"lowdb": "3.0.0", "lowdb": "3.0.0",
"next": "14.0.4", "next": "canary",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0"
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@next/bundle-analyzer": "12.0.8", "@next/bundle-analyzer": "12.0.8",
"@types/express": "4.17.13", "@types/express": "4.17.13",
"@types/fs-extra": "9.0.13", "@types/fs-extra": "9.0.13",

View File

@@ -7,11 +7,11 @@
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next" "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next"
}, },
"dependencies": { "dependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "14.0.4", "next": "canary",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0"
}, },

View File

@@ -7,11 +7,11 @@
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next" "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next"
}, },
"dependencies": { "dependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "14.0.4", "next": "canary",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0"
}, },

View File

@@ -16,19 +16,19 @@
"schema": "db/schema.prisma" "schema": "db/schema.prisma"
}, },
"dependencies": { "dependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/next": "2.0.3", "@blitzjs/next": "2.0.8",
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"lowdb": "3.0.0", "lowdb": "3.0.0",
"next": "14.0.4", "next": "canary",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0"
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@next/bundle-analyzer": "12.0.8", "@next/bundle-analyzer": "12.0.8",
"@types/express": "4.17.13", "@types/express": "4.17.13",
"@types/fs-extra": "9.0.13", "@types/fs-extra": "9.0.13",

View File

@@ -233,6 +233,7 @@ export function runBlitzCommandDev(argv, stdOut, opts: RunNextCommandDevOptions
} }
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {
console.log(`Running command "blitz ${argv.join(" ")}"`)
const instance = spawn("node", [blitzBin, ...argv], { const instance = spawn("node", [blitzBin, ...argv], {
cwd, cwd,
env, env,
@@ -294,8 +295,8 @@ export function runBlitzCommandDev(argv, stdOut, opts: RunNextCommandDevOptions
} }
// Blitz Utils // Blitz Utils
export function blitzLaunchApp(port, opts: RunNextCommandDevOptions) { export function blitzLaunchApp(port, opts: RunNextCommandDevOptions, turbo = false) {
return runBlitzCommandDev(["dev", "-p", port], undefined, opts) return runBlitzCommandDev(["dev", "-p", port, turbo ? "--turbo" : ""], undefined, opts)
} }
export function blitzBuild(args = [], opts = {}): any { export function blitzBuild(args = [], opts = {}): any {
@@ -437,7 +438,7 @@ export function runNextCommandDev(argv, stdOut, opts: RunNextCommandDevOptions =
} }
if (opts.stdout !== false) { if (opts.stdout !== false) {
process.stdout.write(message) process.stdout.write(message)
} }
} }
@@ -923,4 +924,5 @@ interface RunNextCommandDevOptions {
nodeArgs?: [] nodeArgs?: []
bootupMarker?: any bootupMarker?: any
nextStart?: boolean nextStart?: boolean
turbo?: boolean
} }

View File

@@ -3,9 +3,9 @@
"version": "0.0.0", "version": "0.0.0",
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"@blitzjs/config": "workspace:2.0.3", "@blitzjs/config": "workspace:2.0.8",
"@blitzjs/next": "workspace:2.0.3", "@blitzjs/next": "workspace:2.0.8",
"@blitzjs/rpc": "workspace:2.0.3", "@blitzjs/rpc": "workspace:2.0.8",
"@tanstack/react-query": "4.13.0", "@tanstack/react-query": "4.13.0",
"@testing-library/react": "13.4.0", "@testing-library/react": "13.4.0",
"@types/express": "4.17.13", "@types/express": "4.17.13",

View File

@@ -29,7 +29,7 @@
"husky": "8.0.2", "husky": "8.0.2",
"jsdom": "^19.0.0", "jsdom": "^19.0.0",
"lint-staged": "13.0.3", "lint-staged": "13.0.3",
"next": "14.0.4", "next": "canary",
"only-allow": "1.1.0", "only-allow": "1.1.0",
"prettier": "^2.7.1", "prettier": "^2.7.1",
"prettier-plugin-prisma": "4.4.0", "prettier-plugin-prisma": "4.4.0",
@@ -48,6 +48,9 @@
"pnpm": { "pnpm": {
"patchedDependencies": { "patchedDependencies": {
"next-auth@4.18.7": "patches/next-auth@4.18.7.patch" "next-auth@4.18.7": "patches/next-auth@4.18.7.patch"
},
"overrides": {
"@types/mime": "3.0.4"
} }
} }
} }

View File

@@ -1,5 +1,48 @@
# @blitzjs/auth # @blitzjs/auth
## 2.0.8
### Patch Changes
- 77555468f: fix: add missing host while initialising the next-auth adapter
- Updated dependencies [5e61a1681]
- Updated dependencies [77555468f]
- blitz@2.0.8
## 2.0.7
### Patch Changes
- Updated dependencies [ee7bf87ec]
- Updated dependencies [178c152b2]
- blitz@2.0.7
## 2.0.6
### Patch Changes
- 5a587a6c3: Fix bundling issue that occurs in vercel due to the way imports were handled internally
- Updated dependencies [76a2544f9]
- blitz@2.0.6
## 2.0.5
### Patch Changes
- 6f54841b7: fix: getBlitzContext() can only be used in React Server Components in Nextjs 13 or higher
- 8a417533f: fix: remove restriction to use `secure` cookies in localhost / during development following spec in [developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#restrict_access_to_cookies](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#restrict_access_to_cookies)
- Updated dependencies [6f54841b7]
- blitz@2.0.5
## 2.0.4
### Patch Changes
- dd604c767: perf: add filter to select only non expired sessions
- Updated dependencies [dd604c767]
- Updated dependencies [28a79040e]
- blitz@2.0.4
## 2.0.3 ## 2.0.3
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@blitzjs/auth", "name": "@blitzjs/auth",
"version": "2.0.3", "version": "2.0.8",
"homepage": "https://blitzjs.com/", "homepage": "https://blitzjs.com/",
"repository": { "repository": {
"type": "git", "type": "git",
@@ -50,7 +50,7 @@
"url": "0.11.0" "url": "0.11.0"
}, },
"peerDependencies": { "peerDependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "*", "next": "*",
"next-auth": "*", "next-auth": "*",
"secure-password": "4.0.0" "secure-password": "4.0.0"
@@ -67,7 +67,7 @@
} }
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@testing-library/react": "13.4.0", "@testing-library/react": "13.4.0",
"@testing-library/react-hooks": "8.0.1", "@testing-library/react-hooks": "8.0.1",
"@types/cookie": "0.4.1", "@types/cookie": "0.4.1",
@@ -75,8 +75,8 @@
"@types/jsonwebtoken": "8.5.8", "@types/jsonwebtoken": "8.5.8",
"@types/react": "18.0.25", "@types/react": "18.0.25",
"@types/react-dom": "17.0.14", "@types/react-dom": "17.0.14",
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "14.0.4", "next": "canary",
"next-auth": "4.18.7", "next-auth": "4.18.7",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",

View File

@@ -161,6 +161,8 @@ export const useSession = (options: UseSessionOptions = {}): ClientSession => {
if (isServer) { if (isServer) {
const e = new Error() const e = new Error()
e.name = "Rendering Suspense fallback..." e.name = "Rendering Suspense fallback..."
;(e as any).digest = "DYNAMIC_SERVER_USAGE"
e.message = "DYNAMIC_SERVER_USAGE"
delete e.stack delete e.stack
throw e throw e
} else { } else {

View File

@@ -109,11 +109,11 @@ export function NextAuthAdapter<P extends Provider[]>(
const {options, cookies} = await init({ const {options, cookies} = await init({
// @ts-ignore // @ts-ignore
url: new URL( url: new URL(
// @ts-ignore internalRequest.url,
internalRequest.url!,
process.env.APP_ORIGIN || process.env.BLITZ_DEV_SERVER_ORIGIN, process.env.APP_ORIGIN || process.env.BLITZ_DEV_SERVER_ORIGIN,
), ),
authOptions: config as unknown as AuthOptions, authOptions: config as unknown as AuthOptions,
host: internalRequest.url.host,
action, action,
providerId, providerId,
callbackUrl: req.body?.callbackUrl ?? (req.query?.callbackUrl as string), callbackUrl: req.body?.callbackUrl ?? (req.query?.callbackUrl as string),

View File

@@ -47,7 +47,12 @@ async function readJSONBody(
// prettier-ignore // prettier-ignore
const actions = [ "providers", "session", "csrf", "login", "signout", "callback", "verify-request", "error", "_log"] const actions = [ "providers", "session", "csrf", "login", "signout", "callback", "verify-request", "error", "_log"]
export async function toInternalRequest(req: Request): Promise<RequestInternal | Error> { export async function toInternalRequest(req: Request): Promise<
| (RequestInternal & {
url: URL
})
| Error
> {
try { try {
// TODO: url.toString() should not include action and providerId // TODO: url.toString() should not include action and providerId
// see init.ts // see init.ts
@@ -70,7 +75,6 @@ export async function toInternalRequest(req: Request): Promise<RequestInternal |
} }
return { return {
//@ts-ignore
url, url,
action, action,
providerId, providerId,

View File

@@ -22,7 +22,9 @@ interface IsAuthorized {
interface PrismaClientWithSession { interface PrismaClientWithSession {
session: { session: {
findFirst(args?: {where?: {handle?: SessionModel["handle"]}}): Promise<SessionModel | null> findFirst(args?: {where?: {handle?: SessionModel["handle"]}}): Promise<SessionModel | null>
findMany(args?: {where?: {userId?: PublicData["userId"]}}): Promise<SessionModel[]> findMany(args?: {
where?: {userId?: PublicData["userId"]; expiresAt?: {gt?: Date}}
}): Promise<SessionModel[]>
create(args: { create(args: {
data: SessionModel & { data: SessionModel & {
userId?: any userId?: any
@@ -42,7 +44,7 @@ export const PrismaStorage = <Client extends PrismaClientWithSession>(
): SessionConfigMethods => { ): SessionConfigMethods => {
return { return {
getSession: (handle) => db.session.findFirst({where: {handle}}), getSession: (handle) => db.session.findFirst({where: {handle}}),
getSessions: (userId) => db.session.findMany({where: {userId}}), getSessions: (userId) => db.session.findMany({where: {userId, expiresAt: {gt: new Date()}}}),
createSession: (session) => { createSession: (session) => {
let user let user
if (session.userId) { if (session.userId) {

View File

@@ -43,7 +43,7 @@ import {Socket} from "net"
import {UrlObject} from "url" import {UrlObject} from "url"
import {formatWithValidation} from "../shared/url-utils" import {formatWithValidation} from "../shared/url-utils"
export function isLocalhost(req: any): boolean { export function isLocalhost(req: IncomingMessage): boolean {
let {host} = req.headers let {host} = req.headers
let localhost = false let localhost = false
if (host) { if (host) {
@@ -182,30 +182,35 @@ export async function getSession(
} }
export async function getBlitzContext(): Promise<Ctx> { export async function getBlitzContext(): Promise<Ctx> {
const {headers, cookies} = await import("next/headers").catch(() => { try {
throw new Error( const {headers, cookies} = require("next/headers")
"getBlitzContext() can only be used in React Server Components in Nextjs 13 or higher", const req = new IncomingMessage(new Socket()) as IncomingMessage & {
cookies: {[key: string]: string}
}
req.headers = Object.fromEntries(headers())
const csrfToken = cookies().get(COOKIE_CSRF_TOKEN())
if (csrfToken) {
req.headers[HEADER_CSRF] = csrfToken.value
}
req.cookies = Object.fromEntries(
cookies()
.getAll()
.map((c: {name: string; value: string}) => [c.name, c.value]),
) )
}) const res = new ServerResponse(req)
const req = new IncomingMessage(new Socket()) as IncomingMessage & { const session = await getSession(req, res, true)
cookies: {[key: string]: string} const ctx: Ctx = {
session,
}
return ctx
} catch (e) {
if ((e as NodeJS.ErrnoException).code === "MODULE_NOT_FOUND") {
throw new Error(
"Usage of `useAuthenticatedBlitzContext` is supported only in next.js 13.0.0 and above. Please upgrade your next.js version.",
)
}
throw e
} }
req.headers = Object.fromEntries(headers())
const csrfToken = cookies().get(COOKIE_CSRF_TOKEN())
if (csrfToken) {
req.headers[HEADER_CSRF] = csrfToken.value
}
req.cookies = Object.fromEntries(
cookies()
.getAll()
.map((c: {name: string; value: string}) => [c.name, c.value]),
)
const res = new ServerResponse(req)
const session = await getSession(req, res, true)
const ctx: Ctx = {
session,
}
return ctx
} }
interface RouteUrlObject extends Pick<UrlObject, "pathname" | "query" | "href"> { interface RouteUrlObject extends Pick<UrlObject, "pathname" | "query" | "href"> {
@@ -227,58 +232,63 @@ export async function useAuthenticatedBlitzContext({
}) })
const ctx: Ctx = await getBlitzContext() const ctx: Ctx = await getBlitzContext()
const userId = ctx.session.userId const userId = ctx.session.userId
const {redirect} = await import("next/navigation").catch(() => { try {
throw new Error( const {redirect} = require("next/navigation")
"useAuthenticatedBlitzContext() can only be used in React Server Components in Nextjs 13 or higher", if (userId) {
) debug("[useAuthenticatedBlitzContext] User is authenticated")
}) if (redirectAuthenticatedTo) {
if (userId) { if (typeof redirectAuthenticatedTo === "function") {
debug("[useAuthenticatedBlitzContext] User is authenticated") redirectAuthenticatedTo = redirectAuthenticatedTo(ctx)
if (redirectAuthenticatedTo) { }
if (typeof redirectAuthenticatedTo === "function") { const redirectUrl =
redirectAuthenticatedTo = redirectAuthenticatedTo(ctx) typeof redirectAuthenticatedTo === "string"
? redirectAuthenticatedTo
: formatWithValidation(redirectAuthenticatedTo)
debug("[useAuthenticatedBlitzContext] Redirecting to", redirectUrl)
if (role) {
try {
ctx.session.$authorize(role)
} catch (e) {
log.info("Authentication Redirect: " + customChalk.dim(`Role ${role}`), redirectTo)
redirect(redirectUrl)
}
} else {
log.info("Authentication Redirect: " + customChalk.dim("(Authenticated)"), redirectUrl)
redirect(redirectUrl)
}
} }
const redirectUrl = if (redirectTo && role) {
typeof redirectAuthenticatedTo === "string" debug("[useAuthenticatedBlitzContext] redirectTo and role are both defined.")
? redirectAuthenticatedTo
: formatWithValidation(redirectAuthenticatedTo)
debug("[useAuthenticatedBlitzContext] Redirecting to", redirectUrl)
if (role) {
try { try {
ctx.session.$authorize(role) ctx.session.$authorize(role)
} catch (e) { } catch (e) {
log.info("Authentication Redirect: " + customChalk.dim(`Role ${role}`), redirectTo) log.error("Authorization Error: " + (e as Error).message)
redirect(redirectUrl) if (typeof redirectTo !== "string") {
redirectTo = formatWithValidation(redirectTo)
}
log.info("Authorization Redirect: " + customChalk.dim(`Role ${role}`), redirectTo)
redirect(redirectTo)
} }
} else {
log.info("Authentication Redirect: " + customChalk.dim("(Authenticated)"), redirectUrl)
redirect(redirectUrl)
} }
} } else {
if (redirectTo && role) { debug("[useAuthenticatedBlitzContext] User is not authenticated")
debug("[useAuthenticatedBlitzContext] redirectTo and role are both defined.") if (redirectTo) {
try {
ctx.session.$authorize(role)
} catch (e) {
log.error("Authorization Error: " + (e as Error).message)
if (typeof redirectTo !== "string") { if (typeof redirectTo !== "string") {
redirectTo = formatWithValidation(redirectTo) redirectTo = formatWithValidation(redirectTo)
} }
log.info("Authorization Redirect: " + customChalk.dim(`Role ${role}`), redirectTo) log.info("Authentication Redirect: " + customChalk.dim("(Not authenticated)"), redirectTo)
redirect(redirectTo) redirect(redirectTo)
} }
} }
} else { return ctx as AuthenticatedCtx
debug("[useAuthenticatedBlitzContext] User is not authenticated") } catch (e) {
if (redirectTo) { if ((e as NodeJS.ErrnoException).code === "MODULE_NOT_FOUND") {
if (typeof redirectTo !== "string") { throw new Error(
redirectTo = formatWithValidation(redirectTo) "Usage of `useAuthenticatedBlitzContext` is supported only in next.js 13.0.0 and above. Please upgrade your next.js version.",
} )
log.info("Authentication Redirect: " + customChalk.dim("(Not authenticated)"), redirectTo)
redirect(redirectTo)
} }
throw e
} }
return ctx as AuthenticatedCtx
} }
const makeProxyToPublicData = <T extends SessionContextClass>(ctxClass: T): T => { const makeProxyToPublicData = <T extends SessionContextClass>(ctxClass: T): T => {
@@ -563,18 +573,13 @@ const setHeader = (res: ServerResponse, name: string, value: string) => {
} }
} }
const setSessionCookie = ( const setSessionCookie = (res: ServerResponse, sessionToken: string, expiresAt: Date) => {
req: IncomingMessage,
res: ServerResponse,
sessionToken: string,
expiresAt: Date,
) => {
setCookie( setCookie(
res, res,
cookie.serialize(COOKIE_SESSION_TOKEN(), sessionToken, { cookie.serialize(COOKIE_SESSION_TOKEN(), sessionToken, {
path: "/", path: "/",
httpOnly: true, httpOnly: true,
secure: global.sessionConfig.secureCookies && !isLocalhost(req), secure: global.sessionConfig.secureCookies,
sameSite: global.sessionConfig.sameSite, sameSite: global.sessionConfig.sameSite,
domain: global.sessionConfig.domain, domain: global.sessionConfig.domain,
expires: expiresAt, expires: expiresAt,
@@ -582,18 +587,13 @@ const setSessionCookie = (
) )
} }
const setAnonymousSessionCookie = ( const setAnonymousSessionCookie = (res: ServerResponse, token: string, expiresAt: Date) => {
req: IncomingMessage,
res: ServerResponse,
token: string,
expiresAt: Date,
) => {
setCookie( setCookie(
res, res,
cookie.serialize(COOKIE_ANONYMOUS_SESSION_TOKEN(), token, { cookie.serialize(COOKIE_ANONYMOUS_SESSION_TOKEN(), token, {
path: "/", path: "/",
httpOnly: true, httpOnly: true,
secure: global.sessionConfig.secureCookies && !isLocalhost(req), secure: global.sessionConfig.secureCookies,
sameSite: global.sessionConfig.sameSite, sameSite: global.sessionConfig.sameSite,
domain: global.sessionConfig.domain, domain: global.sessionConfig.domain,
expires: expiresAt, expires: expiresAt,
@@ -835,11 +835,11 @@ async function createNewSession(
new Date(), new Date(),
global.sessionConfig.anonSessionExpiryMinutes as number, global.sessionConfig.anonSessionExpiryMinutes as number,
) )
setAnonymousSessionCookie(req, res, anonymousSessionToken, expiresAt) setAnonymousSessionCookie(res, anonymousSessionToken, expiresAt)
setCSRFCookie(req, res, antiCSRFToken, expiresAt) setCSRFCookie(req, res, antiCSRFToken, expiresAt)
setPublicDataCookie(req, res, publicDataToken, expiresAt) setPublicDataCookie(req, res, publicDataToken, expiresAt)
// Clear the essential session cookie in case it was previously set // Clear the essential session cookie in case it was previously set
setSessionCookie(req, res, "", new Date(0)) setSessionCookie(res, "", new Date(0))
setHeader(res, HEADER_SESSION_CREATED, "true") setHeader(res, HEADER_SESSION_CREATED, "true")
return { return {
@@ -891,11 +891,11 @@ async function createNewSession(
privateData: JSON.stringify(newPrivateData), privateData: JSON.stringify(newPrivateData),
}) })
setSessionCookie(req, res, sessionToken, expiresAt) setSessionCookie(res, sessionToken, expiresAt)
setCSRFCookie(req, res, antiCSRFToken, expiresAt) setCSRFCookie(req, res, antiCSRFToken, expiresAt)
setPublicDataCookie(req, res, publicDataToken, expiresAt) setPublicDataCookie(req, res, publicDataToken, expiresAt)
// Clear the anonymous session cookie in case it was previously set // Clear the anonymous session cookie in case it was previously set
setAnonymousSessionCookie(req, res, "", new Date(0)) setAnonymousSessionCookie(res, "", new Date(0))
setHeader(res, HEADER_SESSION_CREATED, "true") setHeader(res, HEADER_SESSION_CREATED, "true")
return { return {
@@ -943,7 +943,7 @@ async function refreshSession(
const publicDataToken = createPublicDataToken(sessionKernel.publicData) const publicDataToken = createPublicDataToken(sessionKernel.publicData)
const expiresAt = addYears(new Date(), 30) const expiresAt = addYears(new Date(), 30)
setAnonymousSessionCookie(req, res, anonymousSessionToken, expiresAt) setAnonymousSessionCookie(res, anonymousSessionToken, expiresAt)
setPublicDataCookie(req, res, publicDataToken, expiresAt) setPublicDataCookie(req, res, publicDataToken, expiresAt)
} else if (global.sessionConfig.method === "essential" && "sessionToken" in sessionKernel) { } else if (global.sessionConfig.method === "essential" && "sessionToken" in sessionKernel) {
const expiresAt = addMinutes(new Date(), global.sessionConfig.sessionExpiryMinutes as number) const expiresAt = addMinutes(new Date(), global.sessionConfig.sessionExpiryMinutes as number)

View File

@@ -1,5 +1,60 @@
# @blitzjs/next # @blitzjs/next
## 2.0.8
### Patch Changes
- 5e61a1681: bug: merge existing and custom blitz turbo configs
- Updated dependencies [5e61a1681]
- Updated dependencies [77555468f]
- blitz@2.0.8
- @blitzjs/rpc@2.0.8
## 2.0.7
### Patch Changes
- ee7bf87ec: Turbopack support for Blitz
This PR includes the changes required to make the Blitz loaders work with Turbopack.
Usage:
```bash
pnpm blitz dev --turbo
```
- Updated dependencies [ee7bf87ec]
- Updated dependencies [178c152b2]
- blitz@2.0.7
- @blitzjs/rpc@2.0.7
## 2.0.6
### Patch Changes
- Updated dependencies [76a2544f9]
- blitz@2.0.6
- @blitzjs/rpc@2.0.6
## 2.0.5
### Patch Changes
- Updated dependencies [6f54841b7]
- blitz@2.0.5
- @blitzjs/rpc@2.0.5
## 2.0.4
### Patch Changes
- 28a79040e: feat: export `BlitzServerMiddleware` from blitz-next with stronger types
- Updated dependencies [dd604c767]
- Updated dependencies [28a79040e]
- blitz@2.0.4
- @blitzjs/rpc@2.0.4
## 2.0.3 ## 2.0.3
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@blitzjs/next", "name": "@blitzjs/next",
"version": "2.0.3", "version": "2.0.8",
"homepage": "https://blitzjs.com/", "homepage": "https://blitzjs.com/",
"repository": { "repository": {
"type": "git", "type": "git",
@@ -29,7 +29,7 @@
"eslint.js" "eslint.js"
], ],
"dependencies": { "dependencies": {
"@blitzjs/rpc": "2.0.3", "@blitzjs/rpc": "2.0.8",
"@types/hoist-non-react-statics": "3.3.1", "@types/hoist-non-react-statics": "3.3.1",
"copy-webpack-plugin": "11.0.0", "copy-webpack-plugin": "11.0.0",
"debug": "4.3.3", "debug": "4.3.3",
@@ -39,13 +39,13 @@
"supports-color": "8.1.1" "supports-color": "8.1.1"
}, },
"peerDependencies": { "peerDependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "*", "next": "*",
"react": "*", "react": "*",
"tslog": "4.9.0" "tslog": "4.9.0"
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@testing-library/dom": "8.13.0", "@testing-library/dom": "8.13.0",
"@testing-library/jest-dom": "5.16.3", "@testing-library/jest-dom": "5.16.3",
"@testing-library/react": "13.4.0", "@testing-library/react": "13.4.0",
@@ -56,10 +56,10 @@
"@types/react": "18.0.25", "@types/react": "18.0.25",
"@types/react-dom": "17.0.14", "@types/react-dom": "17.0.14",
"@types/testing-library__react-hooks": "4.0.0", "@types/testing-library__react-hooks": "4.0.0",
"blitz": "2.0.3", "blitz": "2.0.8",
"cross-spawn": "7.0.3", "cross-spawn": "7.0.3",
"find-up": "4.1.0", "find-up": "4.1.0",
"next": "14.0.4", "next": "canary",
"next-router-mock": "0.9.1", "next-router-mock": "0.9.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",

View File

@@ -22,11 +22,13 @@ import {
RouteUrlObject, RouteUrlObject,
startWatcher, startWatcher,
stopWatcher, stopWatcher,
RequestMiddleware,
} from "blitz" } from "blitz"
import { import {
getInfiniteQueryKey, getInfiniteQueryKey,
getQueryKey, getQueryKey,
installWebpackConfig, installWebpackConfig,
installTurboConfig,
InstallWebpackConfigOptions, InstallWebpackConfigOptions,
ResolverPathOptions, ResolverPathOptions,
DefaultOptions, DefaultOptions,
@@ -271,26 +273,30 @@ export function withBlitz(nextConfig: BlitzConfig = {}): NextConfig {
}, },
}) })
try { if (!process.env.TURBOPACK) {
const sodiumNativePath = fs.realpathSync(path.join(require.resolve("sodium-native"), "..")) try {
const dotNextDirectory = `${process.cwd()}/.next` const sodiumNativePath = fs.realpathSync(
config.plugins.push( path.join(require.resolve("sodium-native"), ".."),
new CopyPlugin({ )
patterns: [ const dotNextDirectory = `${process.cwd()}/.next`
{ config.plugins.push(
//dev new CopyPlugin({
from: `${sodiumNativePath}/prebuilds/`, patterns: [
to: `${dotNextDirectory}/server/vendor-chunks/prebuilds/`, {
}, //dev
{ from: `${sodiumNativePath}/prebuilds/`,
//prod to: `${dotNextDirectory}/server/vendor-chunks/prebuilds/`,
from: `${sodiumNativePath}/prebuilds/`, },
to: `${dotNextDirectory}/server/chunks/prebuilds/`, {
}, //prod
], from: `${sodiumNativePath}/prebuilds/`,
}), to: `${dotNextDirectory}/server/chunks/prebuilds/`,
) },
} catch {} ],
}),
)
} catch {}
}
if (typeof nextConfig.webpack === "function") { if (typeof nextConfig.webpack === "function") {
return nextConfig.webpack(config, options) return nextConfig.webpack(config, options)
@@ -299,6 +305,26 @@ export function withBlitz(nextConfig: BlitzConfig = {}): NextConfig {
}, },
}) })
if (process.env.TURBOPACK) {
const blitzTurboConfig = installTurboConfig()
config.experimental = {
...config.experimental,
turbo: {
loaders: {
...config.experimental?.turbo?.loaders,
},
resolveAlias: {
...config.experimental?.turbo?.resolveAlias,
...blitzTurboConfig.resolveAlias,
},
rules: {
...config.experimental?.turbo?.rules,
...blitzTurboConfig.rules,
},
},
}
}
const {blitz, ...rest} = config const {blitz, ...rest} = config
return rest return rest
} }
@@ -347,3 +373,15 @@ declare module "blitz" {
prefetchInfiniteQuery: PrefetchQueryFn prefetchInfiniteQuery: PrefetchQueryFn
} }
} }
export const BlitzServerMiddleware = <
TMiddleware extends RequestMiddleware<NextApiRequest, BlitzNextApiResponse> = RequestMiddleware<
NextApiRequest,
BlitzNextApiResponse
>,
>(
middleware: TMiddleware,
): BlitzServerPlugin<{}> => ({
requestMiddlewares: [middleware],
exports: () => ({}),
})

View File

@@ -1,5 +1,53 @@
# @blitzjs/rpc # @blitzjs/rpc
## 2.0.8
### Patch Changes
- Updated dependencies [5e61a1681]
- Updated dependencies [77555468f]
- blitz@2.0.8
## 2.0.7
### Patch Changes
- ee7bf87ec: Turbopack support for Blitz
This PR includes the changes required to make the Blitz loaders work with Turbopack.
Usage:
```bash
pnpm blitz dev --turbo
```
- Updated dependencies [ee7bf87ec]
- Updated dependencies [178c152b2]
- blitz@2.0.7
## 2.0.6
### Patch Changes
- Updated dependencies [76a2544f9]
- blitz@2.0.6
## 2.0.5
### Patch Changes
- Updated dependencies [6f54841b7]
- blitz@2.0.5
## 2.0.4
### Patch Changes
- Updated dependencies [dd604c767]
- Updated dependencies [28a79040e]
- blitz@2.0.4
## 2.0.3 ## 2.0.3
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@blitzjs/rpc", "name": "@blitzjs/rpc",
"version": "2.0.3", "version": "2.0.8",
"homepage": "https://blitzjs.com/", "homepage": "https://blitzjs.com/",
"repository": { "repository": {
"type": "git", "type": "git",
@@ -37,19 +37,19 @@
}, },
"peerDependencies": { "peerDependencies": {
"@tanstack/query-core": "4.24.4", "@tanstack/query-core": "4.24.4",
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "*", "next": "*",
"react": "*" "react": "*"
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/auth": "2.0.3", "@blitzjs/auth": "2.0.8",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@tanstack/query-core": "4.24.4", "@tanstack/query-core": "4.24.4",
"@types/debug": "4.1.7", "@types/debug": "4.1.7",
"@types/react": "18.0.25", "@types/react": "18.0.25",
"@types/react-dom": "17.0.14", "@types/react-dom": "17.0.14",
"blitz": "2.0.3", "blitz": "2.0.8",
"next": "14.0.4", "next": "canary",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"typescript": "^4.8.4", "typescript": "^4.8.4",

View File

@@ -157,6 +157,44 @@ export function installWebpackConfig({
}) })
} }
export function installTurboConfig() {
return {
resolveAlias: {
"cross-spawn": {browser: "./turbopack/empty.js"},
"npm-which": {browser: "./turbopack/empty.js"},
fs: {browser: "./turbopack/empty.js"},
},
rules: {
"**/*...blitz*.{jsx,tsx,js,ts}": {
default: {
loaders: [{loader: loaderServer, options: {}}],
as: "*.ts",
},
},
"**/{queries,mutations}/**": {
browser: {
loaders: [
{
loader: loaderClient,
options: {},
},
],
as: "*.ts",
},
default: {
loaders: [
{
loader: loaderServerResolvers,
options: {},
},
],
as: "*.ts",
},
},
},
}
}
// ---------- // ----------
// END LOADER // END LOADER
// ---------- // ----------

View File

@@ -14,12 +14,24 @@ import {getResolverConfig} from "../../parsers/parse-rpc-config"
// Subset of `import type { LoaderDefinitionFunction } from 'webpack'` // Subset of `import type { LoaderDefinitionFunction } from 'webpack'`
export async function loader(this: Loader, input: string): Promise<string> { export async function loader(this: Loader, input: string): Promise<string> {
const compiler = this._compiler!
const id = this.resource const id = this.resource
const root = this._compiler!.context const root = this.rootContext
const isSSR = compiler.name === "server" // Webpack has `_compiler` property. Turbopack does not.
if (!isSSR) { const webpackCompilerName = this._compiler?.name
if (webpackCompilerName) {
const isSSR = webpackCompilerName === "server"
if (!isSSR) {
return await transformBlitzRpcResolverClient(
input,
toPosixPath(id),
toPosixPath(root),
this.query,
)
}
// Handle Turbopack / other bundlers case.
// The decision of which environment to run the loader in is decided by the loader configuration instead.
} else {
return await transformBlitzRpcResolverClient( return await transformBlitzRpcResolverClient(
input, input,
toPosixPath(id), toPosixPath(id),

View File

@@ -13,12 +13,24 @@ import {posix} from "path"
// Subset of `import type { LoaderDefinitionFunction } from 'webpack'` // Subset of `import type { LoaderDefinitionFunction } from 'webpack'`
export async function loader(this: Loader, input: string): Promise<string> { export async function loader(this: Loader, input: string): Promise<string> {
const compiler = this._compiler!
const id = this.resource const id = this.resource
const root = this._compiler!.context const root = this.rootContext
const isSSR = compiler.name === "server" // Webpack has `_compiler` property. Turbopack does not.
if (isSSR) { const webpackCompilerName = this._compiler?.name
if (webpackCompilerName) {
const isSSR = webpackCompilerName === "server"
if (isSSR) {
return await transformBlitzRpcResolverServer(
input,
toPosixPath(id),
toPosixPath(root),
this.query,
)
}
// Handle Turbopack / other bundlers case.
// The decision of which environment to run the loader in is decided by the loader configuration instead.
} else {
return await transformBlitzRpcResolverServer( return await transformBlitzRpcResolverServer(
input, input,
toPosixPath(id), toPosixPath(id),

View File

@@ -1,4 +1,4 @@
import {join} from "path" import {join, relative} from "path"
import {promises} from "fs" import {promises} from "fs"
import { import {
assertPosixPath, assertPosixPath,
@@ -14,17 +14,37 @@ import {
// Subset of `import type { LoaderDefinitionFunction } from 'webpack'` // Subset of `import type { LoaderDefinitionFunction } from 'webpack'`
export async function loader(this: Loader, input: string): Promise<string> { export async function loader(this: Loader, input: string): Promise<string> {
const compiler = this._compiler!
const id = this.resource const id = this.resource
const root = this._compiler!.context const root = this.rootContext
const rpcFolders = this.query.includeRPCFolders ? this.query.includeRPCFolders : [] const rpcFolders = this.query.includeRPCFolders ? this.query.includeRPCFolders : []
const isSSR = compiler.name === "server" // Webpack has `_compiler` property. Turbopack does not.
if (isSSR) { const webpackCompilerName = this._compiler?.name
if (webpackCompilerName) {
const isSSR = webpackCompilerName === "server"
if (isSSR) {
this.cacheable(false)
const resolvers = await collectResolvers(root, rpcFolders, ["ts", "js", "tsx", "jsx"])
return await transformBlitzRpcServer(
this.context,
input,
toPosixPath(id),
toPosixPath(root),
resolvers,
this.query,
)
}
// Handle Turbopack / other bundlers case.
// The decision of which environment to run the loader in is decided by the loader configuration instead.
} else {
this.cacheable(false) this.cacheable(false)
const resolvers = await collectResolvers(root, rpcFolders, ["ts", "js", "tsx", "jsx"]) const resolvers = await collectResolvers(root, rpcFolders, ["ts", "js", "tsx", "jsx"])
return await transformBlitzRpcServer( return await transformBlitzRpcServer(
this.context,
input, input,
toPosixPath(id), toPosixPath(id),
toPosixPath(root), toPosixPath(root),
@@ -43,6 +63,7 @@ function slash(str: string) {
} }
export async function transformBlitzRpcServer( export async function transformBlitzRpcServer(
context: string,
src: string, src: string,
id: string, id: string,
root: string, root: string,
@@ -68,7 +89,9 @@ export async function transformBlitzRpcServer(
code += `__internal_addBlitzRpcResolver('${routePath}','${slash( code += `__internal_addBlitzRpcResolver('${routePath}','${slash(
resolverFilePath, resolverFilePath,
)}',() => ${importStrategy}('${slash(resolverFilePath)}'));` )}',() => ${importStrategy}('${slash(
relative(context, resolverFilePath).replace(/\\/g, "/"),
)}'))`
code += "\n" code += "\n"
} }

View File

@@ -9,10 +9,11 @@ export interface LoaderOptions {
} }
export interface Loader { export interface Loader {
_compiler?: { _compiler: {
name: string name: string
context: string
} }
rootContext: string
context: string
resource: string resource: string
cacheable: (enabled: boolean) => void cacheable: (enabled: boolean) => void
query: LoaderOptions query: LoaderOptions

View File

@@ -1,5 +1,53 @@
# blitz # blitz
## 2.0.8
### Patch Changes
- 5e61a1681: bug: merge existing and custom blitz turbo configs
- 77555468f: fix: add missing host while initialising the next-auth adapter
- @blitzjs/generator@2.0.8
## 2.0.7
### Patch Changes
- ee7bf87ec: Turbopack support for Blitz
This PR includes the changes required to make the Blitz loaders work with Turbopack.
Usage:
```bash
pnpm blitz dev --turbo
```
- 178c152b2: fix: patch next.js to hide intentional throws of `DYNAMIC_SERVER_USAGE`
- @blitzjs/generator@2.0.7
## 2.0.6
### Patch Changes
- 76a2544f9: Use `SIGINT` signal instead of `SIGABRT` to stop the process, when using custom server for better compatibility with operative systems
- @blitzjs/generator@2.0.6
## 2.0.5
### Patch Changes
- 6f54841b7: fix: getBlitzContext() can only be used in React Server Components in Nextjs 13 or higher
- @blitzjs/generator@2.0.5
## 2.0.4
### Patch Changes
- dd604c767: perf: add filter to select only non expired sessions
- 28a79040e: feat: export `BlitzServerMiddleware` from blitz-next with stronger types
- Updated dependencies [71b995003]
- @blitzjs/generator@2.0.4
## 2.0.3 ## 2.0.3
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "blitz", "name": "blitz",
"version": "2.0.3", "version": "2.0.8",
"homepage": "https://blitzjs.com/", "homepage": "https://blitzjs.com/",
"repository": { "repository": {
"type": "git", "type": "git",
@@ -30,7 +30,7 @@
"blitz": "bin/blitz" "blitz": "bin/blitz"
}, },
"dependencies": { "dependencies": {
"@blitzjs/generator": "2.0.3", "@blitzjs/generator": "2.0.8",
"@mrleebo/prisma-ast": "0.2.6", "@mrleebo/prisma-ast": "0.2.6",
"@types/global-agent": "2.1.1", "@types/global-agent": "2.1.1",
"arg": "5.0.1", "arg": "5.0.1",
@@ -80,7 +80,7 @@
"watchpack": "2.1.1" "watchpack": "2.1.1"
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@types/cookie": "0.4.1", "@types/cookie": "0.4.1",
"@types/cross-spawn": "6.0.2", "@types/cross-spawn": "6.0.2",
"@types/debug": "4.1.7", "@types/debug": "4.1.7",

View File

@@ -16,7 +16,14 @@ export const codegenTasks = async () => {
*/ */
const nextDir = await resolveCwd("next") const nextDir = await resolveCwd("next")
const nextClientIndex = join(nextDir, "../..", "client", "index.js") const nextClientIndex = join(nextDir, "../..", "client", "index.js")
const nextClientOnRecoverableErrorIndex = join(
nextDir,
"../..",
"client",
"on-recoverable-error.js",
)
const readFile = await fs.readFile(nextClientIndex) const readFile = await fs.readFile(nextClientIndex)
const readOnRecoverableErrorFile = await fs.readFile(nextClientOnRecoverableErrorIndex)
const packageJson = await getPackageJson() const packageJson = await getPackageJson()
const version = packageJson.dependencies.next const version = packageJson.dependencies.next
const nextVersion = semver.clean(version, {loose: true}) || semver.valid(semver.coerce(version)) const nextVersion = semver.clean(version, {loose: true}) || semver.valid(semver.coerce(version))
@@ -48,14 +55,16 @@ export const codegenTasks = async () => {
) )
await fs.writeFile(nextClientIndex, updatedFile) await fs.writeFile(nextClientIndex, updatedFile)
log.success("Next.js was successfully patched with a React Suspense fix") log.success("Next.js was successfully patched with a React Suspense fix")
} else if (nextVersion && semver.satisfies(nextVersion, ">=13.3.1")) { } else {
const updatedFile = readFile const updatedFile = readOnRecoverableErrorFile.toString().replace(
.toString() /defaultOnRecoverableError\(err\);/gm,
.replace( ` if (err.toString().includes("DYNAMIC_SERVER_USAGE") || err.toString().includes("could not finish this Suspense boundary") || err.toString().includes("Minified React error #419")) {
/_onrecoverableerror\.default$/gm, return;
`(err) => (err.toString().includes("DYNAMIC_SERVER_USAGE") || err.toString().includes("could not finish this Suspense boundary") || err.toString().includes("Minified React error #419")) ? null : _onrecoverableerror.default(err)`, } else {
) defaultOnRecoverableError(err)
await fs.writeFile(nextClientIndex, updatedFile) }`,
)
await fs.writeFile(nextClientOnRecoverableErrorIndex, updatedFile)
log.success("Next.js was successfully patched with a React Suspense fix") log.success("Next.js was successfully patched with a React Suspense fix")
} }
} catch (err) { } catch (err) {

View File

@@ -2,7 +2,7 @@ import {ChildProcess} from "child_process"
import {spawn} from "cross-spawn" import {spawn} from "cross-spawn"
import detect from "detect-port" import detect from "detect-port"
import path from "path" import path from "path"
import {existsSync, readJSONSync} from "fs-extra" import {copySync, existsSync, readJSONSync} from "fs-extra"
import * as esbuild from "esbuild" import * as esbuild from "esbuild"
import pkgDir from "pkg-dir" import pkgDir from "pkg-dir"
import type {ServerConfig} from "./config" import type {ServerConfig} from "./config"
@@ -127,7 +127,7 @@ export function startCustomServer(
console.log("\n") console.log("\n")
//@ts-ignore -- incorrect TS type from node //@ts-ignore -- incorrect TS type from node
process.exitCode = RESTART_CODE process.exitCode = RESTART_CODE
process.kill("SIGABRT") process.kill("SIGINT")
} }
}, },
} }
@@ -151,22 +151,12 @@ function getSpawnEnv(config: ServerConfig) {
return spawnEnv return spawnEnv
} }
async function createCommandAndPort(config: ServerConfig, command: string) { async function detectAvailablePort(config: ServerConfig) {
let spawnCommand: string[] = [command] return await detect({port: config.port ? config.port : 3000})
let availablePort: number
availablePort = await detect({port: config.port ? config.port : 3000})
spawnCommand = spawnCommand.concat(["-p", `${availablePort}`])
if (config.hostname) {
spawnCommand = spawnCommand.concat(["-H", `${config.hostname}`])
}
const spawnEnv = getSpawnEnv(config)
return {spawnCommand, spawnEnv, availablePort}
} }
const frameworkCommands = ["blitz", "next"]
export async function nextStartDev( export async function nextStartDev(
nextBin: string, nextBin: string,
cwd: string, cwd: string,
@@ -174,12 +164,11 @@ export async function nextStartDev(
_buildFolder: string, _buildFolder: string,
config: ServerConfig, config: ServerConfig,
) { ) {
const {spawnCommand, spawnEnv, availablePort} = await createCommandAndPort(config, "dev") const spawnEnv = getSpawnEnv(config)
const availablePort = await detectAvailablePort(config)
process.env.BLITZ_DEV_SERVER_ORIGIN = `http://localhost:${availablePort}` process.env.BLITZ_DEV_SERVER_ORIGIN = `http://localhost:${availablePort}`
debug("cwd ", cwd) const spawnCommand = process.argv.slice(2).filter((arg) => !frameworkCommands.includes(arg))
debug("spawn ", nextBin, spawnCommand)
return new Promise<void>((res, rej) => { return new Promise<void>((res, rej) => {
spawn(nextBin, spawnCommand, { spawn(nextBin, spawnCommand, {
@@ -248,7 +237,8 @@ export function nextExport(nextBin: string, config: ServerConfig) {
} }
export async function nextStart(nextBin: string, _buildFolder: string, config: ServerConfig) { export async function nextStart(nextBin: string, _buildFolder: string, config: ServerConfig) {
const {spawnCommand, spawnEnv} = await createCommandAndPort(config, "start") const spawnEnv = getSpawnEnv(config)
const spawnCommand = process.argv.slice(2).filter((arg) => !frameworkCommands.includes(arg))
return new Promise<void>((res, rej) => { return new Promise<void>((res, rej) => {
spawn(nextBin, spawnCommand, { spawn(nextBin, spawnCommand, {

View File

@@ -84,6 +84,5 @@ if (typeof window !== "undefined" && process.env.NODE_ENV === "development") {
export * from "./utils" export * from "./utils"
export * from "./types" export * from "./types"
export * from "./utils/enhance-prisma"
export * from "./utils/zod" export * from "./utils/zod"
export {reduceBlitzClientPlugins} from "./plugin" export {reduceBlitzClientPlugins} from "./plugin"

View File

@@ -13,6 +13,7 @@ export {reduceBlitzServerPlugins} from "./plugin"
export {findNodeModulesRoot, findNodeModulesRootSync} from "./cli/utils/find-node-modules" export {findNodeModulesRoot, findNodeModulesRootSync} from "./cli/utils/find-node-modules"
export {startWatcher, stopWatcher} from "./cli/utils/routes-manifest" export {startWatcher, stopWatcher} from "./cli/utils/routes-manifest"
export * from "./utils/enhance-prisma"
export interface MiddlewareResponse<C extends Ctx = Ctx> extends ServerResponse { export interface MiddlewareResponse<C extends Ctx = Ctx> extends ServerResponse {
blitzCtx: C blitzCtx: C

View File

@@ -1,5 +1,50 @@
# @blitzjs/codemod # @blitzjs/codemod
## 2.0.8
### Patch Changes
- Updated dependencies [5e61a1681]
- Updated dependencies [77555468f]
- blitz@2.0.8
- @blitzjs/generator@2.0.8
## 2.0.7
### Patch Changes
- Updated dependencies [ee7bf87ec]
- Updated dependencies [178c152b2]
- blitz@2.0.7
- @blitzjs/generator@2.0.7
## 2.0.6
### Patch Changes
- Updated dependencies [76a2544f9]
- blitz@2.0.6
- @blitzjs/generator@2.0.6
## 2.0.5
### Patch Changes
- Updated dependencies [6f54841b7]
- blitz@2.0.5
- @blitzjs/generator@2.0.5
## 2.0.4
### Patch Changes
- f25aac08c: Added support to codemod upgrade-legacy for projects that have their pages folder nested in a src/ folder
- Updated dependencies [dd604c767]
- Updated dependencies [71b995003]
- Updated dependencies [28a79040e]
- blitz@2.0.4
- @blitzjs/generator@2.0.4
## 2.0.3 ## 2.0.3
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@blitzjs/codemod", "name": "@blitzjs/codemod",
"version": "2.0.3", "version": "2.0.8",
"scripts": { "scripts": {
"build": "unbuild", "build": "unbuild",
"dev": "watch unbuild src --wait=0.2", "dev": "watch unbuild src --wait=0.2",
@@ -25,9 +25,9 @@
"@babel/plugin-proposal-class-properties": "7.17.12", "@babel/plugin-proposal-class-properties": "7.17.12",
"@babel/plugin-syntax-jsx": "7.17.12", "@babel/plugin-syntax-jsx": "7.17.12",
"@babel/plugin-syntax-typescript": "7.17.12", "@babel/plugin-syntax-typescript": "7.17.12",
"@blitzjs/generator": "2.0.3", "@blitzjs/generator": "2.0.8",
"arg": "5.0.1", "arg": "5.0.1",
"blitz": "2.0.3", "blitz": "2.0.8",
"chalk": "^4.1.0", "chalk": "^4.1.0",
"cross-spawn": "7.0.3", "cross-spawn": "7.0.3",
"debug": "4.3.3", "debug": "4.3.3",
@@ -38,7 +38,7 @@
}, },
"devDependencies": { "devDependencies": {
"@babel/preset-env": "7.12.10", "@babel/preset-env": "7.12.10",
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@types/jscodeshift": "0.11.2", "@types/jscodeshift": "0.11.2",
"@types/node": "18.11.9", "@types/node": "18.11.9",
"ast-types": "0.14.2", "ast-types": "0.14.2",

View File

@@ -32,6 +32,12 @@ class ExpectedError extends Error {
} }
} }
const findPagesDirectory = () => {
const srcPagesDir = path.join("src", "pages")
const pagesDir = path.resolve("pages")
return fs.existsSync(srcPagesDir) ? path.resolve(srcPagesDir) : pagesDir
}
const isInternalBlitzMonorepoDevelopment = fs.existsSync( const isInternalBlitzMonorepoDevelopment = fs.existsSync(
path.join(__dirname, "../../../blitz-next"), path.join(__dirname, "../../../blitz-next"),
) )
@@ -46,7 +52,22 @@ const upgradeLegacy = async () => {
if (blitzConfigFile === "") { if (blitzConfigFile === "") {
throw new ExpectedError("Could not identify Legacy Blitz Config file") throw new ExpectedError("Could not identify Legacy Blitz Config file")
} }
const appDir = path.resolve("app") // Check if app directory exists in either app/ or src/app
const appDir = fs.existsSync(path.resolve("app"))
? path.resolve("app")
: fs.existsSync(path.resolve("src"))
? path.resolve(path.join("src", "app"))
: ""
try {
// Throw Error if appDir empty
if (appDir === "") {
throw new ExpectedError(
"Could not identify Legacy Blitz App directory in project (no app/ or src/ directory found)",
)
}
} catch (e) {
console.error(e)
}
let failedAt = let failedAt =
fs.existsSync(path.resolve(".migration.json")) && fs.readJSONSync("./.migration.json").failedAt fs.existsSync(path.resolve(".migration.json")) && fs.readJSONSync("./.migration.json").failedAt
let collectedErrors: {message: string; step: number}[] = [] let collectedErrors: {message: string; step: number}[] = []
@@ -678,7 +699,7 @@ const upgradeLegacy = async () => {
steps.push({ steps.push({
name: "create pages/api/rpc directory and add [[...blitz]].ts wildecard API route", name: "create pages/api/rpc directory and add [[...blitz]].ts wildecard API route",
action: async () => { action: async () => {
const pagesDir = path.resolve("pages/api/rpc") const pagesDir = path.resolve(`${findPagesDirectory()}/api/rpc`)
const templatePath = path.join( const templatePath = path.join(
require.resolve("@blitzjs/generator"), require.resolve("@blitzjs/generator"),
"..", "..",
@@ -929,7 +950,7 @@ const upgradeLegacy = async () => {
name: "convert useRouterQuery to useRouter", name: "convert useRouterQuery to useRouter",
action: async () => { action: async () => {
//First check ./pages //First check ./pages
const pagesDir = path.resolve("pages") const pagesDir = findPagesDirectory()
getAllFiles(pagesDir, [], [], [".ts", ".tsx", ".js", ".jsx"]).forEach((file) => { getAllFiles(pagesDir, [], [], [".ts", ".tsx", ".js", ".jsx"]).forEach((file) => {
try { try {
const filepath = path.resolve(pagesDir, file) const filepath = path.resolve(pagesDir, file)
@@ -1061,7 +1082,7 @@ const upgradeLegacy = async () => {
steps.push({ steps.push({
name: "wrap App component with withBlitz HOC", name: "wrap App component with withBlitz HOC",
action: async () => { action: async () => {
const pagesDir = path.resolve("pages") const pagesDir = findPagesDirectory()
const program = getCollectionFromSource( const program = getCollectionFromSource(
path.join(pagesDir, `_app.${isTypescript ? "tsx" : "jsx"}`), path.join(pagesDir, `_app.${isTypescript ? "tsx" : "jsx"}`),
@@ -1111,7 +1132,7 @@ const upgradeLegacy = async () => {
steps.push({ steps.push({
name: "update imports in the _document file", name: "update imports in the _document file",
action: async () => { action: async () => {
const pagesDir = path.resolve("pages") const pagesDir = findPagesDirectory()
if (fs.existsSync(path.join(pagesDir, `_document.${isTypescript ? "tsx" : "jsx"}`))) { if (fs.existsSync(path.join(pagesDir, `_document.${isTypescript ? "tsx" : "jsx"}`))) {
const program = getCollectionFromSource( const program = getCollectionFromSource(
@@ -1191,7 +1212,7 @@ const upgradeLegacy = async () => {
steps.push({ steps.push({
name: "wrap getServerSideProps, getStaticProps and API handlers with gSSP, gSP, and api", name: "wrap getServerSideProps, getStaticProps and API handlers with gSSP, gSP, and api",
action: async () => { action: async () => {
const pagesDir = path.resolve("pages") const pagesDir = findPagesDirectory()
getAllFiles(pagesDir, [], ["api"], [".ts", ".tsx", ".js", ".jsx"]).forEach((file) => { getAllFiles(pagesDir, [], ["api"], [".ts", ".tsx", ".js", ".jsx"]).forEach((file) => {
try { try {
const program = getCollectionFromSource(file) const program = getCollectionFromSource(file)
@@ -1314,7 +1335,9 @@ const upgradeLegacy = async () => {
steps.push({ steps.push({
name: "check for usages of invokeWithMiddleware", name: "check for usages of invokeWithMiddleware",
action: async () => { action: async () => {
getAllFiles(path.resolve("pages"), [], [], [".ts", ".tsx", ".js", ".jsx"]).forEach((file) => { const srcPagesDir = path.resolve(path.join("src/pages"))
const pagesDir = fs.existsSync(srcPagesDir) ? srcPagesDir : path.resolve("pages")
getAllFiles(pagesDir, [], [], [".ts", ".tsx", ".js", ".jsx"]).forEach((file) => {
const program = getCollectionFromSource(file) const program = getCollectionFromSource(file)
try { try {
const invokeWithMiddlewarePath = findCallExpression(program, "invokeWithMiddleware") const invokeWithMiddlewarePath = findCallExpression(program, "invokeWithMiddleware")

View File

@@ -1,5 +1,15 @@
# @blitzjs/config # @blitzjs/config
## 2.0.8
## 2.0.7
## 2.0.6
## 2.0.5
## 2.0.4
## 2.0.3 ## 2.0.3
## 2.0.2 ## 2.0.2

View File

@@ -1,7 +1,7 @@
{ {
"name": "@blitzjs/config", "name": "@blitzjs/config",
"private": true, "private": true,
"version": "2.0.3", "version": "2.0.8",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/eslint-plugin": "5.42.1", "@typescript-eslint/eslint-plugin": "5.42.1",

View File

@@ -1,5 +1,19 @@
# @blitzjs/generator # @blitzjs/generator
## 2.0.8
## 2.0.7
## 2.0.6
## 2.0.5
## 2.0.4
### Patch Changes
- 71b995003: fix: ajv dependency was not installed with blitz new
## 2.0.3 ## 2.0.3
### Patch Changes ### Patch Changes

View File

@@ -1,6 +1,6 @@
{ {
"name": "@blitzjs/generator", "name": "@blitzjs/generator",
"version": "2.0.3", "version": "2.0.8",
"homepage": "https://blitzjs.com/", "homepage": "https://blitzjs.com/",
"repository": { "repository": {
"type": "git", "type": "git",
@@ -54,7 +54,7 @@
"zod": "3.20.2" "zod": "3.20.2"
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@juanm04/cpx": "2.0.1", "@juanm04/cpx": "2.0.1",
"@types/babel__core": "7.1.19", "@types/babel__core": "7.1.19",
"@types/diff": "5.0.2", "@types/diff": "5.0.2",

View File

@@ -31,7 +31,7 @@
"@prisma/client": "5.4.2", "@prisma/client": "5.4.2",
"blitz": "latest", "blitz": "latest",
"formik": "2.4.5", "formik": "2.4.5",
"next": "13.5.4", "next": "14.1.4",
"prisma": "5.4.2", "prisma": "5.4.2",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
@@ -48,6 +48,7 @@
"@types/react": "18.0.25", "@types/react": "18.0.25",
"@typescript-eslint/eslint-plugin": "5.42.1", "@typescript-eslint/eslint-plugin": "5.42.1",
"@vitejs/plugin-react": "2.2.0", "@vitejs/plugin-react": "2.2.0",
"ajv": "^7.0.0",
"eslint": "8.27.0", "eslint": "8.27.0",
"eslint-config-next": "12.3.1", "eslint-config-next": "12.3.1",
"eslint-config-prettier": "8.5.0", "eslint-config-prettier": "8.5.0",

View File

@@ -27,7 +27,7 @@
"@blitzjs/rpc": "latest", "@blitzjs/rpc": "latest",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "latest", "blitz": "latest",
"next": "13.4.5", "next": "14.1.4",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",

View File

@@ -27,7 +27,7 @@
"@blitzjs/rpc": "latest", "@blitzjs/rpc": "latest",
"@prisma/client": "4.6.1", "@prisma/client": "4.6.1",
"blitz": "latest", "blitz": "latest",
"next": "13.4.5", "next": "14.1.4",
"prisma": "4.6.1", "prisma": "4.6.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
@@ -45,6 +45,7 @@
"@types/react": "18.0.25", "@types/react": "18.0.25",
"@typescript-eslint/eslint-plugin": "5.42.1", "@typescript-eslint/eslint-plugin": "5.42.1",
"@vitejs/plugin-react": "2.2.0", "@vitejs/plugin-react": "2.2.0",
"ajv": "^7.0.0",
"eslint": "8.27.0", "eslint": "8.27.0",
"eslint-config-next": "12.3.1", "eslint-config-next": "12.3.1",
"eslint-config-prettier": "8.5.0", "eslint-config-prettier": "8.5.0",

View File

@@ -25,7 +25,7 @@
"@typescript-eslint/parser": "5.9.1" "@typescript-eslint/parser": "5.9.1"
}, },
"devDependencies": { "devDependencies": {
"@blitzjs/config": "2.0.3", "@blitzjs/config": "2.0.8",
"@types/react": "18.0.25", "@types/react": "18.0.25",
"@types/react-dom": "17.0.14", "@types/react-dom": "17.0.14",
"react": "18.2.0", "react": "18.2.0",

1426
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -23,7 +23,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -22,7 +22,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -24,7 +24,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -24,7 +24,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -22,7 +22,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -24,6 +24,6 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3" "blitz": "2.0.8"
} }
} }

View File

@@ -24,6 +24,6 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3" "blitz": "2.0.8"
} }
} }

View File

@@ -23,7 +23,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -22,7 +22,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0", "jscodeshift": "0.13.0",
"uuid": "^8.3.1" "uuid": "^8.3.1"
}, },

View File

@@ -23,7 +23,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -23,7 +23,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -23,7 +23,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -23,6 +23,6 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3" "blitz": "2.0.8"
} }
} }

View File

@@ -22,6 +22,6 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3" "blitz": "2.0.8"
} }
} }

View File

@@ -23,7 +23,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -22,6 +22,6 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3" "blitz": "2.0.8"
} }
} }

View File

@@ -22,7 +22,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0", "jscodeshift": "0.13.0",
"uuid": "^8.3.1" "uuid": "^8.3.1"
}, },

View File

@@ -24,7 +24,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -24,7 +24,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -22,7 +22,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -23,7 +23,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -25,7 +25,7 @@
}, },
"homepage": "https://github.com/blitz-js/blitz#readme", "homepage": "https://github.com/blitz-js/blitz#readme",
"dependencies": { "dependencies": {
"blitz": "2.0.3", "blitz": "2.0.8",
"jscodeshift": "0.13.0" "jscodeshift": "0.13.0"
}, },
"devDependencies": { "devDependencies": {